我有一个Java EE Web应用程序(WebSphere 7)。代码通过执行JDNI查找来查找应用服务器上的EJB。
在我的开发环境(Eclipse / IBM RAD)中,EAR项目称为customerEAR,因此JNDI查找是这样的:
ejblocal:customerEAR.ear/customerEJB.jar/CustomerService@com.mydomain.service.CustomerServiceLocal
但是当在生产应用程序服务器上部署EAR时,查找失败,并且日志文件指出EJB可用于:
ejblocal:server1-dev-customerEAR.ear/customerEJB.jar/CustomerService@com.mydomain.service.CustomerServiceLocal
将EAR部署到服务器的人实际上是可以将eAR文件从customerEAR.ear重命名为server1-dev-customerEAR.jar - 或者WebSphere可能会在部署时重命名?我无法抓住部署人员确定。
但是,无论如何,我的问题是:
是否有更简洁的方法来查找EJB?比如,使用较短的查找名称,或“相对路径”而不是“完整路径”?
非常感谢任何建议,谢谢!
罗布
答案 0 :(得分:1)
您可以使用bean类中的注释为远程EJB定义名称,或者在ejb-jar.xml中定义它。
@Stateless(mappedName = "TestBean")
@Remote(TestBeanRemote.class)
public class TestBean implements TestBeanRemote
{
//...
}
在客户端查找:
TestBeanRemote testBeanRemote = (TestBeanRemote)new InitialContext().lookup("TestBean");
如果您不使用“mappedName”,某些应用程序服务器会为您的Bean名称添加一些后缀以自动生成名称。因此,最好使用“mappedName”来定义服务器无关。
答案 1 :(得分:1)
如果你想要更短的名字,create an ibm-ejb-jar-bnd.xml并指定一个绑定而不是将它留给产品来生成一个明确的名称。请参阅标题为“绑定文件示例1”的部分。
根据您是否有多个EJB实现您的接口,您还可以使用“简短形式”绑定。请参阅标题为“默认绑定模式”的部分。
答案 2 :(得分:0)
由于部署人员在部署之前坚持重命名我的EAR,我设法让它工作,我设法通过缩短它来实现它:
ejblocal:customerEAR.ear/customerEJB.jar/CustomerService@com.mydomain.service.CustomerServiceLocal
到此:
ejblocal:com.mydomain.service.CustomerServiceLocal