EJB中的Jndi Lookup及其依赖项

问题描述 投票:0回答:1

我在Websphere 8.5上部署了一个Java应用程序作为EAR。我试图弄清楚如何从ejb-jar.xml进行JNDI查找。 (Noob to EJB)我通常通过在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依赖项,例如myservice-config.jarConfigs类,我可以在该类中检索这些条目而不是我的消息驱动Bean吗?那怎么改变ejb-jar.xml文件呢? [1] https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/servjndi008.htm

java ejb jndi websphere-8
1个回答
0
投票

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中,只要声明它是一个单身豆;然后将你的env-entry值注入其中。然后你可以将Configs单例bean注入其他bean。虽然可能是非标准的,但ejb-jar.xml可以将应用程序类路径上的任何类声明为EJB。

2 - 将Confg声明为CDI托管bean并使用@Inject注释。 CDI没有像web.xmlejb-jar.xml那样的东西,所以在使用CDI时你必须使用注释。

© www.soinside.com 2019 - 2024. All rights reserved.