从MDB内部运行时访问ejb-name

时间:2013-09-27 03:33:20

标签: java java-ee ejb

从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>

我试图设置断点并评估新的InitialContext()。lookup(“java:comp / env”)然后遍历list和listBindings,但这只会给我带来env-entry部分而不是我想要的。 / p>

非常令人沮丧,因为在运行时我可以检查一些元素并且能够清楚地看到我之后的内容

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

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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