【发布时间】:2011-06-20 09:50:45
【问题描述】:
我有两个 Tomcat 6 实例,它们都调用远程 JBoss 5 服务器上的 EJB。
在两个 Tomcat 上部署相同的客户端代码后,当一个调用 EJB 方法时,我会从应用程序服务器得到一个 NullPointerException,而在另一个它工作正常。
使用调试器查看代码,似乎被调用的方法的哈希码在两次调用之间是不同的,尽管我认为它应该是相同的。由于哈希码不同,在org.jboss.ejb3.service.ServiceContainer 中找不到远程方法。
什么可能导致两次调用之间的哈希码不同?有关信息,工作的 Tomcat 与 JBoss 服务器在同一台机器上,而失败的 Tomcat 必须通过网络连接到 JBoss。两个Tomcat的连接配置是一样的。
解决方案是在 Tomcat 的 lib 目录中存在 jboss-aspect-jdk50-client_4.2.2.jar - 删除此文件可使应用程序正常工作。
我仍然不明白为什么这在本地 Tomcat 实例上有效,但在远程无效。我假设类加载顺序有所不同,或者更可能的是,通信是远程的这一事实导致使用了不同的策略。
我暂时保留这个问题,以防有人可以对最后一点提供解释。
【问题讨论】: