我正在使用WebSphere Liberty 17.0.0.2。
最终产品是包含使用JPA访问数据库的jar的耳朵。
EntityManager使用@PersistenceContext注释,并定义了持久性单元名称。在适当的持久性单元下的persistence.xml中,jta-data-source标记包含server.xml中指定的数据源名称(直接查找)。使用此设置一切正常。
现在需要出现我需要从直接查找切换到关于数据源JNDI查找方法的间接查找。据我所知,间接查找就像OS环境变量。我使用名称来获取配置的值,因此我可以切换数据源而无需触及我的代码来重命名JDNI名称。
从直接切换到间接我需要在我的persistence.xml中为jta-data-source添加'java:comp / env'。
如何将数据源名称与间接查找名称连接?我尝试使用resource-ref标签在server.xml中指定它,但没有运气。
这里的主要目标是在代码中使用间接查找,但能够在应用程序服务器配置中更改数据源,因此在这种情况下我不必更改我的应用程序。
配置片段:
server.xml
<library id="oraclelib">
<jdbcDriver id="oracledriver" libraryRef="oraclelib">
<dataSource jndiName="jdbc/oradb" jdbcDriverRef="oracledriver" id="oradbds">
<resource-ref name="jdbc/oradb" binding-name="jdbc/mydb">
persistence.xml
<jta-data-source>java:comp/env/jdbc/mydb</jta-data-source>
运行此安装程序时,将抛出javax.naming.NameNotFoundException。
更新#1
交换名称,绑定名称后的server.xml
<?xml version="1.0" encoding="UTF-8"?>
<server description="app server">
<library id="OracleLib">
<fileset dir="/oracle" includes="ojdbc6.jar" />
</library>
<jdbcDriver id="OracleJDBCDriver" libraryRef="OracleLib" />
<dataSource jndiName="jdbc/oradb" jdbcDriverRef="OracleJDBCDriver" id="dbDataSource">
<properties.oracle URL="jdbc:oracle:thin:@//dbhost:port/SID" user="dbuser" password="dbpassword" />
</dataSource>
<application id="Myapp_ear" location="/path/myapp.ear" name="Myapp_ear" type="ear">
<application-bnd>
<resource-ref name="jdbc/mydb" binding-name="jdbc/oradb" />
</application-bnd>
</application>
</server>
jta-data-source是java:comp / env / jdbc / mydb
解
事实证明,用于获取EntityManager的bean是一个CDI bean。当它被修改为EJB bean时,ejb-jar.xml,ibm-ejb-jar-bnd.xml就可以了。
它应该是相反的方式:
不
<resource-ref name="jdbc/oradb" binding-name="jdbc/mydb">
但
<resource-ref name="jdbc/mydb" binding-name="jdbc/oradb">
name
- 是资源引用名称,binding-name
是服务器配置中的jndi名称。