繁体   English   中英

从JNDI查找对象引用会导致ClassCastException

[英]Object reference lookup from JNDI results in ClassCastException

我在调用容器外部的EJB3无状态Bean时遇到问题。

获取对象引用的代码:

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

第二行导致异常:

java.lang.ClassCastException: javax.naming.Reference

我使用JBoss.org 5.1.0 GA。

根据其他一些帖子,我怀疑这可能是由于客户端库的版本错误造成的。 但是,我不确定应该在罐子中包括哪个库罐子? (使用5.0.4.GA jnpserver时出现错误。)

对于JBoss,您的代码应如下所示:

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

如果愿意,可以将JNDI环境设置放在jndi.properties文件中(该文件必须在类路径中):

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

并使用非参数的InitialContext构造函数:

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

这显然更可移植。

在这两种情况下,您都需要在客户端的类路径上使用jbossall-client.jar

PS:您可以在基于Web的JMX控制台的JNDI视图 (如果它仍然存在)中检查您的bean所注册的全局JNDI名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM