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

I get the `DSRA9122E: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@d3t7e556 does not wrap any objects of type oracle.jdbc.OracleConnection

我正在使用 Websphere 18 Liberty 版本。当我试图将 java.sql.connection 展开为 oracle.jdbc.OracleConnection 时,我得到了

`DSRA9122E: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@d3t7e556 does not wrap any objects of type oracle.jdbc.OracleConnection

在 sever.xml 文件中,我使用 ojdbc7.jar 作为数据源,同样在应用程序中,我从相同位置添加了相同的 jar。仍然面临这个问题。我提到了所有链接 像这样。仍然面临同样的问题。

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

这是一个简单示例,说明如何配置数据源和您的应用程序以使用相同的 class 加载程序从包含 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>

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

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