Cuando un nodo Java definido por el usuario se empaqueta como un archivo PAR, ese nodo se carga en una cargador de clases aparte.
El cargador de clases carga cualquier clase que se empaqueta dentro del archivo PAR desplegado. Las clases que se colocan en el archivo JAR modifican las clases que se encuentran en el directorio de clases compartidas o la variable de entorno CLASSPATH. Si el archivo PAR desplegado contiene más de un tipo de nodo, los nodos comparten el mismo cargador de clases. Por tanto, un conjunto de nodos definidos por el usuario que compartan datos estáticos, deben empaquetarse en un solo archivo PAR.
Los nodos definidos por el usuario en Java que se empaquetan como simples archivos JAR, se cargan en el mismo cargador de clases. Las clases y la ubicación desde la que se cargan se graba en un rastreo de usuario; por consiguiente, puede utilizar esta información para comprobar que se están cargando las clases correctas.
El intermediario utiliza el siguiente árbol de cargador de clases:
El cargador de clases compartidas también carga clases de contexto. Utiliza CLASSPATH y el directorio WorkPath/shared-classes/ para buscar clases.
El cargador de clases de intermediario y el cargador de clases compartido son hijos del cargador de clases común. Por tanto, el contenido del cargador de clases compartido no es visible para el cargador de clases de intermediario. No almacene los siguientes recursos en este directorio:
Paquete de nodos definidos por el usuario en un archivo PAR
Paquete de nodos definidos por el usuario en un archivo JAR
El mecanismo de modificación de estándares aprobados permite modificar los siguientes paquetes estándar en el JRE:
Para modificar estos paquetes en el intermediario, coloque los archivos JAR para los estándares API en el directorio /lib del archivo PAR.
Al buscar un contexto JNDI, se utiliza el cargador de clases de contexto. Si la búsqueda utiliza clases que están empaquetadas con el nodo definido por el usuario, el cargador de clases de contexto debe ser el mismo que el cargador de clases que se está utilizando para cargar el nodo definido por el usuario. Para asegurar que cada hebra utiliza el mismo cargador de clases, puede incluirse el siguiente código en la clase de nodo definido por el usuario:
Thread.currentThread.setContextClassLoader(this.getClass().getClassLoader());