您可以修改Wildfly JNDi名称并从相应的JNDI名称中删除不需要的前缀,以查找两个应用程序服务器中的最小公分母.以下适用于Glassfish和JBoss AS 7.1.由于我希望Wildfly在这方面与JBoss向后兼容,我想它也适用于Wildfly.
坚持
注入:
@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;
或者通过ejb-jar.xml:
entityManager
TestPU
...
相应的persistence.xml:
datasources/TestDS
org.jeeventstore.persistence.jpa.EventStoreEntry
(注意简单的jta-data-source JNDI名称)
这是一个glassfish-resources.xml文件,用于在部署时指定Derby数据库,类似的设置可用于MysqL或Postgres.
jndi-name="datasources/TestDS"/>
res-type="javax.sql.DataSource"
datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource"
is-isolation-level-guaranteed="false">
以及JBoss standalone.xml中的设置:
jdbc:postgresql://localhost/test_db
...
资源
我没有在Glassfish上注入JavaMail组件,但是类似于datasoruce设置,尝试从@Resource注释中剥离“java:”部分也是值得的.
@Resource(name = "mail/myMailSession")
然后配置Wildfly,以便邮件资源在“java:mail / myMailSession”JNDI位置可用.
通过ejb-jar.xml注入
另一个选择是通过ejb-jar.xml文件手动注入字段,然后使用maven等构建工具将ejb-jar-glassfish.xml或ejb-jar-wildfly.xml中的任何一个复制到所需的ejb-汇编时的jar.xml.
在我们的一个项目中,我们使用混合方法来避免xml配置的负担:我们通过ejb-jar.xml配置少量“提供者”bean,例如将持久化上下文注入到PersistenceContextProvider中,然后使用CDI通过@EJB将PersistenceContextProvider注入EJB,无需进一步配置即可找到它们,因为它们位于同一个EAR中.