从 JNDI 查找对象引用会导致 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。
根据其他一些帖子,我怀疑这可能是由于客户端库版本错误造成的。但是,我不确定应该在 jar 中包含哪个库 jar? (我使用 5.0.4.GA jnpserver 收到错误。)
I'm having problems calling EJB3 stateless bean outside the container.
Code for getting the object reference:
Context envCtx = (Context) context.lookup("ejb");
MyObject o = (MyObject) envCtx.lookup(MyObject);
The second row results in exception:
java.lang.ClassCastException: javax.naming.Reference
I use JBoss.org 5.1.0 GA.
Based on some other posts I suspect this might be due to wrong version of client libraries. However, I'm unsure which library jar(s) I should include in the jar? (I get the error using 5.0.4.GA jnpserver.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于 JBoss,您的代码应该如下所示:
如果您愿意,您可以将 JNDI 环境设置放在
jndi.properties
文件中(需要位于类路径上):并使用非arg
InitialContext
构造函数:这显然更加可移植。
在这两种情况下,您都需要在客户端的类路径中添加
jbossall-client.jar
。PS:您可以在基于 Web 的 JMX 控制台的 JNDI 视图 中检查您的 Bean 注册的全局 JNDI 名称(如果它仍然存在)。
For JBoss, your code should look something like that:
If you prefer, you can put the JNDI environement settings in a
jndi.properties
file (that needs to be on the classpath):And use the non-arg
InitialContext
constructor:This is obviously more portable.
And in both case, you'll need
jbossall-client.jar
on the classpath on the client side.P.S.: You can check the Global JNDI Name your bean is registered at in the JNDI View of the web-based JMX console (if it still exists).