![](/img/trans.png)
[英]Why ClassCastException on JMS ConnectionFactory lookup in JNDI?
[英]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.