Domanda

Ho un'applicazione JEE che gira su WAS 6. Deve avere l'impostazione dell'ordine del caricatore di classi su " Le classi caricate prima con il caricatore di classi di applicazione " e l'opzione di criteri per il caricatore di classi WAR impostata a " Caricatore di classe singola per l'applicazione " ;.

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

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

È stato utile?

Soluzione

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

Ho creato un 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>

Assicurati di cambiare il nome dei tuoi file WAR in modo che corrispondano (il mio si chiama AGS.war).

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

Quindi, ho inserito il file deployment.xml nella radice del mio file EAR, tramite 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>

Altri suggerimenti

Modifica (2): WebSphere Application Server Toolkit (AST) è uno strumento che è possibile utilizzare per migliorare un file EAR con queste informazioni (vedere per ad esempio la sezione "Configura un EAR migliorato" in questo documento ).

Modifica (1): Questo post suggerisce che le "Classi caricate prima con il caricatore di classi di applicazioni" (impostazione PARENT_LAST) possono essere impostate nel file deployment.xml all'interno dell'EAR.

Se hai il controllo degli script di distribuzione automatizzata, puoi farlo. Di seguito è riportato un po 'di codice json wsadmin per impostare l'ordine del caricatore di classi del modulo Web su "Classi caricate prima con il caricatore di classi di applicazioni" (è interessante notare che l'impostazione si chiama PARENT_LAST che è quella che era etichettata nelle versioni precedenti della console di amministrazione ...).

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

Dai un'occhiata a questo link. Esistono diversi modi per impostare i criteri del programma di caricamento classi utilizzando Jython in base alla versione del server: http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frxml_7libapp4.html

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

Nel mio caso particolare, ho trovato <=> nel mio progetto .ear all'indirizzo:

lt &; Project_root gt &; \ META-INF \ ibmconfig \ cells \ defaultCell \ applicazioni \ DefaultApp \ deployment \ DefaultApp \

Il contenuto del file è molto simile 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 linea:

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

originariamente letto:

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

Nota: non viene fatto alcun riferimento a nessun .war. Come detto pkaeding, non dovresti aspettarti che i vari numeri ID siano gli stessi per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top