Comment définir ma classe personnalisée chargeur par défaut?
Je suis en train de pratiquer moi-même avec classe personnalisée chargeurs, et j'ai quelques questions. Est-il un moyen pour indiquer la JVM pour utiliser mes personnalisé chargeur de classe à l'échelle mondiale? Par exemple, j'ai écrit petite application qui s'exécute sous Tomcat 6. La servlet est géré par le conteneur, où dois-je placer mon chargeur de classe? En outre, la webapp utilise de la 3e partie des pots, puis-je contrôler les classes de chargement de ces pots?
Sont les réponses à la ci-dessus sera différent dans le cas de l'application autonome?
Merci!
OriginalL'auteur Seffy | 2010-09-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez configurer le système par défaut de la classe loader comme un argument JVM:
Que Tomcat commence comme une application java, vous pouvez définir ce paramètre trop, à la
%TOMCAT_HOME%\bin\run.bat
ou$TOMCAT_HOME/bin/run.sh
exécutable.Modifier pour la fin:
Si vous définissez votre chargeur de classe comme de Système de chargeur de classe, il sera utilisé pour charger Tomcat composant les classes, les bibliothèques différentes, et de vos propres classes.
Si vous voulez que votre chargeur de classe pour être utilisé uniquement pour votre demande de cours (y compris les bibliothèques et ainsi de), vous devez configurer un
Loader
élément de votre contexte.Le Chargeur élément doit être définie à l'intérieur de votre
Context
élément, qui peut être défini à uncontext.xml
fichier.Plus d'informations:
Context
élémentLoader
élément de votre propreContext
.Sans une vue sur votre code, je ne peux pas vous dire pour sûr.
Je l'ai testé avec un peu d'Application Principal que j'ai, et il fonctionne OK.
package com.la démo.prévente; public class MyClassLoader s'étend du chargeur de classe { public MyClassLoader( chargeur de classe parent ) { } protected de la Classe loadClass( String name, boolean résoudre ) throws ClassNotFoundException { Class c = super.loadClass( nom, résoudre ); le Système..println( "nom:" + nom + ", classe: "+ c); return c; } }
Et l'exception: java.lang.IllegalStateException: l'appel récursif à java.lang.Chargeur de classe.initSystemClassLoader(ClassLoader.java:1312) à java.lang.Chargeur de classe.getSystemClassLoader(ClassLoader.java:1295) à java.lang.Chargeur de classe.<init>(ClassLoader.java:228) au com.la démo.prévente.MyClassLoader.<init>(MyClassLoader.java:7) au soleil.de réfléchir.NativeConstructorAccessorImpl.newInstance0(Native method)
OriginalL'auteur Tomas Narros