Modell für die Verwendung von ActivitySessions mit HTTP-Sitzungen
In diesem Artikel wird beschrieben, wie eine Webanwendung, die im WebSphere-Webontainer ausgeführt wird, an einem ActivitySession-Kontext teilnehmen kann.
Ist die Webanwendung so definiert, dass mehrere Servletaufrufe als Teil derselben logischen Anwendung ausgeführt werden, dann können die Servlets die HttpSession verwenden, um den Status servletübergreifend beizubehalten. Der ActivitySession-Kontext ist ein Status, der in der HttpSession zurückgestellt und bei einem späteren Aufruf des Servlets, das auf die HttpSession zugreift, wieder aufgenommen werden kann.
Eine ActivitySession wird automatisch einer HttpSession zugeordnet, und kann dazu verwendet werden, den Zugriff auf die ActivitySession über mehrere HTTP-Aufrufe hinweg sowie über das Einschließen oder Weiterleiten von Servlets hinweg zu erweitern und um EJB-Aktivierungsperioden (Enterprise JavaBeans) zu unterstützen, die durch den Lebenszyklus des Web-HTTP-Clients festgelegt sein können. Ein in einer HttpSession gespeicherter ActivitySession-Kontext kann außerdem dazu verwendet werden, die Arbeit für die ActivitySession an einen bestimmten Web-HTTP-Client zurück zu verweisen.
- Der Web-Container startet und beendet ActivitySessions.Die Webanwendung ruft ein Servlet auf, das für die Containersteuerung von ActivitySessions konfiguriert wurde.
- Ist eine HttpSession vorhanden, dann ist ihr eine ActivitySession zugeordnet.
- Ist keine HttpSession vorhanden, kann das Servlet eine HttpSession starten, wodurch automatisch eine ActivitySession gestartet und der HttpSession zugeordnet wird.
Ein Servlet kann keine neue HttpSession starten, bevor eine vorhandene HttpSession beendet wurde. Innerhalb einer HttpSession kann die Webanwendung andere Servlets aufrufen, die den zugeordneten ActivitySession-Kontext verwenden können. Wenn die Webanwendung ein Servlet aufruft, das die HttpSession beendet, wird die ActivitySession automatisch beendet. Dies ist im folgenden Diagramm dargestellt:
Abbildung 1. Steuerung von ActivitySessions durch den Web-Container. Diese Abbildung wird im Begleittext beschrieben. - Die Webanwendung startet und beendet ActivitySessions.Die Webanwendung ruft ein Servlet auf, das für die Anwendungssteuerung von ActivitySessions konfiguriert wurde.
- Ist eine HttpSession vorhanden und ist ihr eine ActivitySession zugeordnet, dann kann das Servlet diesen ActivitySession-Kontext verwenden oder beenden.
- Ist keine HttpSession vorhanden, kann das Servlet eine HttpSession starten, dadurch wird jedoch nicht automatisch eine ActivitySession gestartet.
- Ist eine HttpSession vorhanden, der jedoch keine ActivitySession zugeordnet ist, kann das Servlet eine neue ActivitySession starten. Dadurch wird diese ActivitySession automatisch der HttpSession zugeordnet. Die ActivitySession bleibt so lange erhalten, bis sie explizit beendet wird oder bis die HttpSession beendet wird.
Das Servlet kann keine neue ActivitySession starten, bevor eine vorhandene ActivitySession beendet wurde. Außerdem kann das Servlet keine neue HttpSession starten, bevor eine vorhandene HttpSession beendet wurde.
Innerhalb einer HttpSession kann die Webanwendung andere Servlets aufrufen, die einen vorhandenen ActivitySession-Kontext verwenden oder beenden können oder die eine neue ActivitySession starten können, falls keine ActivitySession vorhanden ist. Wenn die Webanwendung ein Servlet aufruft, das die HttpSession beendet, wird die ActivitySession automatisch beendet. Dies ist im folgenden Diagramm dargestellt:
Abbildung 2. Steuerung von ActivitySessions durch die Webanwendung. Diese Abbildung wird im Begleittext beschrieben.
Eine Webanwendung kann Servlets aufrufen, die für eines dieser Verwendungsmodelle konfiguriert wurden.
Die folgenden Punkte gelten für beide Verwendungsmodelle:
- Zum Beenden einer HttpSession (und der zugeordneten ActivitySession) muss diese Session von der Webanwendung ungültig gemacht werden. Dies bewirkt, dass die Prüfpunkte der ActivitySession untersucht werden.
- Alle untergeordneten enterprise, die im Kontext einer ActivitySession aktiviert wurden, können im Hauptspeicher verbleiben, anstatt zwischen den Servletaufrufen inaktiviert zu werden, weil der Client zum Web-HTTP-Client wird.
- Webanwendungen können sich aus vielen Servlets zusammensetzen, und jedes Servlet in der Webanwendung kann mit einem Wert für ActivitySessionControl konfiguriert werden. ActivitySessionControl bestimmt, ob das Servlet oder sein Container ActivitySessions startet.
- Ein ActivitySession-Kontext, in den der Kontext einer aktiven Transaktion eingebunden ist, kann keiner HttpSession zugeordnet werden, weil eine Transaktion Datenbanksperren enthalten kann und per Definition eine kurze Lebensdauer besitzen sollte. Falls eine Anwendung eine aktive Transaktion in eine HttpSession versetzt, wird die Transaktion rückgängig gemacht (Rollback) und die ActivitySession wird in der HTTPSession ausgesetzt. Im Allgemeinen sollten Sie Anwendungen so entwerfen, dass sie ActivitySessions oder andere Konstrukte als langlebige Entitäten verwenden und darin ACID-Transaktionen als kurzlebige Entitäten verwenden.
- Einer HttpSession darf während der gesamten Dauer der ActivitySession jeweils nur eine ActivitySession zugeordnet sein. Eine ActivitySession, die einer HttpSession zugeordnet ist, bleibt dieser HttpSession während der gesamten Dauer der ActivitySession zugeordnet und kann erst nach ihrer Beendigung durch eine andere ActivitySession ersetzt werden. Auf die ActivitySession können mehrere Servlets zugreifen, falls diese Servlets gemeinsamen Zugriff auf die HttpSession besitzen.
- ActivitySessions sind nicht persistent. Falls eine persistente HttpSession länger existiert als der Server, auf dem sie läuft, werden beim Beenden des entsprechenden Servers alle zwischengespeicherten ActivitySessions beendet.
- Falls das Zeitlimit für die HttpSession abläuft, bevor die zuhörige ActivitySession beendet ist,
wird die ActivitySession zurückgesetzt1. Damit werden die ActivitySession-Ressourcen auf den letzten Konsistenzzustand
zurückgesetzt:
- Wenn die Webanwendung ein Servlet aufruft, das für die Containersteuerung von ActivitySessions konfiguriert ist, werden die ActivitySession-Ressourcen vollständig zurückgesetzt.
- Wenn die Webanwendung ein Servlet aufruft, das für die Anwendungssteuerung von ActivitySessions konfiguriert ist, werden die ActivitySession-Ressourcen auf den letzten vom Servlet durchgeführten Prüfpunkt bzw. vollständig zurückgesetzt, falls kein Prüfpunkt verwendet wurde.
- Falls das Zeitlimit der ActivitySession abläuft, wird sie bei Beendigung der HttpSession auf den letzten Konsistenzzustand (siehe vorheriger Punkt) zurückgesetzt.