我有一个作为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模块由具有myservice-config.jar
类的JAR依赖项Configs
组成,是否可以在该类中而不是我的消息驱动Bean中检索这些条目?那如何改变ejb-jar.xml
文件?
[1] https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/servjndi008.htm
答案 0 :(得分: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
中,将其声明为单例bean;然后将您的env-entry
值注入其中。然后可以将Configs
单例bean注入其他bean。尽管可能是非标准的,ejb-jar.xml
可以将应用程序类路径上的任何类声明为EJB。
2-声明Confg
为CDI托管bean,并使用@Inject
批注。 CDI没有web.xml
或ejb-jar.xml
之类的东西,因此使用CDI时必须使用注释。