2009-05-01 15 views
12

Possiedo un'applicazione JEE in esecuzione su WAS 6. È necessario che l'ordine del programma di caricamento classi sia impostato su "Classi caricate con il programma di caricamento classi applicazione prima" e l'opzione del programma del programma di caricamento classi WAR sia impostata su "Caricatore di classi singole per applicazione".È possibile impostare la politica del classloader per WebSphere nel file ibm-web-bnd.xmi?

È possibile specificare queste opzioni all'interno del file EAR, sia nel file ibm-web-bnd.xmi o in qualche altro file, quindi l'amministratore non ha bisogno di modificare queste impostazioni manualmente?

Poiché l'applicazione viene distribuita tramite uno script automatico e il responsabile della distribuzione è fuori sede, e anche per altri motivi politici, ciò sarebbe di grande aiuto!

risposta

10

Grazie alla risposta di @ Matteo Murdoch, sono stato in grado di trovare una soluzione. Eccolo, nel caso in cui aiuti qualcun altro.

ho creato una deployment.xml come questo:

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

assicurarsi di modificare il nome del file WAR (s) in modo che corrisponda (la mia si chiama AGS.war).

Ho anche modificato i numeri negli attributi xmi:id, per assicurarmi che siano univoci, anche se non sono sicuro che sia davvero importante che siano unici tra le applicazioni.

Poi, ho messo il file deployment.xml nella radice del mio file EAR, via 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

Edit (2): LaWebSphere Application Server Toolkit (AST) è uno strumento che può essere utilizzato per migliorare un file EAR con queste informazioni (si veda ad esempio la sezione 'Configurare un EAR avanzato' in this document).

Edit (1):This post sostiene che le 'Classi carichi di classe caricatore applicazioni prima' (l'impostazione PARENT_LAST) possono essere impostati nel file deployment.xml all'interno dell'orecchio.

Se si ha il controllo sugli script di distribuzione automatizzati, è possibile farlo. Di seguito è riportato un codice jsson di wsadmin per impostare l'ordine del caricatore di classe del modulo Web su "Classi caricate con il caricatore di classi di applicazioni prima" (interessante l'impostazione è denominata PARENT_LAST che è ciò che è stato etichettato nelle versioni precedenti della console di amministrazione ...).

esempio 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

Sfortunatamente, non ho il controllo sugli script. Per ragioni politiche, ho bisogno di occuparmi di tutto questo prima di confezionare l'EAR (anche se si potrebbe sostenere che questo è il compito dell'amministratore responsabile dell'implementazione ...) – pkaeding

+0

Aggiunto un collegamento a un post sul forum che descrive come impostare l'opzione PARENT_LAST nel file deployment.xml. È un po 'corto nei dettagli, ma potrebbe darti un inizio. –

0

Simile alla risposta da pkaeding, ho scoperto, come segue non specifiche per un particolare .war per nome, ma utile quando si applicano a qualunque sia il predefinito .war nel file .ear. (I file .ear con un file .war contengono solo .war, quindi non è necessario nominare il file .war nella voce.) Questo approccio può essere utile per le situazioni in cui potrebbe essere necessario rinominare il file .war progetto in un secondo momento per qualche motivo, quindi non dovrai preoccuparti di aggiornare il file deployment.xml. Ho trovato il file deployment.xml sepolto all'interno di un percorso di directory di riferimento della cella; non so se va bene come mostrato quando il file è posizionato a livello di directory META-INF e non più in profondità.

Nel mio caso particolare, ho trovato deployment.xml nel mio progetto .ear a:

<project_root> \ META-INF \ ibmconfig \ cells \ defaultCell \ applicazioni \ DefaultApp \ deployment \ DefaultApp \

il contenuto del file assomiglia molto:

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

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

originariamente leggere:

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

Nota è stato fatto alcun riferimento a qualsiasi .war. Come menzionato per il pkaeding, non dovresti aspettarti che i vari numeri ID siano uguali per te.

Problemi correlati