在Weblogic 10.3中,如何将远程EJB从一个EAR注入到另一个EAR的无状态bean中,两个EAR是否部署在同一个容器中?理想情况下,我希望尽可能多地使用注释。
假设我有以下界面:
public interface HelloService {
public String hello();
}
由以下EJB实现:
@Stateless
@Remote
public class HelloServiceBean implements HelloService {
public String hello() {
return "hello";
}
}
假设它们已在server.ear
打包并部署。现在在client.ear
,我有以下内容:
@Stateless
public class HelloClientBean {
@EJB
HelloService helloService;
// other methods...
}
我需要添加什么才能让Weblogic在HelloClientBean
中的client.ear
和HelloServiceBean
中的server.ear
之间正确计算出布线?热烈欢迎官方文件和/或书籍的指示。
答案 0 :(得分:4)
到目前为止,我发现的最简单的解决方案如下:
首先,使用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条目。 / p>
接下来,您现在可以使用@EJB
使用mappedName
属性注释客户端字段,该属性应与服务器bean上的属性相同。 (老实说,我对此感到困惑。NameNotFoundException when calling a EJB in Weblogic 10.3表示我应该能够使用mappedName#interfaceName
语法,但在我的测试中这不起作用。):
@Stateless
public class HelloClientBean {
@EJB(mappedName="HelloService")
HelloService helloService;
// other methods...
}
只要两个EAR都部署在同一个容器中,现在就可以了。接下来,当它们部署在不同的机器上时,我会尝试找出正确的语法。