WSAT-Unterstützung (Web Services Atomic Transaction) im Anwendungsserver
Die Unterstützung für WS-AT (Web Services Atomic Transaction) im Anwendungsserver stellt transaktionsorientierte Servicequalität für die Web-Service-Umgebung bereit. Verteilte Web-Service-Anwendungen und die von ihnen verwendeten Ressourcen können so an verteilten globalen Transaktionen teilnehmen.
- WS-AT ist ein spezieller Koordinierungstyp, der Protokolle für atomare Transaktionen definiert. Es handelt sich dabei um folgenden Spezifikationen:
- Web Services Coordination (WS-COOR)
gibt einen "CoordinationContext" und einen Registrierungsservice an, bei dem sich teilnehmende
Web-Services eintragen können, um die von bestimmten Koordinierungstypen bereitgestellten
Protokolle zu nutzen.
Es handelt sich dabei um folgenden Spezifikationen:
- Web Services Coordination Version 1.0
- Web Services Coordination Version 1.1
- Web Services Coordination Version 1.2
Die WS-AT-Unterstützung ist die Unterstützung für ein Interoperabilitätsprotokoll, das neue Programmierschnittstellen für Transaktionsunterstützung einführt. Die Abgrenzung globaler Transaktionen wird durch die Standardverwendung der Schnittstelle "UserTransaction" von Java™ Transaction API (JTA) durch die Unternehmensanwendung bereitgestellt. Wenn eine Anwendungskomponente, die im Rahmen einer globalen Transaktion ausgeführt wird, eine Web-Service-Anforderung stellt, wird implizit ein "WS-AT CoordinationContext" an den Ziel-Web-Service weitergegeben. Dies geschieht jedoch nur, wenn die entsprechenden Anwendungsimplementierungsdeskriptoren gemäß den Informationen im Artikel zur Konfiguration von Transaktionsimplementierungsattributen konfiguriert wurden.
Wenn der Anwendungsserver das System ist, das den Zielendpunkt für eine Web-Service-Anforderung bereitstellt, die einen "WS-AT CoordinationContext" enthält, dann erzeugt der Anwendungsserver automatisch eine untergeordnete JTA-Transaktion in der Ziellaufzeitumgebung, die zum Transaktionskontext für die Ausführung der Ziel-Web-Service-Anwendung wird.
Die folgende Abbildung zeigt einen Transaktionskontext, den zwei Anwendungsserver gemeinsam für eine Web-Service-Anforderung mit einem "WS-AT-CoordinationContext" verwenden.

