проблема с несколькими загрузчиками классов на weblogic

1
exception loader constraint violation: when resolving method "org.apache.hadoop.io.IOUtils.cleanup(Lorg/apache/commons/logging/Log;[Ljava/io/Closeable;)V" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, org/apache/hadoop/hdfs/FileInputStreamCache, and the class loader (instance of weblogic/utils/classloaders/GenericClassLoader) for resolved class, org/apache/hadoop/io/IOUtils, have different Class objects for the type org/apache/commons/logging/Log used in the signature

Я получаю это при использовании приложения, а не при развертывании уха. Если я понимаю это, я имею два загрузчика классов, у которых есть два разных объекта ведения журнала? как я могу отнести их к одному?
ИЗМЕНИТЬ 1
После дальнейшего расследования, я думаю, что эта ошибка связана с тем, что мы используем общую библиотеку jars, и есть другая версия достояний, что делает их конфликтными. Есть ли способ указать weblogic для использования конкретной библиотеки, а не для упаковки? Я хотел бы изучить это далее

  • 0
    Что вы используете для управления зависимостями для вашего приложения?
  • 0
    Я использую Maven
Показать ещё 1 комментарий
Теги:
weblogic-10.x

2 ответа

1
Лучший ответ

Вам необходимо проверить каталог WEB-INF/lib ваших файлов WAR, чтобы убедиться, что они не содержат банки, которые также существуют в каталоге EAR/lib.

Веб-приложения всегда будут использовать классы WEB-INF/lib, прежде чем искать их в файле EAR. Однако классы, загруженные из EAR, будут видеть только другие классы в EAR. Если у вас одинаковый (или похожий) файл jar в обоих местах, это приведет к проблемам с загрузкой классов, которые вы описываете.

  • 0
    Спасибо за ответ, Стив! Я не понимаю, почему это создает такие проблемы, если загруженные из EAR классы видят в EAR только другие классы. Если EAR придерживается EAR, а WAR - WAR, почему у меня возникает эта проблема?
  • 0
    Предположительно, ваш WAR-файл будет загружать некоторые классы из EAR, в противном случае зачем его вообще там. Ваше веб-приложение неизбежно будет содержать ссылки на классы, загруженные из EAR, некоторые из которых могут ссылаться на EAR-версию класса. Смешивание этого с WAR-версией класса приведет к всевозможным захватывающим проблемам с загрузкой класса
Показать ещё 3 комментария
1

Вам нужно будет обновить свой weblogic-application.xml, чтобы использовать пакет prefer-application-package, чтобы сообщить веб-логике использовать банку из web-inf/lib вместо jar из веб-логики. обратитесь к ссылке Weblogic 10.3.5 Переопределение версии Spring

<weblogic-application>
    <prefer-application-packages>
       <package-name>org.apache.*</package-name>
       <package-name>org.springframework.*</package-name>
    </prefer-application-packages>
</weblogic-application>
  • 0
    Я использую это. Проект использует это с самого начала, но я думаю, что это как-то игнорируется. Ошибка из-за двух реализаций журнала, я тоже проверю

Ещё вопросы

Сообщество Overcoder
Наверх
Меню