2

从 ejb-jar.xml 给出这个条目

<message-driven id="my_test_mdb ">
        <description>Some description</description>
        <display-name>MyTest</display-name>
        <ejb-name>MyTestEJB</ejb-name>
        <ejb-class>some.path.to.TestMessageBean</ejb-class>
        <transaction-type>Container</transaction-type>
        <message-driven-destination>
            <destination-type>javax.jms.Queue</destination-type>
        </message-driven-destination>
</message-driven>

有没有办法在运行时访问为 my_test_mdb 定义的值。我主要对获取 ejb-name 值感兴趣,但是对于 display-name 等其他问题应该问同样的问题。

我知道我可以添加一些像下面这样的环境条目,但这在我看来像是一种重复和容易出错的事情。

<message-driven>
    ...
    <ejb-name>MyTestEJB</ejb-name>
    ...
    <env-entry>
            <env-entry-name>ejbName</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>MyTestEJB</env-entry-value>
    </env-entry>
</message-driven>

我试图放置一个断点并评估 new InitialContext().lookup("java:comp/env") 然后遍历 list 和 listBindings 但这只会给我带来 env-entry 部分而不是我想要的。

这是非常令人沮丧的,因为在运行时我可以检查一些元素并且清楚地能够看到我所追求的

javaNameSpaceImpl:{appName=someModule,_moduleName=someModuleEJB,_componentName=MyTestEJB,_bootstrapAddress=rir:…etc}

关于如何实现这一点的任何想法?

先感谢您。

4

1 回答 1

1

没有检索组件名称的标准方法。我同意不幸的是没有 java:comp/CompName(ala java:app/AppName 和 java:module/ModuleName)或 EJBContext.getName()。我过去的建议一直是 env-entry 方法,我同意这并不理想。

于 2013-09-27T15:27:23.407 回答