Могу ли я установить политику загрузчика классов для WebSphere в файле ibm-web-bnd.xmi?
У меня есть приложение JEE, которое работает на WAS 6. Для него необходимо, чтобы параметр порядка загрузчика класса был "Класс загружен с загрузчиком класса приложения первым", а параметр политики загрузчика класса WAR, установленный в "Single class loader for application",.
Можно ли указать эти параметры в файле EAR, будь то в файле ibm-web-bnd.xmi или в каком-либо другом файле, поэтому администратору не нужно изменять эти настройки вручную?
Поскольку приложение развертывается с помощью автоматизированного script, и парень, который отвечает за развертывание, находится вне сайта, а также по некоторым другим политическим причинам, это очень поможет!
Ответы
Ответ 1
Благодаря ответу @Matthew Murdoch, я смог придумать решение. Вот оно, если это помогает кому-то другому.
Я создал файл 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_1241112964096">
<deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1241112964096" startingWeight="1" warClassLoaderPolicy="SINGLE">
<classloader xmi:id="Classloader_1241112964096" mode="PARENT_LAST"/>
<modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1241112964096" startingWeight="10000" uri="AGS.war">
<classloader xmi:id="Classloader_1241112964097"/>
</modules>
</deployedObject>
</appdeployment:Deployment>
Обязательно измените имя своего WAR файла (ов), чтобы он соответствовал (my называется AGS.war).
Я также изменил числа в атрибутах xmi:id
, чтобы убедиться, что они уникальны, хотя я не уверен, что действительно важно, чтобы они были уникальными для всех приложений.
Затем я помещаю файл deployment.xml в корень моего EAR файла через ANT:
<ear destfile="${artifactsDir}/${earName}.ear" appxml="${projectName}_EAR/application.xml">
<fileset dir="${artifactsDir}" includes="${warName}.war"/>
<fileset dir="${projectName}_EAR/" includes="deployment.xml"/>
</ear>
Ответ 2
Изменить (2): WebSphere Application Server Toolkit (AST) - это инструмент, который вы можете использовать для улучшения EAR файл с этой информацией (см., например, раздел "Настроить расширенный EAR" в этот документ).
Изменить (1): Этот пост предполагает, что "классы, загруженные сначала загрузчиком класса приложения" ( PARENT_LAST) можно установить в файле deployment.xml в EAR.
Если вы контролируете сценарии автоматического развертывания, это можно сделать. Ниже приведен некоторый код jython для wsadmin для установки порядка загрузчика класса веб-модуля на "классы, загруженные сначала загрузчиком класса приложения" (интересно, что параметр называется PARENT_LAST, что и было отмечено в предыдущих версиях консоли администратора...).
Пример wsadmin (jython):
def getWebModule(config, applicationName):
webModules = config.list('WebModuleDeployment').
split(system.getProperty('line.separator'))
for webModule in webModules:
if (webModule.find(applicationName) != -1):
return webModule
return None
applicationName = "<Your application name here>"
webModule = getWebModule(AdminConfig, applicationName)
if (webModule != None):
AdminConfig.modify(webModule, "[[classloaderMode PARENT_LAST]]")
AdminConfig.save()
else:
print "Error: Cannot find web module for application: " + applicationName
Ответ 3
Посмотрите эту ссылку. Существуют разные способы установки политики загрузчика классов с использованием Jython на основе вашей версии сервера -
http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html
Ответ 4
Как и в ответе от pkaeding, я обнаружил следующее, не специфичное для конкретного .war по имени, но полезное при применении к тому, что является значением по умолчанию .war в файле .ear. (файлы .ear с одним файлом .war в них имеют только этот .war, поэтому в записи не требуется указывать .war.) Этот подход может быть полезен для ситуаций, когда вам может потребоваться повторное имя .war проект по какой-то причине, и поэтому вам не нужно беспокоиться об обновлении файла deployment.xml
. Я нашел файл deployment.xml
, зарытый внутри цепочки ссылок на ячейки; dunno, если это прекрасно, как показано, когда файл находится на уровне каталога META-INF
и не глубже.
В моем конкретном случае я нашел deployment.xml
в моем проекте .ear:
<project_root > \META-INF\ibmconfig\клеток\defaultCell\приложения\defaultApp\развертывание\defaultApp\
Содержимое файла выглядит так:
<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_1262775196208">
<deployedObject xmi:type="appdeployment:ApplicationDeployment"
xmi:id="ApplicationDeployment_1262775196208" startingWeight="10">
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" />
</deployedObject>
</appdeployment:Deployment>
Строка:
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" />
изначально прочитано:
<classloader xmi:id="Classloader_1262775196208" mode="PARENT_FIRST" />
Обратите внимание, что никакой ссылки на какой-либо .war не делается. Как упоминалось выше, вы не должны ожидать, что различные идентификационные номера будут одинаковыми для вас.