Jpa 在适用于所有供应商的persistence.xml的jta数据源中放入什么?

Jpa 在适用于所有供应商的persistence.xml的jta数据源中放入什么?,jpa,glassfish,websphere,Jpa,Glassfish,Websphere,类似于和 然而,我要求的是能够在所有供应商或至少WildFly、Glassfish/Payara、WebSphere Application Server classic、WebSphere Application Server Liberty和TomEE上运行的产品。我不是在寻找在JavaSE单元测试中有效的东西 到目前为止,我发现java:comp/env/jdbc/xxx在websphereapplicationserver和TomEE中工作。有一个映射练习(预计)可以让它工作,但我不能在

类似于和

然而,我要求的是能够在所有供应商或至少WildFly、Glassfish/Payara、WebSphere Application Server classic、WebSphere Application Server Liberty和TomEE上运行的产品。我不是在寻找在JavaSE单元测试中有效的东西

到目前为止,我发现
java:comp/env/jdbc/xxx
在websphereapplicationserver和TomEE中工作。有一个映射练习(预计)可以让它工作,但我不能在GlassFish/Payara和JBoss/WildFly上工作


更具体地说,我不希望使用默认数据源,因为对于我的场景,我实际上在处理两个不同的数据源。例如,用于参考数据,另一个用于事务数据

如果您使用的所有应用服务器都兼容Java EE 7,则可以使用默认数据源,这是EE7规范要求的,可在以下位置使用:

java:comp/DefaultDataSource
您运行的应用服务器应该允许您自定义DefaultDataSource的配置

由于我熟悉WebSphere Liberty,我可以向您介绍Liberty上默认数据源的以下文档:


如果您使用的是WebSphere traditional,从v9.0开始,它支持Java EE 7,并且有一个现成的默认数据源(在规范规定的JNDI名称下)。

如果您希望使用在所有服务器上都可用的相同JNDI名称,最好使用资源引用,如中所述


基本上,您可以定义任意的JNDI名称(理想情况下没有任何
java:comp
前缀或类似前缀,就像“myDatasource”一样)然后将其映射到目标服务器提供的具体JNDI名称。如果服务器无法直接使用JNDI,则需要使用映射为每个服务器定义特定于服务器的描述符(例如,glassfish/Payara的glassfish-web.xml、WildFly的jboss-web.xml、WebSphere Classic和Liberty的ibm-web-bnd.xml)。TomEE似乎支持不带前缀的引用,因此如果您选择不带前缀的名称,它应该能够在不带任何其他映射的情况下进行引用。

我将修改该问题,使其更加明确。特别是,因为我需要每个jpa PU.yup有多个数据源,这就是我如何让它与EJB一起工作的,所以我必须放入一个虚拟的`@Resource(name=“java:comp/env/jdbc/jee”)私有数据源ds;`让它参考它。EJB-JAR.XML顶层没有像WEB中那样的资源引用。XMLWebSphere需要
java:comp/env
版本,否则它将把它作为最终的JNDI位置。如果没有它,它将不允许您通过管理控制台设置引用。
java:comp/env
前缀应该在任何java EE应用服务器上都有效。我相信它是按照规范强制要求的,Payara和Wildfly都使用java:comp/DefaultDataSource支持DefaultDataSource。在其他应用程序服务器中,必须配置默认数据源。