2012-08-16 3 views
0

J'ai de nombreuses applications déployées dans Tomcat webapps répertoire dire A, B et C.Comment appeler une application commune pour plusieurs fichiers WAR en l'écrivant à un seul endroit?

Il y a également un projet distinct dit utilitaire Z qui doit être utilisé par tous les A, B et C.

donc un Pour ce faire, mettez le fichier .class du projet Z dans le dossier classes de tous les projets A, B et C.

Est-il possible de garder le projet Z là-bas et nous pouvons juste donner une référence pour le même projet Z dans A, B et C, de sorte que nous n'avons pas besoin de copier le fichier jar ou .class à tous les 3 projets.

si oui, comment faire?

Je suis désolé si j'ai posé une question idiote .... mais je veux effacer le doute.

Merci

Répondre

0

applications Web sont isolées dans class loaders distinctes. De cette façon, les classes et les bibliothèques d'une application n'affectent pas une autre application. Si vous souhaitez partager des classes ou des bibliothèques entre applications, vous pouvez les placer dans le chargeur de classe commun.

De Tomcat 6 Class Loader How-To

Bootstrap 
     | 
    System 
     | 
    Common 
/ \ 

webapp1 webapp2 ...

ont également un oeil à Shared Library Files. Cela dit, cela n'est pas une bonne pratique car cela complexifie le déploiement de tomcat lui-même; cela signifie que le .war n'est pas vraiment "autonome"; et il pourrait casser le modèle d'isolation des applications Web (voir la note ci-dessous).

Ce que vous avez est un problème de construction. Vous pouvez utiliser un système de construction, comme maven, pour automatiser la construction de votre .war. Chaque projet A, B, C peut dépendre d'un projet commun D. Lorsque vous construisez A, B ou C, le système de construction construit D d'abord, puis tout le paquet en fonction de vos besoins.

Note:

application Web doivent être isolés afin qu'ils ne partagent pas des objets. Leur graphe d'objets est complètement distinct et chaque application peut être facilement redéployée (et récupérée) de manière individuelle. Si vous placez des classes dans un chargeur de classe commun, cela peut entraîner des effets secondaires indésirables. Par exemple, si la classe partagée implémente un singleton, cela signifie que toutes les applications partagent la même instance de l'objet singleton, ce qui est en conflit avec le modèle d'isolation supposé. Généralement, les utilisateurs partagent des classes de cette manière lorsqu'ils souhaitent explicitement partager des objets entre des applications dans des cas exceptionnels.

+0

Merci Ewernli, il a éclairci mon doute dans une certaine mesure. Permettez-moi de passer en revue le lien que vous avez mentionné. En fait cette question m'a été posée dans une interview et je veux une petite application pour tester ce genre de pièce .. Merci – Jayesh

Questions connexes