我有一个带有许多实体类和会话 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 连接之间的映射。
提前致谢