9
votes

Ajouter dynamiquement un servlet au servleConfig

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.


0 commentaires

3 Réponses :


1
votes

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.

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.

En supposant que vous exécutez TOMCAT, vous pouvez configurer votre serveur avec rechargeable = true et il redémarrera votre application chaque fois que vous lancez un nouveau web.xml dans le < Code> WebApps répertoire. Vous pouvez ajouter de nouvelles classes au répertoire web-inf / classes et ensuite mettre à jour web.xml , 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 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é à nouveau.


0 commentaires

0
votes

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".

Je pense que ce serait impoli de simplement éteindre un servlet sans donner aux utilisateurs une sorte de retour d'information.


0 commentaires

6
votes

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);


0 commentaires