LCT (Local Transaction Containment)

IBM® WebSphere Application Server unterstützt lokale Transaktionseinschlüsse (LTC, Local Transaction Containment), die Sie über die erweiterten Implementierungsdeskriptoren lokaler Transaktionen konfigurieren können. Die Unterstützung lokaler Transaktionseinschlüsse bietet Anwendungsprogrammierern bestimmte Vorteile. Verwenden Sie die bereitgestellten Szenarien und die Liste der zu beachtenden Punkte, um sich für die beste Methode für die Konfiguration der Transaktionsunterstützung für lokale Transaktionen zu entscheiden.

In den folgenden Abschnitten sind die Vorteile der LTC-Unterstützung beschrieben. Außerdem wird erläutert, wie die erweiterten Implementierungsdeskriptoren für lokale Transaktionen in jeder Situation definiert werden.

Sie können eine Enterprise-Bean oder ein Servlet entwickeln, die bzw. das auf eine oder mehrere voneinander unabhängige Datenbanken zugreift und keine Koordination erfordert.
Wenn eine Enterprise-Bean keine globalen Transaktionen erfordert, ist es oft wirksamer, das Attribut "Transaktion" des Implementierungsdeskriptors für Containertransaktionen auf "Nicht unterstützt" anstatt auf "Erforderlich" zu setzen und die Bean mit diesen Einstellungen zu implementieren.

Mit der erweiterten Unterstützung für lokale Transaktionen des Anwendungsservers sind Anwendungen in der Lage, dieselbe Geschäftslogik in einem nicht angegebenen Transaktionskontext und in einer globalen Transaktion auszuführen. Beispielsweise wird eine Enterprise-Bean in einem nicht angegebenen Transaktionskontext ausgeführt, wenn sie mit dem Containertransaktionsattribut "Nicht unterstützt" oder "Nie" implementiert wird.

Die erweiterte Unterstützung für lokale Transaktionen stellt containergesteuerte, implizite Grenzen für lokale Transaktionen dar, innerhalb derer der Container Anwendungsaktualisierungen festschreibt und die zugehörigen Verbindungen bereinigt. Anwendungen können damit unabhängiger von Implementierungsproblemen gestaltet werden. Dadurch wird die Verwendung des Containertransaktionsattributs "Unterstützt" wesentlich einfacher, z. B., wenn die Geschäftslogik mit einem oder ohne einen globalen Transaktionskontext aufgerufen werden kann.

Eine Anwendung kann für die Verbindungsbelegung ein get-use-close-Muster verwenden, unabhängig davon, ob die Anwendung in einer Transaktion ausgeführt wird. Die Anwendung hängt möglicherweise davon ab, dass der close-Befehl auf dieselbe Weise ausgeführt wird und keine ROLLBACK-Operation für die Verbindung auslöst, wenn keine globale Transaktion vorhanden ist.

Es gibt viele Szenarien, in denen die ACID-Koordination mehrerer Ressourcenmanager nicht erforderlich ist. In diesen Szenarien empfiehlt es sich, Geschäftslogik unter einer Transaktionsrichtlinie mit dem Wert "Nicht unterstützt" und nicht "Erforderlich" auszuführen. Dazu muss der Implementierungsdeskriptor im Abschnitt "Lokale Transaktionen" des Attributs "Resolver" auf "ContainerAtBoundary" gesetzt werden. Mit dieser Einstellung werden Anwendungsinteraktionen mit Ressourcenprovidern, z. B. Datenbanken, in impliziten RMLTs (Resource Manager Local Transactions) verwaltet, die vom Container gestartet und beendet werden. Der Container schreibt die RMLTs am Einschlussgrenzwert fest, der vom Attribut "Grenze" im Abschnitt "Lokale Transaktionen", z. B. am Ende einer Methode, angegeben wird. Wenn die Anwendung über eine Ausnahme die Steuerung an den Container zurückgibt, setzt der Container alle gestarteten RMLTs zurück.

Diese Verwendung gilt für Servlets und Enterprise-Beans.

Sie können lokale Transaktionen in einer verwalteten Umgebung verwenden, in der eine Bereinigung gewährleistet ist.
Anwendungen, die RMLTs steuern, d. h., explizit starten und beenden möchten, können für den erweiterten Implementierungsdeskriptor für den "Resolver" im Abschnitt "Lokale Transaktionen" die Standardeinstellung "Anwendung" verwenden. In diesem Fall stellt der Container sicher, dass die Verbindungsbereinigung beim Grenzwert des lokalen Transaktionskontexts erfolgt.

Java™-Spezifikationen für Unternehmensanwendungen beschreiben die Verwendung lokaler Transaktionen durch Anwendungen anhand der Standardeinstellungen "Anwendung" für den erweiterten Implementierungsdeskriptor für den Resolver und "Rollback" für den erweiterten Implementierungsdeskriptor für die nicht aufgelöste Aktion im Abschnitt "Lokale Transaktionen". Wenn der erweiterte Implementierungsdeskriptor "Lokale Transaktionen - Nicht aufgelöste Aktion" auf "Festschreiben" gesetzt ist, schreibt der Container alle RMLTs fest, die die Anwendung startet, die aber nicht abgeschlossen werden, wenn der lokale Transaktionseinschluss endet (z. B. wenn die Methode endet). Diese Verwendung gilt für Servlets und Enterprise-Beans.

