HttpSession über mehrere Webapplikationen?

Webapplikationen können über die HttpSession keine Daten austauschen, da eine HttpSession immer an einen ServletContext gebunden ist. Wenn eine Webapplikation eine andere Webapplikation über den RequestDispatcher inkludiert, wird zwar eine Session mit der gleichen(!) SessionID erzeugt, es sind aber effektiv zwei HttpSession Objekte vorhanden.
Vergleiche Servlet Specification 2.4. (Kapitel 15.1.7)

Session information is scoped only to the current web application
(ServletContext), so information stored in one context will not be directly visible
in another.

Auch für JSR 168-konforme Portlets gelten diese Restriktionen. So konnen Portlets nur innerhalb der gleichen PortletApplication gemeinsame Daten austauschen. (Eine PortletApplication wird mit Hilfe einer Webapplikation realisiert). Diese Restriktion soll mit JSR 286 aufgehoben werden. Im Early Draft Review werden sogenannte “Shared Session Attribute” vorgestellt. Hier definiert der Portlet-Entwickler die gemeinsamen Session Attribute in der portlet.xml. Das JAXB Framework (Java Architecture for XML Binding) wird verwendet, um den Typ des Session Attributes zu beschreiben. Konkret bedeutet dass, das die Klasse für das Shared Attribut mit JAXB Annotations versehen wird. So kann das Attribut auch in anderen VMs ausgelesen werden, da die Klasse mit Hilfe von JAXB wieder zusammengebaut wird (Stichwort “marshalling”).

Comments are closed.