首页 > 解决方案 > 根据 PROD 或 TEST 在 NetBeans 中使用不同的 persistence.xml

问题描述

我有一个带有许多实体类和会话 bean 的 JEE / Maven 项目。

它可以构建,我可以使用 JSF 等几个 Web 模块中的 EJB 模块。该模块使用 Payara 服务器中定义的数据连接。

现在我想构建一些 Junit 测试脚本来使用 Maven 和 Payara 嵌入式自动测试我的会话 bean。

从其他文章中我得出结论,我可以有这样的结构:

/src
   /main
     /java
     /resources
       /META-INF
         persistence.xml
   /test
     /java
     /resources
       /META-INF
         persistence.xml

这将使我可以使用两个不同的 persistence.xml 文件。

我现在遇到的一个问题是 payara 服务器需要数据源的 JNDI 名称,如下所示:

jdbc//myDatasource

而payara嵌入式需要格式:

java:app/jdbc/myDataSource

因此,当我运行测试和想要部署时,它给我带来了问题。

但我无法嵌入 netBeans / Maven / Payara 以使用位于测试中的 persistence.xml 文件。它始终使用位于 main 中的那个。这意味着我的 JUint 测试将无法运行,因为他们找不到正确的数据源。

我主要的persistence.xml:

...
<persistence-unit name="dk.myDS"   transaction-type="JTA">
  <jta-data-source>jdbc/druid</jta-data-source>
  <exclude-unlisted-classes>false</exclude-unlisted-classes>
...

我在测试中的 persistence.xml

....
<persistence-unit name="dk.myDS" transaction-type="JTA">

 <jta-data-source>java:app/jdbc/druid</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
....

如何强制 netBeans / maven 使用正确的 persistence.xml?

这个问题还有其他解决方案吗?我拒绝相信我是唯一有这个问题的人。但我还没有看到这个案子的任何解决方案。

编辑:

如果我在 main 下删除我的 persistence.xml,我的测试将按预期运行。

当我将 persistence.xml 复制回 main 时,出现以下错误:

Caused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : jdbc/druid__pm
at org.glassfish.jdbcruntime.service.JdbcDataSource.validateResource(JdbcDataSource.java:82)
at org.glassfish.jdbcruntime.service.JdbcDataSource.setResourceInfo(JdbcDataSource.java:63)

如果我在 main 中没有 persistence.xml,我将无法部署我的应用程序,因为我没有 persistenceContext 和 jdbc 连接之间的映射。

提前致谢

标签: mavennetbeansjndipayarapayara-micro

解决方案


推荐阅读