J'ai une application Web Java qui utilise une architecture de plug-in. J'aimerais savoir si quiconque a une solution où l'on pourrait ajouter un servlet, avec la mappage Serlvet sur le servleConfig pendant que l'application Web est en cours d'exécution? L'idée étant qu'une classe puisse être ajoutée au dossier / web-inf / classes et être rendue active sous forme de servlet sans redémarrer l'application Web. De la même nature, si l'utilisateur choisit de supprimer le "plugin", faites-le supprimer la classe du servletconfig. P>
3 Réponses :
Ajout et suppression de classes à / à partir d'une application en cours d'exécution est difficile. Vous voudrez peut-être regarder JREBEL pour une solution commerciale. P>
Si vos utilisateurs n'ont pas de très longues conversations / sessions, éventuellement un redémarrage de votre application Web peut être suffisamment rapide pour ne pas remarquer. Si cela le fera pour vous, le problème devient assez facile. P>
En supposant que vous exécutez TOMCAT, vous pouvez configurer votre serveur avec rechargeable = true code> et il redémarrera votre application chaque fois que vous lancez un nouveau web.xml code> dans le < Code> WebApps code> répertoire. Vous pouvez ajouter de nouvelles classes au répertoire web-inf / classes code> et ensuite mettre à jour web.xml code>, cela devrait fonctionner correctement. La suppression des cours peut être plus difficile si ces classes sont utilisées. Vous voudrez peut-être effectuer un processus en 2 étapes où vous avez déployé d'abord un web.xml code> qui ne concerne plus d'une classe de servlet donnée, puis attendez un peu pour que les utilisateurs de la classe puissent partir, puis supprimez la classe. et redéployer un web.xml actualisé code> à nouveau. P>
Je ne pense pas que vous puissiez le faire de manière dynamique, mais vous pouvez essayer de faire du servlet actif ou inactif à l'aide d'un filtre préconfiguré. Créez le filtre Vérification d'une valeur que vous pouvez modifier de manière dynamique, dans une base de données ou dans le système de fichiers, et dites-lui comment résoudre la demande si le servlet est "éteint". P>
Je pense que ce serait impoli de simplement éteindre un servlet sans donner aux utilisateurs une sorte de retour d'information. p>
Il n'y a pas d'API de servlet standard pour accomplir cela.
Vous pouvez le faire à Tomcat. Dans votre webApp, votre servlet maître (celui crée d'autres) doit mettre en œuvre conteneurservlet code> afin que vous puissiez disposer de l'objet wrapper code>. Une fois que vous avez installé votre fichier de classe, vous pouvez effectuer des appels suivants, P> Context context = (Context) wrapper.getParent();
Wrapper newWrapper = context.createWrapper();
newWrapper.setName(name);
newWrapper.setLoadOnStartup(1);
newWrapper.setServletClass(servletClass);
context.addChild(newWrapper);
context.addServletMapping(pattern, name);