Как установить загрузчик класса Java PARENT_LAST

У меня есть веб-приложение spring mvc, в которое мне нужно изменить загрузчик классов. Мне нужно изменить загрузчик классов равным PARENT_LAST. Я использую WAS 6.1 и уже имею jacl script из предыдущего веб-приложения, которое я могу скопировать для выполнения задания.

В последнем приложении Apache ant использовался, и они сделали это, чтобы развернуть зависящее от запуска jacl script.

В моем новом веб-приложении я использую maven install для создания военного файла и развертываю этот файл войны на моем сервере приложений.

Как установить загрузчик классов как PARENT_LAST с помощью maven? Я знаю, как это сделать в консоли, но если бы был способ сделать это, используя скрипты, это было бы неплохо.

Также этот параметр будет размещен где-то в военном файле, чтобы при развертывании приложения была выбрана настройка. Этот вопрос возникает из-за моего понимания того, как работают скрипты jacl?

спасибо

Ответ 1

Если вы только развертываете сам WAR файл, вы не можете это контролировать, но если у вас есть файл WAR в EAR файле, вы можете использовать решение deployment.xml. Файл deployment.xml будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1347529484613">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1347544766353" startingWeight="99" warClassLoaderPolicy="SINGLE">
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1347543866613" startingWeight="1" uri="YourWebApp.war" classloaderMode="PARENT_LAST"/>
    <classloader xmi:id="Classloader_1347543866613" mode="PARENT_LAST"/>
  </deployedObject>
</appdeployment:Deployment>

Как только вы закончите, вам нужно добавить файл в правильное расположение вашей сборки проекта EAR, предположив, что вы используете src/main/application, который будет src/main/application/META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/deployment.xml, и создайте EAR с помощью Maven как обычно.

Во время развертывания сервера это будет вызвано WAS.

Ответ 2

AFAIK не существует возможности предусмотреть WAR для PARENT_LAST во время сборки. Во время развертывания указывается политика групповой загрузки, поэтому способ ее установки зависит от того, как развертывается приложение.

Изменение политики с помощью script является простым. Скрипты запускаются с помощью инструмента wsadmin. Ниже приведен фрагмент Jython ниже. Его можно легко преобразовать в Jacl.

dep = AdminConfig.getid('/Deployment:app_name/')
depObject = AdminConfig.showAttribute(dep, 'deployedObject')
classldr = AdminConfig.showAttribute(depObject, 'classloader')
AdminConfig.modify(classldr, [['mode', 'PARENT_LAST']])
AdminConfig.save()

Ответ 3

Websphere использует файл deployment.xml для управления настройками развертывания каждого модуля в ушном файле. Вы можете изменить параметр classloader в файле deployment.xml по следующему пути:

/MyTestEAR/META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/deployment.xml

Я не знаю, как вы можете настроить это в Maven.