[AIX Solaris HP-UX Linux Windows][IBM i]Sie können die Dauer einer lokalen Transaktion über die Dauer einer EJB-Komponentenmethode hinweg erweitern.
[AIX Solaris HP-UX Linux Windows][IBM i]Die EJB-Spezifikationen (Enterprise JavaBeans) schränken die Verwendung von RMLTs auf einzelne EJB-Methoden ein. Diese Einschränkung besteht, weil die Spezifikation über den containerbasierten Methodengrenzwert hinaus, bis zu dem ein RMLT erweitert werden kann, keine Einheit für die Zuteilung besitzt. Sie können die erweiterte Implementierungseinstellung "Lokale Transaktionen - Grenze" verwenden, um die folgenden Vorteile nutzen zu können:
  • Den Einsatzbereich von RMLTs wesentlich erweitern
  • Mit einphasigen Ressourcenmanagern kommunizieren. Die Kommunikation wird über die ActivitySession-Unterstützung ermöglicht.

Sie können eine ActivitySession verwenden, um einen verteilten Kontext bereitzustellen, der über die Grenzen einer einzelnen Methode hinausgeht. Sie können die Verwendung von RMLTs über die ActivitySession hinaus erweitern und diese Erweiterung über einen Client steuern. Durch die Verwendung des ActivitySession-Bereichs erreichen Sie, dass verteilte Transaktionen seltener verwendet werden müssen, wenn ACID-Operationen für mehrere Ressourcen nicht erforderlich sind. Diesen Vorteil können Sie nutzen, indem Sie die erweiterte Implementierungseinstellung "Lokale Transaktionen - Grenze" auf den Wert "ActivitySession" setzen. Diese erweiterten RMLTs können von der Anwendung gesteuert oder vom Container verwaltet werden, je nach Einstellung des Implementierungsdeskriptors für den Resolver im Abschnitt "Lokale Transaktionen".

Sie können mehrere einphasige Ressourcenmanager koordinieren.
Für Ressourcenmanager, die die Koordination von XA-Transaktionen nicht unterstützen, kann ein Client Kontexte für lokale Transaktionen, die sich auf ActivitySessions beziehen, nutzen. Diese Kontexte ermöglichen einem Client, die Abschlussrichtung der Ressourcenaktualisierungen über die Ressourcenmanager ähnlich wie bei tranaktionalen Ressourcenmanagern zu steuern. Ein Client kann eine ActivitySession starten und deren Entity-Beans in diesem Kontext aufrufen. Diese Beans können ihre RMLTs in dieser ActivitySession ausführen und zurückgeben, ohne die RMLTs abzuschließen. Der Client kann später die ActivitySession mit einer COMMIT-Operation oder ROLLBACK-Operation abschließen und den Container veranlassen, für die auf die ActivitySession bezogenen RMLTs dieselbe Operation auszuführen.
Sie können gemeinsam nutzbare LTCs verwenden, um die Anzahl erforderlicher Verbindungen zu reduzieren.
LTCs können von Anwendungskomponenten gemeinsam genutzt werden. Wenn Komponenten Verbindungen zu demselben Ressourcenmanager abrufen, können Sie diese Verbindung gemeinsam nutzen, wenn sie in derselben globalen Transaktion oder in demselben gemeinsam genutzten lokalen Transaktionseinschluss ausgeführt werden. Wenn Sie zwei Komponenten konfigurieren möchten, die in demselben gemeinsam nutzbaren lokalen Transaktionseinschluss ausgeführt werden sollen, setzen Sie das Attribut "Shareable" im Abschnitt "Lokale Transaktionen" des Implementierungsdeskriptors jeder Komponente. Stellen Sie sicher, dass die Ressourcenreferenzen in den Implementierungsdeskriptoren der beiden Komponenten den Standardwert "Shareable" für das Element "res-sharing-scope" verwenden, falls dieses Element angegeben ist. Ein gemeinsam nutzbarer lokaler Transaktionseinschluss kann die Anzahl der RMLTs eines Anwendungsservers reduzieren. Eine Anwendung, die beispielsweise häufig Include-Aufrufe für Webmodule absetzt, kann für diese Webmodule gemeinsam genutzte Ressourcenmanagerverbindungen verwenden, gemeinsam nutzbare lokale Transaktionseinschlüsse oder eine globale Transaktion verwenden und damit Ressourcenzugriffskonflikte verringern.

Beispiele für Konfigurationen mit Unterstützung lokaler Transaktionen

