【发布时间】:2010-06-17 03:59:27
【问题描述】:
我有 2 个 ejb。 Ejb-A 调用 Ejb-B。他们不在同一个耳朵里。
为了可移植性,Ejb-B 可能存在也可能不存在于同一台服务器上。 (有一个外部属性文件具有 Ejb-B 的提供程序 URL。我无法控制。)
示例代码:在 Ejb-A 中
EjbBDelegate delegateB = EjbBDelegateHelper.getRemoteDelegate(); // lookup from list of URLs from props...
BookOfMagic bom = delegateB.getSomethingInteresting();
用例/结果:
- 当 Ejb-B 不存在 与 Ejb-A 在同一台服务器上时,一切正常。 (它通过 URL 循环)
- 当 Ejb-B 确实存在在同一台服务器上,并且 Ejb-A 恰好在同一台服务器上调用 Ejb-B 时,一切正常。
- 当 Ejb-B DOES EXIST 在同一台服务器上,而 Ejb-A 在另一台服务器上调用 Ejb-B 时,我得到:
javax.ejb.EJBException:嵌套异常是:java.lang.ClassCastException:$Proxy126 java.lang.ClassCastException: $Proxy126
我正在使用 Weblogic 10.0、Java 5、EJB3
基本上,如果服务器上存在 Ejb-B,则只能在该服务器上调用它。
这让我相信该类正在由本地类加载器加载(在部署时?),然后当远程调用时,另一个类加载器正在加载它。 (导致异常)但它应该可以工作,因为它应该被序列化到目标类加载器中......
我做错了什么??
另外,在本地复制时,Ejb-A 会偏爱同一服务器上的 Ejb-B,因此很难复制。但在其他机器上并非如此。
注意:这一切都适用于 EJB2
【问题讨论】:
标签: java ejb-3.0 weblogic weblogic-10.x java-ee-5