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

时间:2018-08-24 07:56:54

标签: java websphere jndi websphere-liberty open-liberty

我正在使用WebSphere Liberty 17.0.0.2。

最终产品是一个装有Jar的耳朵,该瓶子正在使用JPA访问数据库。

使用@PersistenceContext注释EntityManager,并定义了持久性单元名称。在persistence.xml中适当的persistence-unit下,jta-data-source标记包含在server.xml中指定的数据源名称(直接查找)。通过此设置,一切正常。

现在需要针对数据源JNDI查找方法从直接查找转换为间接查找。据我了解,间接查找类似于OS环境变量。我使用名称来获取配置的值,因此我可以切换数据源而无需触碰我的代码即可在那里重命名JDNI名称。

从直接切换到间接我需要在我的persistence.xml中为jta-data-source添加'java:comp / env'。

如何连接数据源名称和间接查找名称?我尝试使用resource-ref标记在server.xml中指定它,但是没有运气。

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

配置摘要:

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数据源是java:comp / env / jdbc / mydb

解决方案

原来,用于获取EntityManager的bean是CDI bean。由于将其修改为EJB bean,所以ejb-jar.xml,ibm-ejb-jar-bnd.xml起到了作用。

1 个答案:

答案 0 :(得分:1)

应该相反:

不是

 <resource-ref name="jdbc/oradb" binding-name="jdbc/mydb">

但是

<resource-ref name="jdbc/mydb" binding-name="jdbc/oradb">

name-是资源引用名称,binding-name是服务器配置中的jndi名称。