ClassNotFoundExceptoin выбрасывается из-за того, что Classloader загружает неправильную библиотеку

Я получаю исключение ClassNotFoundException для следующего класса:

org.apache.commons.pool.impl.CursorableLinkedList$Cursor.

Я просмотрел веб-приложение, упакованное в EAR, и заметил, что есть две библиотеки, в которых существует указанный выше класс (CursorableLinkedList).

Файлы JAR:

1.) com.ibm.ws.jpa.jar
2.) commons-pool-1.4.jar

Файлы JAR для конкретного проекта (например, commons-pool-1.4.jar) упакованы в файле WAR в каталоге lib.

Окружающая обстановка

EAR развертывается на Websphere Applicatoin Server 8. Я использую IDE Rational Application Developer 8.

Я установил развертывание приложения следующим образом:

Приложение:

myApp.EAR

  • Режим загрузчика классов: Parent_First
  • Политика загрузчика классов WAR: МОДУЛЬ
  • Стартовый вес: 10
  • Автозапуск: Да

myApp.WAR

  • Режим загрузчика классов: PARENT_FIRST
  • Стартовый вес: 10000

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


person Ruepen    schedule 12.09.2012    source источник


Ответы (1)


Здесь происходит то, что из-за того, что вы используете PARENT_FIRST, когда WebSphere ищет класс, содержащийся как в com.ibm.ws.jpa.jar, так и в commons-pool-1.4.jar, он загружает его из com. ibm.ws.jpa.jar, я думаю, есть несоответствия версий и тому подобное.

Я предполагаю, что некоторые классы загружаются из com.ibm.ws.jpa.jar, а некоторые (которых нет в om.ibm.ws.jpa.jar) загружаются из commons-pool-1.4.jar, тогда вы начинаете иметь проблемы.

Если вы хотите, чтобы ваша банка была загружена первой, вам нужно указать свой модуль WAR для использования PARENT_LAST, таким образом вы можете убедиться, что классы будут загружены из вашей банки, а не из банки WebSphere.

person Aviram Segal    schedule 04.10.2012