Websphere Classloading - PullRequest
       18

Websphere Classloading

4 голосов
/ 16 декабря 2009

У нас есть приложение, развернутое на сервере приложений Websphere 7. Оно развернуто и функционирует в различных средах. Но это дало метод не найдено исключение в одном новом env. При копании глубже мы обнаружили, что определенный класс присутствовал в 2 банках, и класс из «неправильного» банку загружался в новую среду. я прошел подробный просмотр загрузчика классов, и последовательность загрузки jar-ов в нем была другой.

При дальнейших исследованиях, казалось, была случайная разница в порядке, в котором файлы jar загружались в каждую среду.

2 вопроса:

1) От какого фактора зависит политика загрузки классов WAS и какие-либо предложения по устранению проблемы?

2) В более общем случае, когда мы указываем наличие * .jar в пути к классам для любой Java-программы, каким образом любая JVM загружает файлы JAR? Например, в алфавитном порядке или в зависимости от времени или любого другого свойства файла?

Ответы [ 3 ]

8 голосов
/ 16 декабря 2009

При установке веб-приложений в WAS вы можете установить политику загрузки классов в настройках этого приложения (или глобально на уровне сервера / узла)

Если параметры политики (поиск) «родительский первый» / «родительский последний» и один загрузчик классов на приложение или на войну. По умолчанию используется значение «Сначала родитель / война». Если ваше веб-приложение поставляется со всеми банками, в которых оно нуждается, вам будет лучше с политикой, установленной на "parent last / application". Также, если вы редактируете свой web.xml, чтобы отразить изменения, обязательно установите «использовать бинарную конфигурацию», иначе он всегда будет использовать то, что хранилось во время установки.

1 голос
/ 16 декабря 2009

Java загружает классы в порядке, указанном в пути к классам. Поэтому, если ваш путь к классу - "c: \ jar1.jar; c: \ jar2.jar", а jar1.jar и jar2.jar содержат один и тот же класс, класс из jar1.jar всегда будет использоваться. Если бы порядок был обратным, то всегда использовался бы класс jar2.jar.

Википедия объясняет, как классные загрузчики работают очень хорошо http://en.wikipedia.org/wiki/Java_Classloader

Путь к классам можно настроить через консоль администратора WAS на сервере в разделе «Сервер»> «Определение процесса»> «Виртуальная машина Java»

Он также может быть настроен для каждого приложения.

0 голосов
/ 22 декабря 2015

Вы задаете очень большие вопросы. Для решения вашей проблемы есть 2 варианта:

  1. перейдите на PARENT LAST и добавьте любую нужную версию JAR в classpath
  2. оставайтесь с PARENT FIRST, но понизьте JAR, поставляемые с вашим приложением, чтобы соответствовать тому, что предоставляет WAS.
...