Posso definir a política de carregador de classe para WebSphere no arquivo ibm-web-bnd.xmi?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Tenho uma aplicação JEE que corre no WAS 6. Ele precisa ter a configuração de carregador de classe para "Classes carregados com carregador de classe primeira aplicação", ea classe WAR política do carregador de opção definida como "carregador de classe única para aplicação" .

É possível especificar essas opções dentro do arquivo EAR, seja no arquivo ibm-web-bnd.xmi ou algum outro arquivo, de modo que o administrador não precisa alterar essas configurações manualmente?

Uma vez que o aplicativo é implantado através de um script automatizado, eo cara que é responsável pela implantação é fora do local, e também para algumas outras razões políticas, isso seria de grande ajuda!

Foi útil?

Solução

Graças à resposta de @Matthew Murdoch, eu era capaz de chegar a uma solução. Aqui está ele, no caso de ajuda de outra pessoa.

Eu criei um deployment.xml assim:

<?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>

Certifique-se de mudar o nome do seu arquivo (s) WAR para corresponder (o meu é chamado AGS.war).

Eu também mudou os números nos atributos xmi:id, com certeza eles são únicos, embora eu não tenho certeza se isso realmente importa que ser único em aplicações.

Então, eu coloquei o arquivo deployment.xml na raiz do meu arquivo EAR, através 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>

Outras dicas

Editar (2): O WebSphere Application Server Toolkit (AST) é uma ferramenta que você pode usar para melhorar um arquivo EAR com esta informação (ver, por exemplo, o 'Configure um avançado EAR' seção este documento ).

Editar (1): Este post sugere que os 'classes carregadas com carregador de classe aplicação primeiro' (a definição PARENT_LAST) pode ser definida no arquivo deployment.xml no interior do ouvido.

Se você tem controle sobre os scripts de implantação automatizados isso pode ser feito. Abaixo está algum código wsadmin jython para definir o módulo de rede de pedidos carregador de classe para 'Classes carregados com carregador de classe primeira aplicação' (curiosamente a configuração é chamada PARENT_LAST que é o que foi rotulado como nas versões anteriores do console de administração ...).

exemplo 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

Confira neste link. Existem diferentes maneiras de política do carregador set classe usando Jython com base na sua versão do servidor - http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html

Assim como a resposta de pkaeding, eu descobri como segue, não é específico para um determinado .war pelo nome, mas útil quando se aplica a qualquer que seja o .war padrão no arquivo .ear. (Arquivos .ear com um arquivo .war neles têm apenas que .war, então nomear o .war não é necessário na entrada.) Esta abordagem pode ser bom para situações onde você pode precisar de re-nome do .war projeto mais tarde, por algum motivo, e assim você não precisa se preocupar em atualizar o arquivo deployment.xml. Eu encontrei o arquivo deployment.xml enterrado dentro de uma trilha diretório referência de célula; Não sei se ele está bem, como mostrado quando o arquivo é colocado no nível de diretório META-INF e não mais profundo.

No meu caso particular, eu encontrei deployment.xml no meu projeto .ear em:

\ META-INF \ ibmconfig \ cells \ defaultCell \ applications \ DefaultApp \ implementações \ DefaultApp \

O conteúdo do arquivo se parece muito com:

<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>

A linha:

<classloader xmi:id="Classloader_1262775196208" mode="PARENT_LAST" />

originalmente leia-se:

<classloader xmi:id="Classloader_1262775196208" mode="PARENT_FIRST" />

Note está sendo feita nenhuma referência a qualquer .war. Como pkaeding mencionado, você não deve esperar os vários números de identificação a ser o mesmo para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top