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

我正在研究 Maven EJB 模块。

我的 EJB 都使用这样的持久性上下文:

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

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

我正在使用 JUnit 测试并在 Payara Embedded 上运行所有测试。嵌入式 Payara 使用此格式进行 JNDI 查找(在我的 persistence.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 控制命名吗?


森栏
浏览 99回答 1
1回答

潇湘沐

使用 Maven 配置文件:持久性.xml...<jta-data-source>${datasource}</jta-data-source>...pom.xml<properties>&nbsp; &nbsp; <datasource>java:app/jdbc/druid</datasource></properties><profiles><profile>&nbsp; &nbsp;<id>release</id>&nbsp; &nbsp;<properties>&nbsp; &nbsp; &nbsp; <datasource>jdbc/druid</datasource>&nbsp; &nbsp;</properties></profile></profiles>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java