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

StackOverflow https://stackoverflow.com/questions/813202

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top