Die folgende Liste enthält einige Szenarien, in denen lokale Transaktionen verwendet werden, und nennt Aspekte, die berücksichtigt werden sollten, wenn die beste Methode zum Konfigurieren der Transaktionsunterstützung für eine Anwendung bestimmt wird.

  • Sie möchten globale Transaktionen explizit in der Anwendung starten und beenden (BMT-Session-Beans (Bean-Managed Transaktion, Bean-gesteuerte Transaktion) und Servlets).

    Setzen Sie für Session-Beans den Transaktionstyp im Implementierungsdeskriptor der Komponente auf "Bean" (für die Verwendung von Bean-gesteuerten Transaktionen). Für Servlets ist dieser Vorgang nicht erforderlich.

  • [AIX Solaris HP-UX Linux Windows][IBM i]Sie möchten in einer Methode nur auf eine XA- bzw. eine Nicht-XA-Ressource zugreifen.

    Dazu muss das Attribut "Resolver" im Implementierungsdeskriptor der Komponente im Abschnitt "Lokale Transaktionen" auf "ContainerAtBoundary" gesetzt werden. Setzen Sie im Abschnitt "Containertransaktionen" den Containertransaktionstyp auf "Unterstützt".

  • Sie möchten über eine oder mehrere Bean-Methoden auf verschiedene XA-Ressourcen zugreifen.

    Dazu muss der Implementierungsdeskriptor der Komponente im Abschnitt "Containertransaktionen" auf "Erforderlich", "Erfordert neue(n)" oder "Verbindlich" gesetzt werden.

  • [AIX Solaris HP-UX Linux Windows][IBM i]Sie möchten auf mehrere Nicht-XA-Ressourcen in einer Methode zugreifen, ohne eigene lokale Transaktionen zu verwalten.

    Dazu muss das Attribut "Resolver" im Implementierungsdeskriptor der Komponente im Abschnitt "Lokale Transaktionen" auf "ContainerAtBoundary" gesetzt werden. Setzen Sie im Abschnitt "Containertransaktionen" den Containertransaktionstyp auf "Nicht unterstützt".

  • Sie möchten in einer Methode auf verschiedene Nicht-XA-Ressourcen zugreifen und diese unabhängig voneinander verwalten.

    Dazu muss im Implementierungsdeskriptor der Komponente im Abschnitt "Lokale Transaktionen" das Attribut "Resolver" auf "Anwendung" und das Attribut "Nicht aufgelöste Aktion" auf "Rollback" gesetzt werden. Setzen Sie im Abschnitt "Containertransaktionen" den Containertransaktionstyp auf "Nicht unterstützt".

  • [AIX Solaris HP-UX Linux Windows][IBM i]Sie möchten auf eine oder mehrere Nicht-XA-Ressourcen in mehreren EJB-Methodenaufrufen zugreifen, ohne eigene lokale Transaktionen zu verwalten.

    Dazu muss im Implementierungsdeskriptor der Komponente im Abschnitt "Lokale Transaktionen" das Attribut "Resolver" auf "ContainerAtBoundary" und das Attribut "Grenze" auf "ActivitySession" gesetzt werden. Setzen Sie im Abschnitt "Bean-Cache" das Attribut "Aktivieren um" auf "ActivitySession". Setzen Sie den Containertransaktionstyp im Abschnitt "Containertransaktionen" auf "Nicht unterstützt" und das Attribut "ActivitySessionKind" auf "Erforderlich", "Erfordert neue(n)" oder "Verbindlich".

  • [AIX Solaris HP-UX Linux Windows][IBM i]Sie möchten über mehrere EJB-Methoden auf verschiedene Nicht-XA-Ressourcen zugreifen und diese unabhängig voneinander verwalten.

    Setzen Sie im Implementierungsdeskriptor der Komponente im Abschnitt "Lokale Transaktionen" das Attribut "Resolver" auf "Anwendung" und das Attribut "Grenze" auf "ActivitySession". Setzen Sie im Abschnitt "Bean-Cache" das Attribut "Aktivieren um" auf "ActivitySession". Setzen Sie den Containertransaktionstyp im Abschnitt "Containertransaktionen" auf "Nicht unterstützt" und das Attribut "ActivitySessionKind" auf "Erforderlich", "Erfordert neue(n)" oder "Verbindlich".

  • [z/OS] Sie möchten eine Nicht-XA-Ressource mit mehreren zweiphasigen RRS-Ressourcen verwenden.

    Eine Nicht-XA-Ressource in einer Transaktion mit RRS-Ressourcen wird immer unterstützt, wenn eine globale Transaktion aktiv ist. Eine globale Transaktion ist aktiv, wenn der Implementierungsdeskriptor für den Containertransaktionstyp auf "Unterstützt", "Erforderlich", "Erfordert neue(n)" oder "Verbindlich" gesetzt wurde. Globale Transaktionen sind auch für komponentengesteuerte Implementierungsvorgänge aktiv. Der Container verwaltet die Ausführung der lokalen Transaktion für die Nicht-XA-Ressource zusammen mit den RRS-Ressourcen.


Symbol, das den Typ des Artikels anzeigt. Referenzartikel



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