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

时间:2016-10-05 16:36:19

标签: java-ee websphere websphere-8

同样的事情在Liberty中很有用,但我必须做到这一点 使用WebSphere 8.0 ...

我有一个带有EAR的应用程序>战争> EJB项目结构。该 想法是使用RESTful触发器启动批处理过程 WAR,它使用EJB中的逻辑来执行taasks。我有一个 EJB项目中的持久性帮助程序,它被注入了 EntityManager,一切都很开心。

JPA对于我需要注入的数据和卷来说太慢了,所以 我们决定使用JDBC批处理来导入数据 进程,所以我需要一个DataSource。它在服务器控制台中定义 (persistence.xml将它用于JPA),我在web.xml中定义它 和ibm-web-bnd.xml,但我似乎无法找到它。而且,如果 我在WAR中有一个类吐出JNDI树,我可以看到它 java:comp / env / jdbc / MyDB,但是从EJB中的一个类来看,它是一个不同的 树。

的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正在成功使用它。

一如既往,感谢任何帮助!

答案后修改:

根据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>

1 个答案:

答案 0 :(得分:1)

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

关于EJB绑定文件 - 不同之处在于ibm-web-bnd.xml文件用于Web模块中使用的资源,例如servlet等。从Java EE 7开始,您可以在Web模块中嵌入EJB,但它们仍然使用他们自己的引用注释/部署描述符,这就是为什么你有EJB的单独绑定文件。