到目前为止我发现的最简单的解决方案如下.
首先,使用mappedName属性注释无状态bean:
@Stateless(mappedName="HelloService")
@Remote
public class HelloServiceBean implements HelloService {
public String hello() {
return "hello";
}
}
根据http://forums.oracle.com/forums/thread.jspa?threadID=800314&tstart=1,除非将JNDI名称作为mappedName属性(或在部署描述符中或在专有注释中)给出,否则Weblogic永远不会为EJB创建JNDI条目.
接下来,您现在可以使用带有mappedName属性的@EJB来注释客户端字段,该属性应该与服务器bean上的属性相同. (老实说,我很困惑.NameNotFoundException when calling a EJB in Weblogic 10.3建议我应该能够使用mappedName#interfaceName语法,但在我的测试中这不起作用.):
@Stateless
public class HelloClientBean {
@EJB(mappedName="HelloService")
HelloService helloService;
// other methods...
}
只要两个EAR都部署在同一个容器中,现在就可以了.接下来,我将尝试在不同的计算机上部署时找出正确的语法.