findet lookup("KundenDAOIml/remote") nicht

Status
Nicht offen für weitere Antworten.

Snake87

Mitglied
HI Leute,

also stehe irgendwie auf Kriegsfuß was Datenbank Anbindung mit Java angeht....
Ich will mit der kleinen EJB3 Anwendung ne Tabelle erzeugen!

Also erstmal die Fehlermeldung:

Code:
Exception in thread "main" javax.naming.NameNotFoundException: KundenDAOImpl not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:785)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:396)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
	at sun.rmi.transport.Transport$1.run(Transport.java:177)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
	at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:713)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:673)
	at javax.naming.InitialContext.lookup(InitialContext.java:409)
	at KundenClient.main(KundenClient.java:12)
KundenClient.class(hier steht die lookup)

Java:
import java.util.Properties;
import javax.naming.InitialContext;

public class KundenClient {
    public static void main(String[] args) throws Exception {
        
		Properties props = new Properties();
		props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		props.put("java.naming.provider.url", "jnp://localhost:1099");
		InitialContext context = new InitialContext(props);
    	
        KundenDAO dao = (KundenDAO) context.lookup("KundenDAOImpl/remote");
        if (args.length > 0) {
            if (args[0].equals("erzeuge") && args.length == 3) {
                int kundenNr = dao.erzeugeKunde(args[1], args[2]);
                System.out.println(kundenNr);
                return;
            }
            else if (args[0].equals("finde") && args.length == 2) {
                Kunde kunde = dao.findeKunde(Integer.parseInt(args[1]));
                if (kunde != null)
                    System.out.println(kunde.getVorname() + " " + kunde.getNachname());
                else
                    System.out.println("Nicht gefunden");
                return;
            }
            else if (args[0].equals("aktualisiere") && args.length == 4) {
                Kunde kunde = dao.aktualisiereKunde(Integer.parseInt(args[1]), args[2], args[3]);
                if (kunde == null)
                    System.out.println("Kein passender Kunde vorhanden");
                return;
            }
        }
        System.out.println
            ("Aufruf: KundenClient\n" +
             "  erzeuge <Vorname> <Nachname>\n" +
             "  finde <ID>\n" +
             "  aktualisiere <ID> <Vorname> <Nachname>");
    }
}

Kunde.class:

Java:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;


@Entity public class Kunde implements java.io.Serializable {

	@Id @GeneratedValue private int id;
	private String vorname;
	private String nachname;
	
	public int getId() { return this.id; }
	public String getNachname() { return nachname; }
	public String getVorname() { return vorname; }

	public void setVorname(String vorname) { this.vorname = vorname; }
	public void setId(int id) { this.id = id; }
	public void setNachname(String nachname) { this.nachname = nachname; }
}


KundenDAO.class:
Java:
import javax.ejb.Remote;

@Remote

public interface KundenDAO {
		public int erzeugeKunde(String vorname, String nachname);
		public Kunde findeKunde(int id);
	        public Kunde aktualisiereKunde(int id, String vorname, String nachname);
	}

KundenDAOImpl.class:

Java:
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name="KundenDAOImpl")
public class KundenDAOImpl implements KundenDAO {

	private @PersistenceContext EntityManager em;
	
	public int erzeugeKunde(String vorname, String nachname) {

		Kunde kunde = new Kunde();
		
		kunde.setVorname(vorname);
		kunde.setNachname(nachname);
		em.persist(kunde);
		
		return kunde.getId();
	}

	public Kunde findeKunde(int id) {
		
		return em.find(Kunde.class, id);
	}

	public Kunde aktualisiereKunde(int id, String vorname, String nachname) {
		
		Kunde kunde = findeKunde(id);
		
		if(kunde != null)
		{
			kunde.setVorname(vorname);
			kunde.setNachname(nachname);
		}
		
		return kunde;
	}
}

Meta-Inf/persistence.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<persistence>
	<persistence-unit name="Kunden">
		<jta-source>java:/PostgresDS</jta-source>
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
		</properties>
	</persistence-unit>
</persistence>

Im Classpath habe ich schon jbossall-client.jar und ich verwende JBoss5

Hoffe ihr könnt mir mal wieder helfen:-(

Danke schon mal!!!
 
Zuletzt bearbeitet:

Snake87

Mitglied
Habe jetzt mal anders versucht... aber leider ging dies auch nicht....;(

Ich habe in KundenDAOImpl eine Konstante geschrieben auf diese ich dann in der KundenClient Datei zugreife...

Java:
public static final String RemoteJNDIName = KundenDAOImpl.class.getSimpleName()+"/remote";


Und in der Client Datei steht nun folgendes:

[Java]KundenDAO dao = (KundenDAO) context.lookup(KundenDAOImpl.RemoteJNDIName);[/Java]

Habt ihr echt keine Idee:-( Muss ich noch irgendwelche andere jar Dateien in den Classpath hinzufügen oder was?
 

fkh

Mitglied
KundenDAOImpl.class:

Java:
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name="KundenDAOImpl")
public class KundenDAOImpl implements KundenDAO {

	[..]
}

Probier mal folgendes

[JAVA=5]@Stateless(name="KundenDAOImpl", mappedName="KundenDAOImpl/remote")[/code]

Gruß
fkh
 

FArt

Top Contributor
Gibt es beim Deployment Fehler?
Schau in die JMX-Console (JNDIView), da sieht man unter welchem Namen was in welchem Scope eingehängt ist.
Nutze Konfigurationen (z.B. name=...) nur, wenn du weißt was sie bedeuten und wenn du den Default überschreiben möchtest. Der Sinn von Annotationen ist: "fasse dich kurz".
 

Snake87

Mitglied
Ich habe wie du gesagt hast in den JMX-Console geschaut und da ist eh Fehler registriert...

Code:
org.jboss.deployers.spi.DeploymentException: Error deploying data5.jar:
 Exception while processing container metadata for EJB: KundenDAO in unit: data5.jar

Nur leider kann ich damit nichts Anfangen, da ich mich erst seit kurzen mit JBoss beschäftige...

Hoffe jemand von euch kann damit was Anfangen...
 

FArt

Top Contributor
Schau ins Logfile. Wenn ein Artefakt nicht deployt werden kann, gibt es im Logfile eine entsprechende Meldung, warum es nicht deployt werden kann.
 

Snake87

Mitglied
In der LOG-Datei steht folgendes:

Code:
2009-08-17 22:51:34,843 ERROR [org.jboss.ejb3.Ejb3Deployment] (main) Exception while
 processing container metadata for EJB: KundenDAO in unit: data5.jar

2009-08-17 22:51:34,844 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController]
 (main) Error installing to Real: name=vfszip:/home/roberto-mobil/01-programme/01-programmieren
/eclipse/jboss-5.1.0.GA/server/default/deploy/data5.jar/state=PreReal mode=Manual requiredState=Real

Hoffe mit den Infos kannst du was Anfangen...

LG
 

Rydl

Bekanntes Mitglied
versuch mal statt "default" einfach "all" als profil für den jboss zu nehmen, vielleicht fehlt ja noch was...
hast du in deiner KundenDaoImpl klasse noch beans injiziert, die aus anderen jars kommen? @EJB xyzDao oder so..? das deployment kann auch scheitern, wenn du in a.jar auf ne ejb in b.jar verweist und b.jar noch gar nicht registriert ist...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben