martes, 7 de octubre de 2014

ClassLoader de JBoss EAP 6

En JBoss EAP 6, se puede hacer una configuración de modulos en el core de JBoss que contengan librerías que pueden ser utilizadas por todos los proyectos.

En ocasiones, cuando se tienen varias aplicaciones en un mismo servidor JBoss, puede ser que varias aplicaciones utilicen las mismas librerías y que puedan ocasionarse conflictos por librerías duplicadas.

JBoss resuelve los conflictos asignando prioridades en el classloader para la carga de las clases, que se indica a continuación:

• La prioridad máxima es para los módulos.
• Después, las librerias indicadas como dependencias en el MANIFEST.MF del archivo empaquetado, o en el archivo jboss-deployment-structure.xml.
• A continuación, las librerías empaquetadas en la propia aplicación, tales como las clases contenidas en WEB-INF/lib o WEB-INF/classes.
• Por último, las librerías empaquetadas en el mismo archivo EAR (en el directorio lib del EAR).

Generar módulos en el core de JBoss tiene sus ventajas:

• Será lo primero que cargará el classloader.
• Como se encuentran en el core de JBoss, es visible para cuando el servidor se arranca en modo domain o standalone, útil para cuando se utiliza el servidor en cluster.
• Los módulos son utilizados bajo demanda, haciendo mas eficiente el uso de recursos.

Instalar el módulo:

Supongamos que queremos añadir el jar de spring para todas nuestras aplicaciones que residirán en nuestro servidor.

• Nos ubicamos en la ruta $JBOSS_HOME\\modules\system\layers\base\org\
• Creamos el directorio org\springframework\main
• En este directorio, copiamos el jar spring2.5.6.jar
 Creamos el archivo module.xml, indicando el nombre del módulo, el jar y en caso de ser necesario, las dependencias. El archivo tendrá el siguiente código:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework">

    <properties>
        <property name="jboss.api" value="unsupported"/>
    </properties>

    <resources>
        <resource-root path="spring-2.5.6.jar"/>
        <!-- Insert resources here -->
    </resources>
    
</module>

Con esto quedaría generado el módulo listo para ser utilizado.