如何从子 EJB 项目中找到数据源?

How can I find datasource from child EJB project?

同样的事情在 Liberty 中工作得很好,但我必须让它工作 使用 WebSphere 8.0...

我有一个 EAR > WAR > EJB 项目结构的应用程序。这 想法是使用 RESTful 触发器启动批处理 WAR,它使用 EJB 中的逻辑来执行任务。我有一个 EJB 项目中的持久性帮助器被注入 EntityManager,一切顺利。

JPA 对于我需要注入的数据和容量来说太慢了,所以 我们决定使用 JDBC 批处理导入数据 过程,所以我需要一个数据源。它在服务器控制台中定义 (persistence.xml 将它用于 JPA),我在 web.xml 中定义了它 和 ibm-web-bnd.xml,但我似乎仍然找不到它。此外,如果 我有一个class在WAR吐出来的JNDI树,我可以在下面看到 java:comp/env/jdbc/MyDB,但与 EJB 中的 class 不同 树.

web.xml:

<resource-ref>
    <res-ref-name>jdbc/MyDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    <mapped-name>jdbc/MyDB</mapped-name>
</resource-ref>

ibm-web-bnd.xml:

<resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" />

MyPersistence.java:

@Resource(name="jdbc/MyDB")
private DataSource datasource;

我是否需要一些额外的东西来将数据源向下传递到 EJB 级别?这看起来很奇怪,因为 EntityManager 正在成功使用它。

一如既往,我们将不胜感激!

Post-答案编辑:

根据 Gas 的回答,这是我需要添加到 ibm-ejb-jar-bnd.xml 的条目:

<session name="MyPersistence" simple-binding-name="com.travelers.bi.errordb.persistence.MyPersistence">
    <resource-ref name="jdbc/MyDB" binding-name="jdbc/MyDB" />
</session>

将数据源的 @Resource 注释添加到您的 EJB class(与将其添加到 MyPersistence class 的方式相同),然后创建 ibm-ejb-jar-bnd.xml 文件与您的 ibm-web-bnd.xml 文件具有类似的资源引用绑定。

关于 EJB 绑定文件 - 区别在于 ibm-web-bnd.xml 文件用于 Web 模块中使用的资源,如 servlet 等。从 Java EE 7 开始,您可以将 EJB 嵌入 Web模块,但它们仍然使用自己的 annotations/deployment 描述符作为引用,这就是为什么你有单独的 EJB 绑定文件。