Могу ли я установить политику загрузки классов для WebSphere в файле ibm-web-bnd.xmi?
-
03-07-2019 - |
Вопрос
У меня есть приложение JEE, которое работает на WAS 6.Для параметра порядок загрузки классов должно быть установлено значение "Классы загружаются с помощью приложения class loader first", а для параметра политики загрузки классов WAR установлено значение "Один загрузчик классов для приложения".
Можно ли указать эти параметры внутри файла EAR, будь то в файле ibm-web-bnd.xmi или в каком-либо другом файле, чтобы администратору не нужно было изменять эти настройки вручную?
Поскольку приложение развертывается с помощью автоматического скрипта, а парень, отвечающий за развертывание, находится за пределами сайта, а также по некоторым другим политическим причинам, это бы очень помогло!
Решение
Благодаря ответу @Matthew Murdoch я смог найти решение. Вот, если это кому-то поможет.
Я создал файл deploy.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 для соответствия (мое называется AGS.war).
Я также изменил числа в атрибутах xmi:id
, чтобы они были уникальными, хотя я не уверен, что действительно важно, чтобы они были уникальными для разных приложений.
Затем я помещаю файл deploy.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): WebSphere Application Server Toolkit (AST) - это инструмент, который можно использовать для улучшения файла EAR с помощью этой информации (см. для Например, раздел «Настройка расширенного EAR» в этом документе ). р>
Изменить (1): Этот пост предполагает, что «классы, загружаемые с помощью загрузчика классов приложений первыми» (параметр PARENT_LAST) можно установить в файле deploy.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
Проверьте эту ссылку. Существуют разные способы установки политики загрузчика классов с использованием Jython в зависимости от версии вашего сервера. http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html р>
Подобно ответу от pkaeding, я обнаружил следующее, не относящееся к конкретному .war по имени, но полезное при применении к тому, что используется по умолчанию .war в файле .ear.(файлы .ear с одним файлом .war содержат только этот файл .war, поэтому указывать .war в записи не обязательно.) Этот подход может быть полезен в ситуациях, когда вам может потребоваться переименовать проект .war позже по какой-либо причине, и поэтому вам не нужно будет беспокоиться об обновлении deployment.xml
файл.Я нашел тот самый deployment.xml
файл, скрытый внутри каталога ссылок на ячейки .;не знаю, все ли в порядке, как показано, когда файл размещен на уровне каталога 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 не делается.Как упоминал pkaeding, вам не следует ожидать, что различные идентификационные номера будут одинаковыми для вас.