2010-09-27 9 views
12

Estoy tratando de practicarme con cargadores de clases personalizados, y tengo algunas preguntas. ¿Hay alguna manera de indicarle a la JVM que use mi cargador de clases personalizado de forma global? Por ejemplo, escribí una aplicación pequeña que se ejecuta bajo Tomcat 6. El servlet es administrado por el contenedor, ¿dónde debo configurar mi cargador de clases? Además, la aplicación web utiliza algunas jarras de terceros, ¿puedo controlar la carga de las clases de esas jarras?¿Cómo establecer mi cargador de clases personalizado como predeterminado?

¿Las respuestas a las preguntas anteriores serán diferentes en el caso de una aplicación independiente?

Gracias!

Respuesta

12

Puede configurar el cargador de clases por defecto del sistema como un argumento de JVM:

java -Djava.system.class.loader 
    =com.test.YourCustomClassLoader com.test.YourMainClass 

Como Tomcat se inicia como una aplicación Java, se puede establecer este parámetro también, en el %TOMCAT_HOME%\bin\run.bat o $TOMCAT_HOME/bin/run.sh ejecutable.

Edición de ejecución: Si establece su cargador de clases como el cargador de clases de sistema, que se utiliza para cargar las clases de componentes de Tomcat, las diferentes bibliotecas, y sus propias clases. Si desea que su cargador de clases se use solo para las clases de su aplicación (incluidas las bibliotecas, etc.), debe configurar un elemento Loader para su contexto. El elemento Loader debe estar definido dentro de su elemento Context, que se puede definir en un archivo context.xml. Más información:

+0

Por alguna razón me consiguió java.lang.Error: java.lang.IllegalStateException: invocación recursiva. Esto es lo que hice: crear una subclase de ClassLoader, suministrar c'tor que toma un ClassLoader como parámetro, configurarlo usando el sistema -Djava.system.class.loader, y ... ¡Boom! Se produjo un error durante la inicialización de VM :-(¿Extrañé algo? – Seffy

+0

Sin ver su código, no puedo asegurarlo. –

+0

Lo he probado con una pequeña aplicación principal que tengo, y se ejecuta correctamente. –

Cuestiones relacionadas