我收到`DSRA9122E:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@d3t7e556 不包装任何类型为 oracle.jdbc.OracleConnection 的对象

问题描述 投票:0回答:3

我正在使用 Websphere 18 Liberty 版本。当我尝试将 java.sql.connection 解包到 oracle.jdbc.OracleConnection 时,我得到了

`DSRA9122E:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@d3t7e556 确实 不包装任何 oracle.jdbc.OracleConnection 类型的对象

在 sever.xml 文件中,我使用 ojdbc7.jar 作为数据源,也在应用程序中我从同一位置添加了相同的 jar。我仍然面临这个问题。我引用了所有链接 WSJDBCConnection 不会像这样包装 oracle.jdbc.OracleConnection 类型的对象。我仍然面临同样的问题。

java oracle jdbc websphere websphere-liberty
3个回答
4
投票

为了使

Connection.unwrap
正常工作,Liberty 数据源和应用程序必须从同一类加载器加载供应商实现类 (oracle.jdbc.OracleConnection)。

这是一个简单的示例,说明如何配置数据源和应用程序以使用相同的类加载器从包含 Oracle JDBC 驱动程序的单个库进行加载,

<library id="OracleLib">
    <fileset dir="${server.config.dir}/oracle"/>
</library>

<application location="myApp.war" >
    <classloader commonLibraryRef="OracleLib"/>
</application>

<dataSource jndiName="jdbc/oracleDataSource">
    <jdbcDriver libraryRef="OracleLib"/>
    <properties.oracle .../>
</dataSource>

0
投票

您不需要解包到 OracleConnection。您可以使用 Connection 对象建立与数据库的连接。

// Get a context for the JNDI look up
DataSource ds = getDataSource();
try (Connection connection = ds.getConnection()) {
  {
   executeBusinessLogicOnDatabase(connection));
   ......
  }
  connection.close();
  }

0
投票

我发布它是因为我无法通过上述参考找到解决方案。即使在自由文档中也提到,对于耳朵,战争你应该添加

<application location="myApp.war" >
    <classloader commonLibraryRef="OracleLib"/>
</application>

在我的 server.xml 中,这个标签是不同的

<EnterpriseApplication id="myApp" location="myApp.war" name="myApp" >
    <classloader commonLibraryRef="OracleLib"/>
</EnterpriseApplication >

发布仅供参考,如果有人像我一样错过了上述几点。

© www.soinside.com 2019 - 2024. All rights reserved.