51 votes

Un moyen de partager l'état de session entre différentes applications dans tomcat?

Nous voulons diviser une application de travail dans les deux guerres différentes afin d'être en mesure de mettre à jour une application sans affecter les autres. Chaque webapp seront différents de l'interface utilisateur, les différents utilisateurs et les différents planification du déploiement.

Le plus simple semble être le partage de la même session, de sorte que si l'application d'Un ensemble session.setAttribute("foo", "bar") app B sera en mesure de le voir.

Est-il un moyen de partager l' HttpSession de l'état pour les applications dans la même instance de Tomcat?

Notre application est en cours d'exécution sur un dédié tomcat 5.5, il n'y a pas d'autres applications qui s'exécutent sur la même instance de tomcat, de sorte que toutes les préoccupations de sécurité concernant le partage de session ne sont pas un problème.

Si il n'est pas possible que cette session de partage est vraiment une mauvaise idée s'il vous plaît laissez un commentaire.

26voto

Aaron Digulla Points 143830

Vous ne devriez pas partager HttpSession; mais vous pouvez partager d'autres objets. Par exemple, vous pouvez enregistrer un objet via JNDI et accéder au même objet dans toutes vos applications (les bases de données l'utilisent pour regrouper les connexions).

23voto

Alex Miller Points 28225

Une chose à prendre en compte est que deux applications Web utiliseront des chargeurs de classe différents. Si vous souhaitez partager des objets, ils doivent utiliser la même version de la classe à partir du même chargeur de classes (sinon vous obtiendrez LinkageErrors). Cela signifie soit de les placer dans un chargeur de classe partagé par les deux applications Web (chemin de classe système, par exemple) OU d'utiliser la sérialisation pour drainer et reconstituer efficacement l'objet dans le chargeur de classe approprié avec la version correcte de la classe.

5voto

Kris Points 8813

Si la webapps sont si étroitement couplé qu'ils ont besoin de partager des objets pourquoi êtes-vous de le diviser en deux? Même si vous gérer un peu indépendamment de toute décent construire le système de gestion doit être en mesure de créer un seul fichier WAR pour le déploiement.

Une solution comme Aaron suggèrent avec JNDI de travail, mais seulement si les deux webapps sont en cours d'exécution sur le même serveur. Si les unités sont étroitement couplés et vous allez être en cours d'exécution sur le même serveur de toute façon ... peut-être un seul de la GUERRE

Si vraiment vous ne voulez indépendants je voudrais examiner sérieusement l'échange de données entre les deux. Idéalement, vous voudriez partager uniquement les données de l'un à l'autre. Ces données peuvent être transmis en arrière par la POSTE (ou le cas échéant) des paramètres, vous pouvez envisager d'utiliser des cookies.

3voto

Ray Hulha Points 1072

Une façon de faire est décrite ici :

0voto

Qazi Points 44

Vous pouvez le faire en prenant le contexte de servlet par votre racine de contexte.

Pour récupérer variable.

 request.getSession().getServletContext().getContext("/{applicationContextRoot}").getAttribute(variableName)
 

Pour la variable de réglage:

 request.getSession().getServletContext().getContext("/{applicationContextRoot}").setAttribute(variableName,variableValue)
 

Remarque: les deux applications doivent être déployées sur le même serveur.

Pls laissez-moi savoir si vous trouvez un problème

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X