You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebLogic 14.1.1配置Postgres JDBC连接遇ClassNotFound问题求助

WebLogic 14.1.1 Postgres JDBC连接报ClassNotFound: weblogic.jdbc.wrapper.PoolConnection的解决方法

问题背景

在WebLogic 14.1.1中配置Postgres JDBC连接:

  • 已将Postgres JDBC jar包放入域的lib文件夹
  • 管理控制台配置数据源后测试连接成功
  • 实际使用时抛出java.lang.ClassNotFoundException: weblogic.jdbc.wrapper.PoolConnection异常
  • 尝试将包含该类的com.bea.core.datasource6.jar复制到域lib后,服务器无法启动
  • Oracle数据源配置无此问题

完整堆栈信息:

####<Feb 23, 2023, 10:40:21,445 AM Central European Standard Time> <Error> <HTTP Session> <MacBook-Pro.local> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <fb856892-8489-4b11-beea-d232c77f0c0c-00000024> <167>
java.lang.AssertionError: java.lang.ClassNotFoundException: weblogic.jdbc.wrapper.PoolConnection
        at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:225)
        at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:190)
        at weblogic.jdbc.wrapper.JDBCWrapperFactory$1.run(JDBCWrapperFactory.java:178)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:175)
        at weblogic.jdbc.pool.Driver.allocateConnection(Driver.java:229)
        at weblogic.jdbc.pool.Driver.connect(Driver.java:157)
        at weblogic.servlet.internal.session.JDBCSessionData.getConnection(JDBCSessionData.java:184)
        at weblogic.servlet.internal.session.JDBCSessionData.getSessionIds(JDBCSessionData.java:128)
        at weblogic.servlet.internal.session.JDBCSessionContext.getIdsInternal(JDBCSessionContext.java:246)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator.cleanupExpiredSessions(SessionContext.java:703)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator$1.run(SessionContext.java:680)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344)
        at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
        at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator.timerExpired(SessionContext.java:676)
        at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:301)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:677)
        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:651)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)
Caused By: java.lang.ClassNotFoundException: weblogic.jdbc.wrapper.PoolConnection
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:219)
        at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:190)
        at weblogic.jdbc.wrapper.JDBCWrapperFactory$1.run(JDBCWrapperFactory.java:178)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:175)
        at weblogic.jdbc.pool.Driver.allocateConnection(Driver.java:229)
        at weblogic.jdbc.pool.Driver.connect(Driver.java:157)
        at weblogic.servlet.internal.session.JDBCSessionData.getConnection(JDBCSessionData.java:184)
        at weblogic.servlet.internal.session.JDBCSessionData.getSessionIds(JDBCSessionData.java:128)
        at weblogic.servlet.internal.session.JDBCSessionContext.getIdsInternal(JDBCSessionContext.java:246)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator.cleanupExpiredSessions(SessionContext.java:703)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator$1.run(SessionContext.java:680)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344)
        at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
        at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
        at weblogic.servlet.internal.session.SessionContext$SessionInvalidator.timerExpired(SessionContext.java:676)
        at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:301)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:677)
        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:651)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)

原因分析

  1. WebClassLoader类加载隔离机制:域lib文件夹使用Application类加载器,无法访问WebLogic核心模块(modules目录)中的类,而weblogic.jdbc.wrapper.PoolConnection属于核心模块com.bea.core.datasource6.jar,因此在应用类加载器上下文下找不到该类。
  2. Oracle数据源无此问题,是因为WebLogic对Oracle JDBC有原生适配,默认使用Global类加载器(系统核心类加载器),可以正常访问核心模块类。
  3. 将com.bea.core.datasource6.jar复制到域lib会导致类重复加载,引发类冲突,直接导致服务器启动失败。

解决方案

  1. 移除冲突jar包:立即删除域lib文件夹中的com.bea.core.datasource6.jar,恢复服务器正常启动能力。
  2. 修改数据源类加载模式:
    • 登录WebLogic管理控制台,定位到Postgres数据源的配置页面
    • 切换至「Configuration -> Connection Pool」标签页
    • 找到「Classloader Mode」选项,将其从默认的Application修改为Global
    • 保存配置并激活更改
  3. 重启服务器:重启WebLogic AdminServer及受影响的Managed Server,让配置生效
  4. 验证功能:重新测试数据源的实际使用场景,确认ClassNotFoundException异常不再出现

内容的提问来源于stack exchange,提问作者Sietse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:57:29