Загрузка классов Weblogic - PullRequest
0 голосов
/ 31 мая 2018

У нас возникла серьезная проблема с загрузкой классов.

Мы пытаемся выполнить простой поиск 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 находится в той же банке, где находится weblogic.rmi.internal.StubGenerator.(одно очевидно найдено, другое нет)

Я добавил следующий jar в% DOMAIN% / lib: wlthint3client.jar

Это содержит отсутствующий класс, но это не помогает.

ПРИМЕЧАНИЕ1:

Важно отметить, что

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

Действительно инициирует поиск с помощью другого загрузчика классов, который можетобъясните, почему класс не найден, но куда мне также нужно поместить jar или как настроить загрузку класса weblogic, чтобы он работал?

NOTE2

Я посмотрел все банки на сервере, которые содержат weblogic.rmi.internal.StubGenerator.Я догадался, что, возможно, существует странная версия jar, которая загружается до wlthint3client.jar и находится в промежуточном программном обеспечении или где-то еще, и вызывает проблему.Я нашел 4 банки, каждый из которых содержал оба класса.

NOTE3

Вдоль этой строки ... Определенная часть трассировки стека привела меня к следующему фрагменту кода:

 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-файл.

Weblogic версия: 12.2.1.3

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Мне удалось найти проблему:

По сути, так же, как:

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

Просто замените jndi на rmi соответственно.

0 голосов
/ 31 мая 2018
  1. Выдается исключение NoClassDefFoundError , а не ClassNotFoundException , поэтому оно не попадает в этот блок кода
  2. Как может выполняться поиск JNDI вWeblogic выдает NoClassDefFoundError, что-то не так на вашем сервере Weblogic
  3. Я предлагаю вам не пытаться исправить проблемы с загрузкой классов в Weblogic, а установить новую чистую версию и повторить попытку
...