Сервер приложений Oracle развернул приложение, вызвавшее ошибку - NoClassDefFoundError

Мы развернули наше веб-приложение, развернутое на сервере приложений оракула 10, и сталкиваемся с этой ошибкой при запуске приложения.

 Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category

 Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@12badee for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category)

У нас есть log4j, встроенный в наше веб-приложение WEBINF/lib, и у нас также есть общая библиотека для log4j в нашей библиотеке сервера приложений. Поскольку эта общая библиотека используется многими приложениями, мы не можем ее удалить.

Я понимаю, что между этими двумя библиотеками log4j существует некоторый конфликт классов. Можем ли мы в любом случае исключить эту общую библиотеку и работать со встроенным log4j внутри веб-приложения? любая помощь в этом отношении высоко ценится.


person Sanath    schedule 31.07.2012    source источник


Ответы (2)


Используйте prefer-web-inf-классы в дескрипторе приложения weblogic.xml.
Согласно документации,

Установка этого элемента в значение True подрывает модель делегирования загрузчика классов, так что определения классов из веб-приложения загружаются в предпочтение определениям классов в загрузчиках классов более высокого уровня. Это позволяет веб-приложению использовать собственную версию стороннего класса, который также может быть частью WebLogic Server.

Это связанный вопрос, который также может помочь вам.

person Viccari    schedule 02.08.2012

@Viccari Я искал то же самое, но для старого сервера приложений с OC4J. Решением было бы добавить WEB-INF/orion-web.xml со следующим содержимым

<orion-web-app ...>
  ...
  <web-app-class-loader search-local-classes-first="true"
   include-war-manifest-class-path="true" />
  ...
</orion-web-app>

Поскольку я развертывал приложение через консоль Enterprise Manager, описанное выше решение не сработало. Вы должны настроить загрузку классов в настройках развертывания на нем, отключив параметр «Наследовать импорт общих библиотек родительского приложения».

Другой вариант — создать EAR с файлом META-INF/orion-application.xml со следующим содержимым и развернуть его.

<?xml version="1.0" encoding="UTF-8"?>
<orion-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd"
    deployment-version="10.1.3.4.0" default-data-source="jdbc/OracleDS"
    component-classification="external" schema-major-version="10"
    schema-minor-version="0">

    <imported-shared-libraries>
        <remove-inherited name="*"></remove-inherited>
    </imported-shared-libraries>

</orion-application>
person cirovladimir    schedule 24.10.2012