ActivitySessions und Transaktionskontexte

Dieser Artikel beschreibt die hierarchische Beziehung zwischen Transaktions- und ActivitySession-Kontexten. Diese Beziehung wird vom Service ActivitySession definiert und erfordert, dass jeder Transaktionskontext sich entweder vollständig innerhalb oder vollständig außerhalb eines ActivitySession-Kontexts befindet.

Ein ActivitySession-Kontext ist einem Transaktionskontext sehr ähnlich und verlängert den Lebenszyklus für die Aktivierung von Enterprise-Beans. Er kann eine oder mehrere Transaktionen umfassen. Der ActivitySession-Kontext ist ein verteilter Kontext, der wie der Transaktionskontext Bean- oder containergesteuert sein kann. Ein ActivitySession-Kontext wird hauptsächlich von einem Client verwendet, um den Lebenszyklus einer von ihm verwendeten Enterprise-Bean zu bestimmen, der entweder über die einzelnen von diesem Client gestarteten Transaktionen hinaus oder bei Fehlen solcher Transaktionen verwendet wird.

ActivitySessions benötigen einen niedrigeren Systemaufwand als Transaktionen und können anstelle von Transaktionen verwendet werden, die lediglich benötigt werden, um den Lebenszyklus einer aufgerufenen Enterprise-Bean zu bestimmen. Für eine Bean mit der Aktivierungsrichtlinie ActivitySession kann die Dauer jeder von dieser Bean gestarteten RMLT (Ressourcenmanager Local Transaction) durch die Dauer der ActivitySession begrenzt sein anstatt durch die Bean-Methode, in der die RMLT gestartet wurde. Auf diese Weise wird Flexibilität erzielt und die Möglichkeit gegeben, RMLTs in einer Enterprise-Bean auch in anderer Weise als in den durch die EJB-Spezifikationen beschriebenen Szenarien einzusetzen. Die EJB-Spezifikationen definieren, dass RMLTs vor dem Ende der Bean-Methode abgeschlossen sein müssen, weil die Bean-Methode die einzige Begrenzung für lokale Transaktionen ist, die in diesen Spezifikationen verfügbar ist.

Die folgenden Regeln legen die Beziehungen zwischen Transaktionen und ActivitySessions fest.
  • Der EJB- oder Web-Container verwendet eine LTC (Local Transaction Containment), falls keine globale Transaktion vorhanden ist. Eine LTC kann für eine Methode oder für eine ActivitySession gelten.
  • Bevor eine Methode zugeteilt wird, stellt der Container sicher, dass immer entweder ein LTC-Kontext oder der Kontext einer globalen Transaktion vorhanden ist, aber niemals beide Kontexte.
  • ActivitySessions dürfen nicht ineinander verschachtelt sein. Jeder Versuch, eine verschachtelte ActivitySession zu starten, verursacht die Ausnahme com.ibm.websphere.ActivitySession.NotSupportedException in UserActivitySession.beginSession().
  • Eine ActivitySession kann eine oder mehrere vollständige globale Transaktionen beinhalten.
  • Die Anwendung kann eine ActivitySession mit einer Operation beenden, die alle Ressourcen zurücksetzt oder einen Markierungspunkt setzt. Die Operation endSession(EndModeCheckpoint) setzt einen Markierungspunkt für die Arbeit, die in der ActivitySession koordiniert wurde, und beendet dann den Kontext. Die Operation endSession(EndModeReset) setzt die Arbeit, die in der ActivitySession koordiniert wurde, auf den letzten Konsistenzpunkt zurück und beendet dann den Kontext.
  • Eine ActivitySession kann weder in einer globalen Transaktion enthalten sein, noch dürfen sich die Grenzen der ActivitySession und der globalen Transaktion überschneiden. Jeder Versuch, eine ActivitySession im Kontext einer globalen Transaktion zu starten, verursacht die Ausnahme com.ibm.websphere.ActivitySession.NotSupportedException in UserActivitySession.beginSession(). Versuche, endSession(EndModeCheckpoint) in einer ActivitySession aufzurufen, die eine unvollständige globale Transaktion enthält, verursachen die Ausnahme com.ibm.websphere.ActivitySession.ContextPendingException. Weder der Kontext der globalen Transaktion noch der ActivitySession-Kontext sind davon betroffen. Wenn endSession(EndModeReset) aufgerufen wird, wird die ActivitySession zurückgesetzt und die globalen Transaktionen werden mit "rollback_only" gekennzeichnet.
  • Jede globale Transaktion, die vollständig in eine ActivitySession eingebunden ist, ist unabhängig von allen anderen globalen Transaktionen in dieser ActivitySession. Das Rollback einer globalen Transaktion hat keine Auswirkungen auf andere globale Transaktionen oder auf die ActivitySession selbst.
  • Der Kontext der ActivitySession und die Kontexte der globalen Transaktionen können koexistieren, wobei eine ActivitySession ein oder mehrere seriell ausgeführte globale Transaktionen beinhalten kann.
  • EJB-Home-Methoden können nicht an einer ActivitySession teilnehmen, weil diese Situation zu Deadlocks führen kann. EJB-Home-Methoden werden in einem eigenen lokalen Transaktionseinschluss ausgeführt.

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cas_ogtlt
Dateiname:cas_ogtlt.html