【问题标题】:Is there a shorter name I can use to do a JNDI lookup of an EJB?是否有更短的名称可用于对 EJB 进行 JNDI 查找?
【发布时间】:2012-03-15 18:33:32
【问题描述】:

我有一个 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?例如,通过使用较短的查找名称,或“相对路径”而不是“完整路径”?

非常感谢任何建议,谢谢!

罗伯

【问题讨论】:

    标签: ejb websphere


    【解决方案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”来定义它独立于服务器。

    【讨论】:

    • thx - “假设设置了正确的 jndi 属性”是什么意思?目前我只是在做 'new InitialContext().lookup("ejblocal:customerEAR.ear/customerEJB.jar/CustomerService@com.mydomain.service.CustomerServiceLocal")' - 如果我把它改成 '...lookup( "CustomerService")' 我应该设置哪些 JNDI 属性,我应该在哪里设置?感谢您的任何指点!
    • 试过了,不行。说“UnavailableException ... CustomerBean:未找到名称 CustomerBean 中的第一个组件”。我没有远程接口,所以我没有包含远程注释。不过,我确实有一个本地接口——我应该添加一个本地注释吗?
    • 你不能问负责 bean 映射名称的人吗?否则,您可以输出所有 jndi 绑定名称以手动搜索您的名称(谷歌)或检查自动生成的名称对于服务器类型是什么。
    • "你不能问负责 bean 映射名称的人吗?" - 这就是我。 :)
    【解决方案2】:

    如果您想要更短的名称,create an ibm-ejb-jar-bnd.xml 并指定一个绑定,而不是将其留给产品来生成一个明确的名称。请参阅标题为“绑定文件示例 1”的部分。

    根据您是否有多个 EJB 实现您的接口,您还可以使用“短格式”绑定。请参阅标题为“默认绑定模式”的部分。

    【讨论】:

      【解决方案3】:

      由于部署人员坚持在部署之前重命名我的 EAR,我设法让它工作,我设法通过缩短它来让它工作:

      ejblocal:customerEAR.ear/customerEJB.jar/CustomerService@com.mydomain.service.CustomerServiceLocal

      到这里:

      ejblocal:com.mydomain.service.CustomerServiceLocal

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-25
        • 2013-02-02
        • 1970-01-01
        • 2013-01-30
        • 2015-01-25
        • 2010-12-17
        • 2013-02-21
        • 1970-01-01
        相关资源
        最近更新 更多