如何在 WebSphere Liberty 中设置间接 JNDI 查找?



我正在使用 WebSphere Liberty 17.0.0.2。

最终产品是一个包含使用 JPA 访问数据库的罐子的耳朵。

实体管理器使用定义了持久性单元名称的@PersistenceContext进行批注。在持久性中.xml在适当的持久性单元下,jta-数据源标记包含在 server.xml 中指定的数据源名称(直接查找(。通过此设置,一切正常。

现在需要出现我需要从有关数据源 JNDI 查找方法的直接查找切换到间接查找。据我了解,间接查找类似于操作系统环境变量。我使用名称来获取配置的值,因此我可以切换数据源,而无需触摸我的代码来重命名那里的 JDNI 名称。

从直接切换到间接,我需要在我的持久性中附加"java:comp/env".xml用于 jta 数据源。

如何将数据源名称与间接查找名称连接?我试图在服务器中指定它.xml使用 resource-ref 标签但没有运气。

这里的主要目标是在代码中使用间接查找,但能够在应用程序服务器配置中更改数据源,因此我不必在这样做时更改我的应用程序。

配置片段:

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

服务器.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 is java:comp/env/jdbc/mydb

溶液

事实证明,用于获取 EntityManager 的 bean 是一个 CDI bean。当它被修改为EJB豆时,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 名称。

最新更新