2009-05-01 17 views
12

Tengo una aplicación que se ejecuta en JEE fue de 6. Se tiene que tener el valor para el cargador de clases de "clases cargadas con el cargador de clases primera aplicación", y la opción política de cargador de clases WAR se ajusta a "cargador de clase individual para su aplicación".¿Puedo establecer la política del cargador de clases para WebSphere en el archivo ibm-web-bnd.xmi?

¿Es posible especificar estas opciones dentro del archivo EAR, ya sea en el archivo ibm-web-bnd.xmi u otro archivo, por lo que el administrador no necesita cambiar estas configuraciones manualmente?

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

Respuesta

10

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

he creado un deployment.xml así:

<?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 su archivo (s) para que coincida GUERRA (el mío se llama AGS.war).

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

Entonces, puse el archivo deployment.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> 
8

Editar (2): ElWebSphere Application Server Toolkit (AST) es una herramienta que puede utilizar para mejorar un archivo EAR con esta información (véase, por ejemplo, la sección 'Configurar un EAR mejorado' en this document).

Edit (1):This post sugiere que las 'clases cargadas con cargador de clases de aplicación primero' (el ajuste PARENT_LAST) se pueden configurar en el archivo deployment.xml dentro del oído.

Si usted tiene control sobre los scripts de implementación automatizados esto se puede hacer. A continuación se muestra un código jython wsadmin para configurar el orden cargador de clases del módulo web para 'clases cargadas con el cargador de clases primera aplicación' (curiosamente el ajuste se llama PARENT_LAST que es lo que se marcó en las versiones anteriores de la consola de administración ...).

ejemplo 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

Lamentablemente, no tengo control sobre los scripts. Por razones políticas, tengo que encargarme de todo esto antes de empacar el EAR (aunque podría argumentarse que este es el trabajo del administrador responsable de la implementación ...) – pkaeding

+0

Agregó un enlace a una publicación del foro que describe cómo establecer la opción PARENT_LAST en el archivo deployment.xml. Es un poco corto de detalles, pero podría darle un comienzo. –

0

Similar a la respuesta de pkaeding, he descubierto de la siguiente manera, no es específico de un .war en particular por su nombre, pero útil cuando se aplica a lo que sea el .war predeterminado en el archivo .ear. (Archivos .ear con un archivo .war en ellos sólo tienen que .war, por lo nombrando el .war no es necesario en la entrada.) Este enfoque puede ser bueno para situaciones en las que es posible que tenga que volver a nombre del .war proyecto más tarde por algún motivo, por lo que no tendrá que preocuparse por actualizar el archivo deployment.xml. Encontré el archivo deployment.xml enterrado dentro de un 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, me pareció deployment.xml en mi proyecto .ear en:

<project_root> \ META-INF \ ibmconfig \ células \ defaultCell \ Applications \ \ DefaultApp despliegues \ 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" /> 

originalmente decía:

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

Nota no se hace ninguna referencia a ningún .war. Como se mencionó anteriormente, no debe esperar que los diferentes números de id sean iguales para usted.

Cuestiones relacionadas