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

标签 java jboss ejb-3.0 jndi jboss5.x

我在容器外部调用 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 收到错误。)

最佳答案

对于 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

P.S.:您可以在基于 Web 的 JMX 控制台的 JNDI View 中检查您的 Bean 注册的全局 JNDI 名称(如果它仍然存在)。

关于java - 从 JNDI 查找对象引用会导致 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2163269/

相关文章:

eclipse - 在 Eclipse Indigo 中安装 JBoss Tools 插件

postgresql - 如何使用 JPA 创建 PostgreSql 序列?

java - 滚动 BufferedImage Java

javassist hotswapper 出现错误--- java.lang.ClassNotFoundException : com. sun.jdi.connect.IllegalConnectorArgumentsException

java - 检查字符串是否包含空格以外的任何字符

java - EJB3 计时器是否继承到创建它们的 bean?

java - 即使有资金池,MDB 的生命周期真的是短暂的吗?

java - 如何使用 Jsoup 从嵌套表中的特定行中提取文本

java - JBoss AS 6 上的持续集成、selenium、Java EE 6

java - 从源代码中查找 JAR 文件的来源以确定所使用的框架?