![[z/OS]](../images/ngzos.gif)
Sie können die Richtlinien für das Protokoll "WS-AtomicTransaction" konfigurieren. Sie können konfigurieren, ob ein Client einen WS-AT-Kontext weitergibt und ein Server ihn empfängt. Damit sichergestellt ist, dass ein Client immer "WS-AtomicTransaction"-Kontext sendet, wenn er eine abgehende Serviceanforderung stellt, muss dem Client ein Richtliniensatz zugeordnet werden, der den Richtlinientyp "WS-Transaction" enthält, und in diesem Richtlinientyp muss für "WS-AtomicTransaction" die Einstellung "Mandatory" definiert sein. Wenn bekannt ist, dass der Client immer ferne Endpunkte aufruft, für deren Richtlinientyp das Attribut "WS-AtomicTransaction ATAssertion" angegeben ist, können Sie den Client alternativ so konfigurieren, dass er die "WS-Policy"-Konfiguration des Providers anwendet und somit die obligatorische ("mandatory") Richtlinie des Providers automatisch übernimmt.
Damit sichergestellt ist, dass alle Anforderungen, die ein Web-Service-Provider empfängt, "WS-AtomicTransaction"-Kontext enthalten, muss dem Provider ein Richtliniensatz zugeordnet werden, der den Richtlinientyp "WS-Transaction" enthält, und in diesem Richtlinientyp muss für "WS-AtomicTransaction" die Einstellung "Mandatory" definiert sein.
Damit sichergestellt ist, dass ein Client oder Provider niemals "WS-AtomicTransaction"-Kontext verwendet, muss dem Client oder Provider ein Richtliniensatz zugeordnet werden, der den Richtlinientyp "WS-Transaction" enthält, und in diesem Richtlinientyp muss für "WS-AtomicTransaction" die Einstellung "Never" definiert sein. Diese Konfiguration kann in Umgebungen verwendet werden, in denen aufgrund der Web-Service-Anforderungen keine starre Verbindung zwischen einem Client und einem Provider erzeugt werden soll, z. B. bei Anforderungen zwischen Unternehmen.
Ist einem Client oder Provider kein Richtliniensatz zugeordnet oder ist der Richtlinientyp "WS-Transaction" nicht im Richtliniensatz enthalten, wird das Standardverhalten von "WS-Transaction" verwendet.
Einschränkungen für die WS-AT-Unterstützung
In dieser Version des Anwendungsservers können WS-AT-Kontexte nicht von einem nicht wiederherstellbaren Clientprozess gestartet werden.
Es ist nicht gewährleistet, dass Verarbeitungsaufträge für dieselbe
WS-AT-Transaktion, die an einen Server-Cluster gesendet werden, immer demselben Cluster-Member zugeordnet werden.
Die Verarbeitungsaufträge für eine Transaktion können von mehreren Cluster-Membern bearbeitet werden.
Wenn transaktionsorientierte Verarbeitungsaufträge mehrerer Cluster-Member um dieselbe Transaktionsressource konkurrieren,
können sie sich gegenseitig sperren.
Anwendungsdesign
WS-AT ist ein Transaktionsprotokoll mit zweiphasiger Festschreibung und nur für kurze Transaktionen geeignet.
Eine atomare Transaktion koordiniert Ressourcenmanager, die Transaktionsaktualisierungen durch Transaktionssperren für Ressourcen isolieren. Daher sollten WS-AT-Transaktionen generell nicht auf Unternehmensdomänen verteilt werden. Unternehmensübergreifende Transaktionen erfordern gewöhnlich eine weniger streng definierte Semantik als die zweiphasige Festschreibung. In solchen Szenarien kann die Verwendung einer kompensierenden Geschäftstransaktion, z. B. im Rahmen einers BPEL-Prozesses (Business Process Execution Language) oder über Web Services Business Activity (WS-BA), die geeignetere Lösung sein.
WS-AT wird am besten für die Verteilung des Transaktionskontextes auf Web-Services verwendet, die innerhalb eines Unternehmens implementiert sind. Der Transaktionskontext wird nur von den Nachrichtenaustauschmustern in Anforderungs- und Antwortnachrichten transportiert, da der Urheber einer Transaktion (Anwendung oder Container) sicher sein muss, dass alle im Rahmen dieser Transaktion ausgeführten Geschäftsaufgaben abgeschlossen sind, bevor er die Beendigung einer Transaktion anfordert. Von einer unidirektionalen Anforderung aufgerufene Web-Services werden nie im Rahmen der Transaktion des anfordernden Clients ausgeführt.
Die Auswirkung von Servicefehlern in WS-AT-Transaktionen ist ähnlich wie die in der EJB-Spezifikation (Enterprise JavaBeans) beschriebe Auswirkung von EJB-Anwendungsausnahmen bei Transaktionen Wenn ein Service, der unter der WS-AT-Transaktion eines Requesters ausgeführt wird, einen Fehler zurückgibt, wird die Transaktion vom Anwendungsserver nicht automatisch als "rollback-only" (nur Rollback) gekennzeichnet. Die Ausnahmebehandlungsroutine des Requesters bestimmt, ob die Transaktion fortgesetzt werden kann und ob die Transaktion als "rollback-only" gekennzeichnet werden soll. Wenn der Requester im Anwendungsserver ausgeführt wird, können die Standard-JTA- oder -EJB-APIs verwendet werden, um die Transaktion als "rollback-only" zu kennzeichnen. Die Servicekomponente, die den Fehler generiert, kann die Transaktion auch selbst als "rollback-only" kennzeichnen, bevor sie den Fehler zurückgibt. Wenn die Implementierung der Servicekomponente eine Systemausnahme feststellt, erlaubt sie in der Regel dem Container die Behandlung der Ausnahme. Die Container des Anwendungsservers kennzeichnen jeden empfangenen Transaktionskontext automatisch als "rollback-only", wenn sie eine Systemausnahme behandeln, die von einer Serviceimplementierung generiert wurde.
Anwendungsentwicklung
Für Web-Service-Anwendungen, die WS-AT nutzen sollen, sind keine speziellen Entwicklungsschritte notwendig.
Für JAX-RPC-Anwendungen (Java API for XML-based RPC) gibt es verschiedene Anwendungsimplementierungsdeskriptoren, die Sie entsprechend den Informationen im Artikel zur Konfiguration von Transaktionsimplementierungsattributen setzen müssen. Die Laufzeit von JAX-RPC unterstützt WS-AT 1.0.
Aktivieren Sie für JAX-WS-Anwendungen (Java API for XML-Based Web Services) die WS-AT-Unterstützung. Erstellen Sie dazu einen Richtliniensatz, fügen Sie dem Richtliniensatz den Richtlinientyp "WS-Transaction" hinzu, wobei Sie den Richtlinientyp optional konfigurieren können, und ordnen Sie den Richtliniensatz der Anwendung oder dem Client zu, die bzw. der für die WS-AT-Kommunikation verwendet wird. Die Laufzeit von JAX-WS unterstützt WS-AT 1.0, WS-AT 1.1, WS-AT 1.2 und die "WS-Policy"-Zusicherung für WS-AT.
Wenn die Laufzeit von JAX-WS eine eingehende Anforderung empfängt, werden beide Spezifikationsstufen, WS-Transaction 1.0, WS-Transaction 1.1 und WS-Transaction 1.2, unterstützt. Wenn eine abgehende JAX-WS-Anforderung gesendet wird, kann nur eine Spezifikationsstufe verwendet werden. Wenn "WS-Transaction-WS-Policy"-Zusicherungen verfügbar sind (entweder aus der WSDL (Web Services Description Language) des Ziel-Web-Service oder aus dem "WS-Transaction"-Richtlinientyp auf dem Client), dann wird die Spezifikationsstufe verwendet, die für den Client auf dem Ziel-Web-Service gilt. Beispiel: Wenn die Hosting-Umgebung des Ziel-Web-Service nur WS-Transaction 1.0 unterstützt, wird WS-AT 1.0 verwendet. Wenn beide Spezifikationsstufen anwendbar sind oder wenn keine "WS-Transaction-WS-Policy"-Zusicherungen verfügbar sind, wird die "WS-Transaction"-Standardspezifikationsstufe verwendet, die in den Einstellungen des des Transaktionsservice definiert ist.
- Wenn ein Client die Richtlinie des Providers nicht berücksichtigt, sendet er keinen "WS-AT"-Kontext (Web Services Business Activity) oder "WS-BA"-Kontext (Web Services Business Activity). Dieses Verhalten entspricht der Einstellung "Never" für die Richtlinie "WS-Transaction".
- Wenn ein Client die Richtlinie des Providers berücksichtigt, sendet er einen "WS-AT"- oder "WS-BA"-Kontext, wenn die Richtlinie des Providers "WS-AT"- oder "WS-BA"-Zusicherungen enthält. Dieses Verhalten entspricht der Einstellung "Supports" für die Richtlinie "WS-Transaction".
- Ein Server empfängt keinen "WS-AT"- oder "WS-BA"-Kontext. Dieses Verhalten entspricht der Konfigurationseinstellung "Never" für die Richtlinie "WS-Transaction".
Anwendungsentwickler müssen WS-AT-Nutzer nicht explizit registrieren. Die Laufzeit des Anwendungsservers registriert die WS-AT-Nutzer auf dieselbe Weise wie die XAResources in der JTA-Transaktion, in die die WS-AT-Transaktion eingebunden wird. Bei Beendigung der Transaktion koordiniert der Transaktionsservice des Anwendungsservers alle XAResources und WS-AT-Nutzer atomar.
Wenn zum Zeitpunkt einer Web-Service-Anwendungsanforderung in dem Thread eine JTA-Transaktion aktiv ist, wird die Transaktion in der Web-Service-Anforderung weitergegeben und in der Zielumgebung erstellt. Dieser Prozess verläuft ähnlich wie die Verteilung des Transaktionskontextes über IIOP, der in der EJB-Spezifikation beschrieben ist. Alle in der Zielumgebung ausgeführten Transaktionsschritte werden Bestandteil einer globalen Transaktion.
WS-Transaction-Richtlinienzusicherungen
Die Konfiguration der Richtlinien für das Protokoll "WS-Transaction" für einen Provider wirkt sich auf die Zusicherungen aus, die in einer WSDL enthalten sind, die für den Web-Service generiert wird, dem der Richtlinientyp zugeordnet ist. Die "WS-Policy"-Zusicherung, die die Transaktionsanforderungen eines Clients oder Providers beschreibt, der "WS-AtomicTransaction" verwendet, lautet "ATAssertion". Wenn der Richtlinientyp "WS-Transaction" die "WS-AtomicTransaction"-Einstellung "Mandatory" oder "Supports" verwendet, wird eine Richtlinienzusicherung in die WSDL aufgenommen.
Der Anwendungsserver kann diese Zusicherungen, die in der von ihm analysierten WSDL enthalten sind, außerdem parsen, interpretieren und anwenden.
Das folgende Beispiel zeigt eine WDSL, in der "WS-AtomicTransaction ATAssertion" angibt, dass ein Endpunkt mit dem in der Anforderungsnachricht enthaltenen "WS-AT"-Kontext aufgerufen werden muss und dass der Kontext im Format WS-Transaction 1.0 oder 1.1 vorliegen kann. Es gibt zwei Namespaces und zwei Zusicherungen: eine für jede "WS-Transaction"-Spezifikationsstufe, wobei der "WS-Policy"-Operator "ExactlyOne" verwendet wird, um anzuzeigen, dass der Client eine Spezifikationsstufe auswählen muss.
<wsdl:definitions targetNamespace="bank.example.com"
xmlns:tns="bank.example.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat11="http://docs.oasis-open.org/ws-tx/wsat/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsat"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="ATPolicy">
<wsp:ExactlyOne>
<wsat11:ATAssertion />
<wsat10:ATAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#ATPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>