在 PROD 和 TEST 中数据库的 JNDI 名称之间切换



我正在开发一个Maven EJB模块。

我的 EJB 都使用如下所示的持久性上下文:

@PersistenceContext(unitName = "dk.mycontext")
private EntityManager em;

它工作得很好。问题是当我想从测试更改为实际部署在我的应用程序服务器上时。

我正在使用JUnit在Payara Embedded上测试和运行所有测试。Payara embedded 使用以下格式进行 JNDI 查找(在我的持久性.xml文件中(:

<jta-data-source>java:app/jdbc/druid</jta-data-source>

测试时找到数据源

当我将编译后的模块部署到我成熟的 Payara 服务器时,它抱怨找不到数据源:

javax.naming.NameNotFoundException: No object bound to name java:app/jdbc/druid

因为它期望 JNDI 是这样的:

 jdbc/druid

这是我直接在服务器上定义 JNDI 名称的格式。问题是 - 据我所知 - payara 服务器不会接受具有

java:app/jdbc/druid

至少管理界面不会验证它。

我如何控制这种疯狂的行为?我不能成为第一个遇到这个问题的人,但我无法找到解决这个问题的可行解决方案。

例如,我可以使用 Maven 控制命名吗?

使用 maven 配置文件:

坚持不懈.xml

...
<jta-data-source>${datasource}</jta-data-source>
...

绒球.xml

<properties>
    <datasource>java:app/jdbc/druid</datasource>
</properties>
<profiles>
<profile>
   <id>release</id>
   <properties>
      <datasource>jdbc/druid</datasource>
   </properties>
</profile>
</profiles>

最新更新