2010-01-29 2 views
2

Je rencontre des problèmes pour appeler le bean sans état EJB3 à l'extérieur du conteneur.La recherche de référence d'objet à partir de JNDI aboutit à ClassCastException

code pour obtenir la référence d'objet:

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

Les résultats du deuxième rang dans l'exception:

java.lang.ClassCastException: javax.naming.Reference 

-je utiliser JBoss.org 5.1.0 GA.

D'après certains autres articles, je suppose que cela peut être dû à une mauvaise version des bibliothèques client. Cependant, je ne suis pas sûr quel jar (s) de bibliothèque je devrais inclure dans le pot? (Je reçois l'erreur à l'aide de jnpserver 5.0.4.GA.)

Répondre

5

Pour JBoss, votre code devrait ressembler à quelque chose comme ça:

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"); 

Si vous préférez, vous pouvez mettre les paramètres environement JNDI dans un jndi.properties fichier (qui doit être sur le chemin de classe):

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 

Et utiliser le constructeur InitialContext non arg:

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

Ceci est évidemment plus portable.

Et dans les deux cas, vous aurez besoin de jbossall-client.jar sur le chemin de classe du côté client.

P.S .: Vous pouvez vérifier la globale Nom JNDI votre haricot est inscrit à la JNDI Voir de la console JMX Web (si elle existe encore).

Questions connexes