java - Weblogic类加载

标签 java server weblogic classloader

我们在类加载方面遇到了重大问题。

我们正在尝试进行简单的 JNDI 查找,但我们看到以下异常:

Caused By: java.lang.ClassNotFoundException: weblogic.rmi.internal.StubInfoIntf
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1029)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:990)
        at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:611)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:543)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:496)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:473)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at weblogic.utils.classloaders.GenericClassLoader.defineClassInternal(GenericClassLoader.java:1113)
        at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:1046)
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1038)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:990)
        at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:611)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:543)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:496)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:473)
        at weblogic.rmi.internal.StubGenerator.getStubClass(StubGenerator.java:821)
        at weblogic.rmi.internal.StubGenerator.generateStub(StubGenerator.java:848)
        at weblogic.rmi.internal.StubGenerator.generateStub(StubGenerator.java:843)
        at weblogic.rmi.extensions.StubFactory.getStub(StubFactory.java:73)
        at weblogic.rmi.internal.StubInfo.resolveObject(StubInfo.java:410)
        at weblogic.rmi.internal.StubInfo.readResolve(StubInfo.java:332)
        at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1148)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2036)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
        at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.readObject(RemoteBusinessIntfProxy.java:231)
        at sun.reflect.GeneratedMethodAccessor2058.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2136)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2027)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2245)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2125)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2027)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
        at weblogic.rmi.extensions.server.CBVInputStream.readObject(CBVInputStream.java:64)
        at weblogic.jndi.internal.JNDIHelper.copyObject(JNDIHelper.java:42)
        at weblogic.jndi.WLSJNDIEnvironmentImpl.copyObjectViaSerialization(WLSJNDIEnvironmentImpl.java:57)
        at weblogic.jndi.internal.JNDIEnvironment$ProxyCopier.copyObject(JNDIEnvironment.java:209)
        at weblogic.jndi.internal.JNDIEnvironment.copyObject(JNDIEnvironment.java:51)
        at weblogic.jndi.internal.WLEventContextImpl.copyObject(WLEventContextImpl.java:433)
        at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:308)
        at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:435)
        at javax.naming.InitialContext.lookup(InitialContext.java:417)

现在,这个类:weblogic.rmi.internal.StubInfoIntfweblogic.rmi.internal.StubGenerator 所在的同一个 jar 中。 (一个明显找到了,另一个没有)

我已将以下 jar 添加到 %DOMAIN%/lib:wlthint3client.jar

这包含缺少的类,但没有帮助。

注意1:

需要指出的是

weblogic.rmi.internal.StubGenerator.getStubClass(StubGenerator.java:821)

确实使用不同的类加载器启动查找,这可能解释了为什么找不到该类,但我还需要将 jar 放在哪里,或者我应该如何配置 weblogic 类加载才能使其工作?

注2

我已经在服务器上查找了所有包含 weblogic.rmi.internal.StubGenerator 的 jar。我猜想可能有一个奇怪版本的 jar 在 wlthint3client.jar 之前加载并且位于中间件或某处并导致问题。我找到了 4 个 jar ,所有 jar 都包含这两个类。

注3

沿着这条线...堆栈跟踪的特定部分将我引向以下代码片段:

 private static Class getStubClass(StubInfo info, ClassLoader cl) {
        Class c;
        try {
            c = cl.loadClass(info.getStubName());
        } catch (ClassNotFoundException var4) {
            c = hotCodeGenClass(info, cl);
        }

        return c;
    }

这不应该表明应该捕获 ClassNotFoundException 吗?我问的原因是因为我看到几个错误在互联网上搜索原因,我看到在其中许多中调用了 hotCodeGenClass。但从来没有在我们自己的堆栈跟踪中。这让我觉得我们正在以某种方式使用一些不同的 jar。

网络逻辑版本:12.2.1.3

最佳答案

  1. 抛出的异常是 NoClassDefFoundError 而不是 ClassNotFoundException 这就是为什么没有被该代码块捕获的原因
  2. Weblogic 中的 JNDI 查找怎么会抛出 NoClassDefFoundError,您的 Weblogic 服务器中有些东西不好
  3. 我建议你不要尝试修复 Weblogic 中的类加载问题,而是安装一个干净的新版本再试一次

关于java - Weblogic类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50622873/

相关文章:

tomcat - 如何避免 apache tomcat 服务器中的主机头注入(inject)/中毒

python - 如何编写 Python 脚本从 FTP 服务器下载文件

python - 在单个域上使用两个不同的框架 (Oracle Weblogic/Django)

java - 使用代理网络中的临时队列的请求/回复模式的 ActiveMQ/Camel 故障转移 - 无法发布到已删除的临时队列

如果运行一天,Java Web 应用程序会变慢

java - 在java中我如何转义*字符

Javascript 无法在 GoDaddy 托管上运行

java - Android:包含/重新打包引用 javax 核心类的依赖项时出错

java - Weblogic 12.1.3 压缩 gzip 的配置

jsf-2 - 从 Facelets 错误页面引用 CDI 托管 bean