簡體   English   中英

Weblogic類加載

[英]Weblogic class loading

我們在類加載方面遇到了主要問題。

我們正在嘗試做一個簡單的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.StubInfoIntf是在同一個jar放在weblogic.rmi.internal.StubGenerator所在。 (一個明顯被發現,另一個沒有被發現)

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

這包含缺少的類,但無濟於事。

注意1:

重要的是要指出,

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

是否確實使用其他類加載器啟動了查找,這也許可以解釋為什么找不到該類,但是還需要把jar放在哪里,或者應該如何配置weblogic類加載才能使其工作?

筆記2

我已經查找了包含weblogic.rmi.internal.StubGenerator的服務器上的所有jar。 我猜想可能是在wlthint3client.jar之前加載了一個奇怪的jar版本,並且它在中間件中或某個地方,從而導致了問題。 我找到了4個罐子,所有的罐子都包含兩個類。

注意3

沿着這條線... stacktrace的特定部分將我引到以下代碼片段:

 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。 但是永遠不要在我們自己的堆棧跟蹤中。 這讓我覺得我們以某種方式使用了一些不同的罐子。

Weblogic版本:12.2.1.3

  1. 拋出的異常是NoClassDefFoundError,而不是ClassNotFoundException ,這就是為什么未捕獲在該代碼塊中的原因
  2. Weblogic中的JNDI查找如何引發NoClassDefFoundError,您的Weblogic服務器中有些問題
  3. 我建議您不要嘗試解決Weblogic中的類加載問題,而要安裝一個全新的版本並重試

我最終能夠找到問題:

基本上與:

https://issues.liferay.com/browse/LPS-67662?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

只需用rmi相應地替換jndi。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM