Frage

Ich habe Probleme, EJB3 Stateless Bean außerhalb des Containers aufzurufen.

Code zum Abrufen der Objektreferenz:

Context envCtx = (Context) context.lookup("ejb");
MyObject o = (MyObject) envCtx.lookup(MyObject);

Die zweite Zeile führt zu einer Ausnahme:

java.lang.ClassCastException: javax.naming.Reference

Ich verwende JBoss.org 5.1.0 GA.

Aufgrund einiger anderer Beiträge vermute ich, dass dies an der falschen Version der Client-Bibliotheken liegen könnte.Allerdings bin ich mir nicht sicher, welche(s) Bibliotheks-JAR(s) ich in das JAR aufnehmen soll?(Ich erhalte den Fehler bei Verwendung von 5.0.4.GA jnpserver.)

War es hilfreich?

Lösung

Für JBoss sollte Ihr Code etwa so aussehen:

Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");

Context context = new InitialContext(properties);
(EchoBeanRemote) c.lookup("EchoBean/remote");

Wenn Sie möchten, können Sie die JNDI-Umgebungseinstellungen in a einfügen jndi.properties Datei (die sich im Klassenpfad befinden muss):

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099

Und verwenden Sie das Nicht-Argument InitialContext Konstrukteur:

Context context = new InitialContext();
(EchoBeanRemote) c.lookup("EchoBean/remote");

Dies ist offensichtlich tragbarer.

Und in beiden Fällen benötigen Sie jbossall-client.jar im Klassenpfad auf der Clientseite.

P.S.:Sie können das überprüfen Globaler JNDI-Name Ihre Bean ist in der registriert JNDI-Ansicht der webbasierten JMX-Konsole (falls noch vorhanden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top