Можно ли установить политику загрузчика классов для WebSphere в файле ibm-web-bnd.xmi?

У меня есть приложение JEE, которое работает на WAS 6. Для него необходимо, чтобы для параметра порядка загрузчика классов было установлено значение «Сначала классы загружаются с помощью загрузчика классов приложений», а для параметра политики загрузчика классов WAR установлено значение «Одиночный загрузчик классов для приложения».

Можно ли указать эти параметры в файле EAR, будь то файл ibm-web-bnd.xmi или какой-либо другой файл, чтобы администратору не нужно было изменять эти параметры вручную?

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


person pkaeding    schedule 01.05.2009    source источник


Ответы (4)


Благодаря ответу @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, чтобы оно совпадало (мой файл называется 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>
person pkaeding    schedule 04.05.2009

Изменить (2): WebSphere Application Server Toolkit (AST) — это инструмент, который вы можете использовать для добавления этой информации в файл EAR (см., например, ' Настройте раздел Enhanced EAR в этом документе).

Редактировать (1): Это сообщение предполагает, что «Классы, загруженные с помощью загрузчика классов приложений в первую очередь» (настройка PARENT_LAST) могут быть установлены в файле deployment.xml в EAR.

Если у вас есть контроль над сценариями автоматического развертывания, это можно сделать. Ниже приведен код wsadmin jython для установки порядка загрузчика классов веб-модуля на «Сначала загружаются классы с помощью загрузчика классов приложений» (интересно, что этот параметр называется 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
person Matthew Murdoch    schedule 01.05.2009
comment
К сожалению, у меня нет контроля над скриптами. По политическим причинам мне нужно позаботиться обо всем этом, прежде чем упаковывать EAR (хотя можно утверждать, что это работа администратора, ответственного за развертывание....) - person pkaeding; 02.05.2009
comment
Добавлена ​​ссылка на сообщение форума, описывающее, как установить параметр PARENT_LAST в файле deployment.xml. Деталей немного, но это может дать вам начало. - person Matthew Murdoch; 02.05.2009

Проверьте эту ссылку. Существуют разные способы установки политики загрузчика классов с помощью Jython в зависимости от версии вашего сервера — http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html

person tiwari.vikash    schedule 27.11.2012

Подобно ответу от pkaeding, я обнаружил следующее, не относящееся к конкретному .war по имени, но полезное при применении к тому, что является .war по умолчанию в файле .ear. (Файлы .ear с одним файлом .war содержат только этот .war, поэтому указывать имя .war в записи не обязательно.) Этот подход может быть полезен в ситуациях, когда вам может потребоваться переименовать файл .war. проект позже по какой-то причине, и поэтому вам не нужно беспокоиться об обновлении файла deployment.xml. Я нашел файл deployment.xml, спрятанный внутри следа каталога ссылок на ячейки; не знаю, нормально ли это, как показано, когда файл помещается на уровень каталога META-INF, а не глубже.

В моем конкретном случае я нашел deployment.xml в своем проекте .ear по адресу:

‹project_root›\META-INF\ibmconfig\cells\defaultCell\applications\defaultApp\deployments\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, вы не должны ожидать, что различные номера идентификаторов будут для вас одинаковыми.

person Matt Campbell    schedule 02.10.2014