我在容器外调用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。
基于其他一些帖子,我怀疑这可能是由于客户端库版本错误造成的。但是,我不确定哪个库jar应该包含在jar中? (我使用5.0.4.GA jnpserver获取错误。)
答案 0 :(得分:5)
对于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
并使用非arg InitialContext
构造函数:
Context context = new InitialContext();
(EchoBeanRemote) c.lookup("EchoBean/remote");
这显然更具便携性。
在这两种情况下,您都需要在客户端的类路径上jbossall-client.jar
。
PS:您可以检查您的bean在基于Web的JMX控制台的 JNDI View 中注册的全局JNDI名称(如果它仍然存在)。< / p>