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

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

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

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

Ответы [ 4 ]

10 голосов
/ 04 мая 2009

Благодаря ответу @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>
8 голосов
/ 02 мая 2009

Edit (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
0 голосов
/ 02 октября 2014

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

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

\ 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, вы не должны ожидать, что различные идентификаторы будут одинаковыми для вас.

0 голосов
/ 27 ноября 2012

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

...