Weblogic类加载异常:JNDI查找遇ClassNotFoundException求助
这是个典型的WebLogic类加载器隔离导致的问题,我碰到过好几次类似场景——明明缺失的类和能正常加载的类在同一个Jar里,却偏偏找不到,核心原因就是StubGenerator使用的类加载器和应用类加载器不在同一个上下文。
先拆解下为什么%DOMAIN%/lib没用:这个目录下的Jar包是被应用级类加载器加载的,而weblogic.rmi.internal.StubGenerator属于WebLogic核心组件,它运行在WebLogic Server核心类加载器上下文里,这个类加载器并不会去加载应用类加载器中的类,所以哪怕你把wlthint3client.jar丢到domain/lib,核心类加载器还是看不到StubInfoIntf。
下面是几个经过验证的解决方案,按优先级排序:
1. 将Jar包放到WebLogic核心类加载器扫描目录
直接把wlthint3client.jar复制到$WL_HOME/server/lib目录($WL_HOME是你的WebLogic安装根目录),然后重启服务器。这个目录是WebLogic核心类加载器默认会扫描的位置,核心组件的类加载器能直接访问到这里的Jar,这样StubGenerator就能顺利找到StubInfoIntf了。
2. 通过PRE_CLASSPATH让系统类加载器加载Jar
如果不想修改WebLogic安装目录的文件,可以在域的启动脚本里配置PRE_CLASSPATH,让这个Jar被系统类加载器加载(WebLogic核心类加载器会委托给系统类加载器):
- 对于Windows环境,编辑
%DOMAIN_HOME%\bin\setDomainEnv.cmd,添加:set PRE_CLASSPATH=%DOMAIN_HOME%\lib\wlthint3client.jar;%PRE_CLASSPATH% - 对于Linux/Unix环境,编辑
$DOMAIN_HOME/bin/setDomainEnv.sh,添加:PRE_CLASSPATH=$DOMAIN_HOME/lib/wlthint3client.jar:$PRE_CLASSPATH export PRE_CLASSPATH
添加后重启服务器即可生效。
3. 检查应用类加载器策略
如果你的应用配置了Parent Last类加载策略(即优先加载应用自身的Jar),可能会打乱WebLogic核心类加载器的委托逻辑。建议暂时改回默认的Parent First策略,测试问题是否解决。
4. 验证Jar包完整性
最后别忘了确认wlthint3client.jar里确实包含目标类,避免是Jar损坏或版本不匹配的问题:
jar tf wlthint3client.jar | grep weblogic/rmi/internal/StubInfoIntf.class
如果输出为空,说明你用的Jar包版本不对,需要下载包含该类的正确版本。
内容的提问来源于stack exchange,提问作者Peter Jaloveczki

