2014-01-29 3 views
10

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

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

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

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

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

благодаря

+0

Не совсем уверен, что удаление тэга 'java' может быть оправдано? – Torxed

ответ

16

Если вы только развернув сам 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.

+0

спасибо, что это действительно хороший ответ. Теперь я понимаю, хочу ли я изменить настройку, необходимую для создания уха вместо войны. Это печально. Но я предполагаю, что другая альтернатива всегда устанавливается вручную в консоли веб-администратора после развертывания. – Richie

+1

Исправить. Многие (но не все) параметры развертывания, где WAS имеет собственные дескрипторы развертывания, находятся в файле EAR. Мы обнаружили, что развертывание EAR-файла, а не только файла WAR лучше для нас, главным образом, из-за простоты развертывания. – DanielBarbarian

1

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

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

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

2

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

Изменение политики с использованием сценария является простым. Скрипты запускаются с использованием инструмента 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()