同样的事情在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>
答案 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的单独绑定文件。