J'essaie de charger une classe présente dans un fichier war dans tomcat à partir d'une classe dans un jar dans tomcat lib. Je le fais en utilisant Class.forname ("myclass") mais l'application lance l'exception de classe non trouvée. Je suppose que c'est parce que la webapp aura son propre chargeur de classe. quelqu'un peut suggérer comment résoudre ce problèmeInstanciation d'un tomcat WEB-INF class myclass de tomcat lib utilisant classloader
Répondre
Ceci est par nature - vous ne pouvez pas faire cela. Avec les chargeurs de classe hiérarchiques utilisés par tomcat, vous n'avez pas la possibilité de charger une classe contenant une application Web depuis une classe chargée à partir du classpath global, à moins que vous ne construisiez votre propre mécanisme de chargement de classe - ce que je ne recommanderais pas. Je voudrais plutôt savoir quel problème vous essayez de résoudre avec cette tentative de solution. Je ne peux pas penser à un problème sous-jacent où ce serait la bonne solution.
Vous devez utiliser Thread # getContextClassLoader() pour instancier des classes qui pourraient faire partie de votre distribution WAR. Mais vérifiez que Tomcat l'initialise avec le classloader de l'application web.
J'ai essayé d'utiliser le webappclassloader pour org.apache.catalina mais en obtenant un pointeur null dans la méthode .start() –
Ne pas essayer initialiser les chargeurs de classe par vous-même. Utilisez celui qui est déjà initialisé par Tomcat. – dzidzitop
La solution n'est pas la bonne, mais le scénario est comme ça. Les classes communes qui sont utilisées par tous les fichiers war sont placées dans tomcat lib et j'ai besoin d'obtenir des données dans une classe dans tomcat lib qui est la même chose que dans une classe du fichier war. Je ne veux pas copier coller le même code mais instancier la classe dans le fichier war et obtenir les données –