2009-11-23 12 views
0

Je développe actuellement une application web basée sur Struts2 & Composants Spring combinés à un ensemble de bibliothèques tierces dans un framework d'entreprise.Forcer la priorité de classpath avec Tomcat 5.5 sous eclipse

Ces bibliothèques exposent des ensembles de haricots de printemps, à l'aide de fichiers blahblah.xml intégrés dans les fichiers jar fournis.

Je dois remplacer certaines des classes d'implémentation exposées par ces déclarations de bean avec mes propres classes, afin d'ajouter des éléments supplémentaires dans le traitement fourni.

Les gens qui ont conçu le cadre de l'entreprise fait choisi d'exposer les fichiers blahblah.xml au printemps par un Listener & WebApplicationContext spécifique qui définit ces configLocations:

ConfigurableWebApplicationContext cwac = new XmlWebApplicationContext(); 
cwac.setConfigLocation("classpath*:<somePath>/blahblah.xml"); 

Pour le moment, je ne vois qu'une seule façon d'atteindre le travail (mais peut-être que je me trompe, s'il vous plaît laissez-moi savoir!): faire une copie de blahblah.xml hors du pot dans une fausse structure de répertoire, modifier la classe d'implémentation de certains beans dans la copie, puis mettre le dossier cela inclut la fausse structure dans le classpath webapp afin de "masquer" l'original.

C'est ce qui m'amène au problème d'être capable de forcer la précédence dans le classpath de TOMCAT 5.5 que j'utilise pour le développement sous eclipse 3.3.

Bien que j'aie ajouté le répertoire contenant la fausse structure dans l'onglet Classpath de la configuration de lancement de mon serveur Tomcat sous eclipse 3.3, l'objet injecté est toujours l'original à la place du mien. Je suppose que mon dossier est placé après les fichiers WEB-INF/lib dans le chemin de classe TOMCAT, mais je n'ai aucun moyen de l'attraper.

Toutes les idées?

Répondre

1

la priorité de classloading de Tomcat pour webapps est à peu près comme suit: d'abord le bootstrap/système (JRE/lib, puis server.loader), puis les bibliothèques webapp (WEB-INF/classes, puis WEB-INF/lib), puis les bibliothèques communes (common.loader, puis Tomcat/lib) et enfin la bibliothèques webapp-shared (shared.loader).

Je commencerais par ajouter ce fichier à WEB-INF/classes (dans Eclipse: il suffit de déposer le fichier dans le dossier src, il sera automagiquement pris en compte).

Notez que vous ne pouvez pas contrôler la priorité de la classe sans un classloader personnalisé lourd. Il vous suffit de connaître l'ordre de chargement par défaut et de l'utiliser judicieusement.

+0

Wooow cela fonctionne parfaitement; mettre ma fausse structure dans le dossier src fait le travail! Merci beaucoup. –

+0

De rien. – BalusC

Questions connexes