升级我的 Web 应用程序以使用 OJDBC8.jar。但 Websphere 8.5 指的是旧版本 ojdbc6 和 returns nosuchmethoderror

Upgraded my webapplication to use OJDBC8.jar. but Websphere8.5 refers to old version ojdbc6 and returns nosuchmethoderror

错误 500:java.lang.NoSuchMethodError:oracle/jdbc/OracleConnection.createOracleArray(Ljava/lang/String;Ljava/lang/Object;)Ljava/sql/Array; (从文件:/sysap/oracle/instantclient_11_2/ojdbc6.jar 由 com.ibm.ws.bootstrap.ExtClassLoader@96620801 加载)从 class com.model.dao.TypeKeysDAO 调用(从文件:/opt/WebSphere/8_5/AppServerBase1/profiles/AppServerBase1/installedApps/System_Cell/MyEnterprise.ear/MyEnterpriseWeb 加载) war/WEB-INF/classes/ 来自 com.ibm.ws.classloader.CompoundClassLoader@3edbaa21

ojdbc6.jar 肯定在应用程序的 class 路径中。要定位它的加载位置,您可以登录到 WebSphere 应用程序服务器控制台 (https://localhost:<admin-port>/ibm/console) 并查看应用程序的 class 加载详细信息。 这将显示为您的应用程序加载的 classes/jars 列表。从列表中找到 ojdbc6.jar 并查看它的路径。

您要么将 ojdbc6.jar 添加为共享库,要么与您的应用程序(WEB-INF/lib 目录)捆绑在一起,或者在服务器本身的 class 加载程序中提及它.

JDBC jar 的旧副本似乎与您的配置中定义的 JDBC 提供程序相关联。错误消息表明 class 是由 WebSphere 的 ExtClassLoader 加载的,它是包含 JDBC 驱动程序 class 路径的加载程序。您需要删除旧的 JDBC 提供程序,更新其 class 路径,或使其成为“隔离”资源提供程序(这会为其提供一个单独的 class 必须显式关联的加载程序与应用程序),以便将其从应用程序的视图中移除。

如果出于某些技术原因您需要 ojdbc6.jar 在资源提供程序 class 路径中,但需要仅在您的应用程序中引用 ojdbc8.jar(而不是通过服务器配置的数据源) ,那么您需要执行一些 class 加载程序配置向导才能使其正常工作。最可靠的解决方案是创建一个包含新 jar 的共享库,将其设置为使用隔离的 class 加载程序,并将其与您的 EAR 或 WAR.

相关联

file:/sysap/oracle/instantclient_11_2/ojdbc6.jar 这是 EAR 引用的共享库。我已在此位置添加 ojdbc8.jar,现在问题已解决。