référence objet recherche de JNDI résulte ClassCastException
Question
Je vais avoir des problèmes appelant bean sans état EJB3 extérieur du conteneur.
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ée en exception:
java.lang.ClassCastException: javax.naming.Reference
J'utilise JBoss.org 5.1.0 GA.
Sur la base des autres postes que je soupçonne que cela pourrait être dû à une mauvaise version des bibliothèques clientes. Cependant, je ne suis pas sûr que pot de bibliothèque (s) je dois inclure dans le pot? (Je reçois l'erreur à l'aide de jnpserver 5.0.4.GA.)
La solution
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 JNDI environement dans un fichier jndi.properties
(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 facile à transporter.
Et dans les deux cas, vous aurez besoin jbossall-client.jar
sur le chemin de classe du côté client.
PS:. Vous pouvez vérifier le Global Nom JNDI votre bean est enregistré à la JNDI Voir de la console JMX sur le Web (si elle existe encore)