2011-08-04 4 views
6

Je suis un novice avec JavaEE mais j'ai de l'expérience avec ASP.NET MVC. Avec ASP.NET MVC, je sais que nous pouvons faire une architecture de plugin avec l'application Web ASP.NET MVC afin que vous puissiez créer une DLL avec la structure MVC et la mettre dans l'application Web ASP.NET MVC existante pour la faire fonctionner sans compiler le web app. http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/Spring MVC Plugin Architecture

Je me demande si ce genre d'architecture est possible avec Spring MVC. Par exemple, lorsque je crée un fichier jar (ou war) avec la structure MVC et que je le mets dans une application Web Spring MVC existante, cela devrait fonctionner sans recompiler l'application web. Si c'est possible, comment puis-je y parvenir? Toute référence serait appréciée.

Répondre

2

Il est possible sans recompilation, mais probablement pas sans redémarrer. Vous pouvez créer un fichier .jar que vous déposez dans le répertoire WEB-INF/lib. En utilisant classpath scanning vous devriez être en mesure de déployer vos nouveaux contrôleurs au démarrage. Vous pouvez ignorer entièrement la vue et envoyer directement les données à ServletResponse. Rendu d'une vue d'un pot peut ou ne peut pas être possible, je ne sais pas.

+0

Cela semble bien. La partie de redémarrage est OK. Je crois que c'est le même cas dans ASP.NET MVC. Merci mon pote. – Jon

1

On dirait que vous voulez chercher "hotdeploy".

Ce que vous demandez est pas une caractéristique du printemps, mais plutôt une caractéristique de machine virtuelle Java et le serveur d'applications. Le serveur d'application est capable de voir que vos classes ont bien changé et, grâce à une astucieuse manipulation de ClassLoader, il peut charger de nouvelles versions dans la JVM en cours d'exécution dès qu'elles sont disponibles. Java n'a pas été conçu pour fonctionner comme ça, donc il y a quelques problèmes (ClassLoader, fuite de mémoire, hotdeploy sont de bons mots-clés pour en savoir plus sur les problèmes potentiels et les solutions possibles). Je ne recommanderais pas ceci pour l'usage de production mais il peut être utile pendant le développement.

Puisqu'il s'agit d'une fonctionnalité des serveurs d'applications, les détails réels dépendent du serveur d'application particulier et sont expliqués dans sa documentation.

Si vous voulez simplement un certain plugin-magie, pas hotdeploy réelle, il y a d'autres choses que vous pourriez faire. Un ClassLoader personnalisé peut charger des classes de n'importe quelle source (fichier, réseau, base de données ..) que vous voulez et vous pouvez ensuite les instancier et les utiliser avec la réflexion. (C'est ce qui arrive quand vous déployez la guerre sur Tomcat/JBoss ou autre). L'accès et le rechargement dynamique de ressources non-class à l'intérieur des fichiers jar/war est beaucoup plus facile.