Classloading del nodo definito dall'utente

Quando un nodo definito dall'utente in Java è compresso come un file PAR, il nodo definito dall'utente in Java viene caricato in un classloader a parte. Il classloader carica qualsiasi classe che è compresa all'interno del PAR distribuito. Le classi inserite nel JAR sovrascrivono le classi presenti nella directory di classi condivise o la variabile di ambiente CLASSPATH. Se il PAR distribuito contiene più di un tipo di nodo, i nodi condividono lo stesso classloader. Quindi, una serie di nodi definiti dall'utente che condividono dati statici devono essere compressi in un unico file PAR. I nodi definiti dall'utente in Java che sono compressi come semplici file JAR vengono caricati nello stesso classloader. Le classi e l'ubicazione da cui vengono caricati sono scritti sulla traccia utente, è possibile quindi utilizzare tali informazioni per verificare che siano state caricate le classi corrette.

Il broker utilizza la seguente struttura ad albero di classloader:


Il diagramma mostra i componenti della struttura ad albero di classloader utilizzati dal broker. Bootstrap è il nodo root della struttura ad albero, il cui unico child è System. Il child di System è Common. Common ha due child: Broker e Shared. Broker non dispone di alcun child mentre Shared ha diversi child. I child di Shared includono Grouped e nodi definiti dall'utente in Java. Può essere presente un numero qualsiasi di nodi definiti dall'utente in Java.

Di seguito vengono descritti i componenti presenti nella struttura ad albero di classloader:

Percorsi di ricerca classloading dei nodi definiti dall'utente

Nodi definiti dall'utente compressi in un PAR

Il broker utilizza il seguente percorso di ricerca per individuare le classi del nodo definito dall'utente:
  1. /classes per individuare le classi nel PAR distribuito.
  2. /lib per individuare i file JAR nel PAR distribuito.
  3. <WorkPath>/shared-classes/ per individuare i file JAR.
  4. La variabile di ambiente CLASSPATH.

Nodi definiti dall'utente compressi in un JAR

Il broker utilizza il seguente percorso di ricerca per individuare le classi del nodo definito dall'utente:
  1. Il file JAR distribuito.
  2. <WorkPath>/shared-classes/ per individuare i file JAR
  3. La variabile di ambiente CLASSPATH.

Standard approvati per la sovrascrittura di classi

Il meccanismo di sovrascrittura degli standard approvati consente ai seguenti pacchetti standard di essere sovrascritti in JRE:

  • javax.rmi.CORBA
  • org.omg.CORBA
  • org.omg.CORBA.DynAnyPackage
  • org.omg.CORBA.ORBPackage
  • org.omg.CORBA.portable
  • org.omg.CORBA.TypeCodePackage
  • org.omg.CORBA_2_3
  • org.omg.CORBA_2_3.portable
  • org.omg.CosNaming
  • org.omg.CosNaming.NamingContextExtPackage
  • org.omg.CosNaming.NamingContextPackage
  • org.omg.Dynamic
  • org.omg.DynamicAny
  • org.omg.DynamicAny.DynAnyFactoryPackage
  • org.omg.DynamicAny.DynAnyPackage
  • org.omg.IOP
  • org.omg.IOP.CodecFactoryPackage
  • org.omg.IOP.CodecPackage
  • org.omg.Messaging
  • org.omg.PortableInterceptor
  • org.omg.PortableInterceptor.ORBInitInfoPackage
  • org.omg.PortableServer
  • org.omg.PortableServer.CurrentPackage
  • org.omg.PortableServer.POAManagerPackage
  • org.omg.PortableServer.POAPackage
  • org.omg.PortableServer.portable
  • org.omg.PortableServer.ServantLocatorPackage
  • org.omg.SendingContext
  • org.omg.stub.java.rmi
  • org.w3c.dom
  • org.xml.sax
  • org.xml.sax.ext
  • org.xml.sax.helpers
Per ulteriori informazioni, fare riferimento a Endorsed Standards Override Mechanism.

Per sovrascrivere questi pacchetti nel broker, inserire i file JAR relativi agli standard dell'API nella directory /lib del PAR.

Contesto JNDI

Quando si ricerca un contesto JNDI, viene utilizzato il classloader del contesto. Se in tale ricerca vengono utilizzate classi che sono compresse con il nodo definito dall'utente, il classloader del contesto deve essere lo stesso classloader utilizzato per caricare il nodo definito dall'utente. Per assicurare che ciascun thread utilizzi lo stesso classloader, nella classe del nodo definito dall'utente è possibile includere il seguente codice:
Thread.currentThread.setContextClassLoader(this.getClass().getClassLoader());
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as24996_