EJB 及其依赖项中的 Jndi 查找



我在 Websphere 8.5 上部署了一个 Java 应用程序作为 EAR。我试图弄清楚如何从ejb-jar.xml进行JNDI查找。(菜鸟到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>


的问题:现在我没有网络,我如何让这些条目进入我的班级.xml ? 此外,如果 ejb 模块包含一个 JAR 依赖项,例如myservice-config.jarConfigs类,我是否可以在该类中检索这些条目而不是我的消息驱动 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的单例豆注入其他豆子中。尽管可能是非标准的,但ejb-jar.xml可以将应用程序类路径上的任何类声明为 EJB。

2 - 将Confg声明为 CDI 管理的 Bean,并使用@Inject注释。CDI没有类似web.xmlejb-jar.xml的东西,所以在使用CDI时必须使用注释。

最新更新