¿Puedo configurar la política del cargador de clases para WebSphere en el archivo ibm-web-bnd.xmi?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación JEE que se ejecuta en WAS 6.Debe tener el orden del cargador de clases configurado en "Clases cargadas primero con el cargador de clases de la aplicación" y la opción de política del cargador de clases WAR configurada en "Cargador de clases único para la aplicación".

¿Es posible especificar estas opciones dentro del archivo EAR, ya sea en el archivo ibm-web-bnd.xmi o en algún otro archivo, para que el administrador no necesite cambiar esta configuración manualmente?

Dado que la aplicación se implementa a través de un script automatizado y la persona a cargo de la implementación está fuera del sitio, y también por otras razones políticas, ¡esto sería de gran ayuda!

¿Fue útil?

Solución

Gracias a la respuesta de @Matthew Murdoch, pude encontrar una solución. Aquí está, en caso de que ayude a alguien más.

Creé un despliegue.xml como este:

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

Asegúrese de cambiar el nombre de sus archivos WAR para que coincidan (el mío se llama AGS.war).

También cambié los números en los atributos xmi:id, para asegurarme de que sean únicos, aunque no estoy seguro de que realmente importe que sean únicos en todas las aplicaciones.

Luego, coloco el archivo implementación.xml en la raíz de mi archivo EAR, a través de 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>

Otros consejos

Editar (2): El WebSphere Application Server Toolkit (AST) es una herramienta que puede utilizar para mejorar un archivo EAR con esta información (consulte ejemplo, la sección 'Configurar un EAR mejorado' en este documento ).

Editar (1): Esta publicación sugiere que las 'Clases cargadas con el cargador de clases de aplicaciones primero' (la configuración PARENT_LAST) se pueden establecer en el archivo deployx.xml dentro del EAR.

Si tiene control sobre los scripts de implementación automatizados, esto puede hacerse. A continuación se muestra un código wsadmin jython para configurar el orden del cargador de clases del módulo web en 'Clases cargadas con el cargador de clases de aplicaciones primero' (curiosamente, la configuración se llama PARENT_LAST, que es lo que se etiquetó en versiones anteriores de la consola de administración ...).

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

Mira este enlace. Hay diferentes formas de establecer la política del cargador de clases utilizando Jython según la versión de su servidor: http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html

De manera similar a la respuesta de pkaeding, descubrí lo siguiente, no específico de un .war en particular por nombre, pero útil cuando se aplica a cualquier .war predeterminado en el archivo .ear.(Los archivos .ear que contienen un archivo .war solo tienen ese .war, por lo que no es necesario nombrar el .war en la entrada). Este enfoque puede ser bueno para situaciones en las que es posible que necesite cambiar el nombre del .war. proyecto más tarde por alguna razón, por lo que no tendrá que preocuparse por actualizar el deployment.xml archivo.Encontré el deployment.xml archivo enterrado dentro de un rastro de directorio de referencia de celda;No sé si está bien, como se muestra cuando el archivo se coloca en el nivel de directorio META-INF y no más profundo.

En mi caso particular encontré deployment.xml en mi proyecto .ear en:

<raíz_proyecto>\META-INF\ibmconfig\cells\defaultCell\applications\defaultApp\deployments\defaultApp\

El contenido del archivo se parece mucho a:

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

La línea:

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

leído originalmente:

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

Tenga en cuenta que no se hace ninguna referencia a ningún .war.Como mencionó pkaeding, no debe esperar que los distintos números de identificación sean los mismos para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top