我有两个Tomcat 6实例,它们都在远程JBoss 5服务器上调用EJB。
在两个Tomcats上部署了相同的客户端代码,当一个人调用EJB方法时,我从应用程序服务器获得NullPointerException
,而另一个则可以正常工作。
使用调试器查看代码,看起来调用的方法的哈希码在两个调用之间是不同的,即使我认为它应该是相同的。由于哈希码不同,因此在org.jboss.ejb3.service.ServiceContainer
中找不到远程方法。
什么可能导致两个调用之间的哈希码不同?有关信息,工作的Tomcat与JBoss服务器位于同一台机器上,而失败的Tomcat必须通过网络连接到JBoss。两个Tomcats的连接配置都是一样的。
解决方案是在Tomcat的lib目录中存在jboss-aspect-jdk50-client_4.2.2.jar
- 删除此文件允许应用程序正常工作。
我仍然不明白为什么这可以在本地Tomcat实例上工作但不在远程上工作。我假设类加载顺序在某种程度上是不同的,或者更可能的是,通信是远程的,导致使用不同的策略。
如果有人可以提供最后一点的解释,我会暂时保持这个问题。
答案 0 :(得分:1)
非常奇怪。是否所有三台服务器都运行相同版本的代码?