簡體   English   中英

EJB及其依賴中的Jndi查找

[英]Jndi Lookup in EJB and in its dependencies

我有一個作為EAR部署在Websphere 8.5上的Java應用程序。 我試圖找出如何從ejb-jar.xml中進行JNDI查找。 (從EJB到Noob)我通常通過在web.xml中添加條目來從WAR中查找JNDI條目。 現在,我正在研究ejb模塊,我仍然可以在ejb bean [1]上進行JNDI查找。 見下面我的ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?><ejb-jar id="ejb-jar_ID" version="2.1"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>MyService-ejb</display-name>
<enterprise-beans>
    <message-driven id="MyServiceSyncOutboundCom">
        <ejb-name>MyServiceSyncOutboundcom</ejb-name>
        <ejb-class>
            com.company.MyService.sync.com.MyServiceSyncOutboundCom
        </ejb-class>
        <transaction-type>Container</transaction-type>
        <message-destination-type>
            javax.jms.Queue
        </message-destination-type>
        <env-entry>
             <env-entry-name>minBalance</env-entry-name>
             <env-entry-type>java.lang.Integer</env-entry-type>
             <env-entry-value>500</env-entry-value>
        </env-entry>
        <env-entry>
        <description></description>
             <env-entry-name>maxCreditBalance</env-entry-name>
             <env-entry-type>java.lang.Integer</env-entry-type>
             <env-entry-value>10000</env-entry-value>
        </env-entry>
    </message-driven>
</enterprise-beans>


我的問題:既然沒有web.xml,如何將這些條目添加到類中? 另外,如果ejb模塊包含JAR依賴項,例如帶有Configs類的myservice-config.jar ,是否可以在該類中而不是我的消息驅動Bean中檢索這些條目? 那如何改變ejb-jar.xml文件?
[1] https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/servjndi008.htm

ejb-jar.xml文件對EJB的作用與web.xml文件對servlet的作用相同。 注入到EJB的XML語法與注入到servlet的XML語法相同,只是在ejb-jar.xml它嵌套在企業bean中,而不僅僅是在模塊級別。 在您的示例中,將是這樣的:

<env-entry>
    <env-entry-name>minBalance</env-entry-name>
    <env-entry-type>java.lang.Integer</env-entry-type>
    <env-entry-value>500</env-entry-value>
    <injection-target>
        <injection-target-class>com.company.MyService.sync.com.MyServiceSyncOutboundCom</injection-target-class>
        <injection-target-name>name of field or method</injection-target-name>
    </injection-target>
</env-entry>

您只能注入將由容器創建的類; 因此,例如,servlet是由Web容器創建的; EJB實例和攔截器由EJB容器創建。

您的Configs類似乎不是由容器管理的類,因此不能成為注入的目標。 我可以想到仍然可以采用的幾種選擇:

1-在您的ejb-jar.xml ,只需將其聲明為單例bean即可; 然后將您env-entry值注入其中。 然后,您可以將Configs單例bean注入其他bean。 盡管可能是非標准的,但ejb-jar.xml可以將應用程序類路徑上的任何類聲明為EJB。

2-聲明Confg為CDI托管bean,並使用@Inject批注。 CDI沒有類似於web.xmlejb-jar.xml任何內容,因此在使用CDI時必須使用注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM