java - 在 PROD 和 TEST 中的数据库的 JNDI 名称之间切换
问题描述
我正在研究一个 Maven EJB 模块。
我的 EJB 都使用这样的持久化上下文:
@PersistenceContext(unitName = "dk.mycontext")
private EntityManager em;
它真的很好用。问题是当我想从测试更改为在我的应用服务器上实际部署时。
我正在使用 JUnit 在 Payara Embedded 上进行测试和运行所有测试。Payara Embedded 使用这种格式进行 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 控制命名吗?
解决方案
使用 Maven 配置文件:
持久性.xml
...
<jta-data-source>${datasource}</jta-data-source>
...
pom.xml
<properties>
<datasource>java:app/jdbc/druid</datasource>
</properties>
<profiles>
<profile>
<id>release</id>
<properties>
<datasource>jdbc/druid</datasource>
</properties>
</profile>
</profiles>
推荐阅读
- c++ - Xcode 生成的存档文件缺少 dylibs
- asp.net-mvc - 如何为存储在数据库中的视图(CSHTML)生成并返回视图结果?
- c# - 将 XML 转换为格式化的纯文本问题
- anylogic - Anylogic:如何将人口与来源联系起来
- matlab - 在 MATLAB 中的现有绘图上叠加/绘图
- sql - 需要大量时间的生产 Hadoop 查询
- r - dplyr:同时按名称和值选择
- python-3.x - 如何使用 HTTP 请求查看原始内容?
- asp.net - 找不到类型或命名空间名称“WindowsSecureMimeContext”
- opengl - 有没有办法在 OpenGL 中检索所有生成的关于特定标识符的名称?