WS-BA-Unterstützung (Web Services Business Activity) im Anwendungsserver
Mit der WS-BA-Unterstützung (Web Services Business Activity) können Web-Services auf unterschiedlichen Systemen Aktivitäten koordinieren, die loser gekoppelt sind als atomare Transaktionen. Solche Aktivitäten können möglicherweise nur schwer oder gar nicht rückgängig gemacht werden und erfordern im Falle eines Fehlers einen Kompensationsprozess.
- WS-BA ist ein spezieller Koordinierungstyp, der Protokolle für Geschäftsaktivitäten 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
Zusätzlich zur Unterstützung des WS-BA-Interoperabilitätsprotokolls stellt der Anwendungsserver eine Programmierschnittstelle zum Erstellen von Geschäftsaktivitäten und Kompensationshandlern bereit. Mit dieser Programmierschnittstelle können Sie Kompensationsdaten angeben und den Status einer Geschäftsaktivität überprüfen oder ändern.
Sie können diese Kompensationsfunktion auch mit Anwendungen verwenden, die keine Web-Services sind, so lange diese Anwendungen ausschließlich die Kommunikation zwischen WebSphere Application Servern betreffen. Weitere Informationen finden Sie in den zugehörigen Artikeln.
Sie können die Richtlinien für das Protokoll "WS-BusinessActivity" konfigurieren. Sie können konfigurieren, ob ein Client einen "WS-BA"-Kontext weitergibt und ein Server ihn empfängt. Damit sichergestellt ist, dass ein Client immer "WS-BusinessActivity"-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-BusinessActivity" die Einstellung "Mandatory" definiert sein. Wenn bekannt ist, dass der Client immer ferne Endpunkte aufruft, für deren Richtlinientyp das Attribut "WS-BusinessActivity BAAtomicOutcomeAssertion" 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-BusinessActivity"-Kontext enthalten, muss dem Provider ein Richtliniensatz zugeordnet werden, der den Richtlinientyp "WS-Transaction" enthält, und in diesem Richtlinientyp muss für "WS-BusinessActivity" die Einstellung "Mandatory" definiert sein.
Damit sichergestellt ist, dass ein Client oder Provider niemals "WS-BusinessActivity"-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-BusinessActivity" 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.
Anwendungsentwicklung
Für Web-Service-Anwendungen, die "WS-BA" nutzen sollen, sind keine speziellen Entwicklungsschritte notwendig.
Für JAX-RPC-Anwendungen (Java API for XML-based RPC) gibt jede EJB-Komponente (JavaBeans), die für die Konfiguration in einem BusinessActivity-Geltungsbereich konfiguriert ist, diesen Geltungsbereich automatisch weiter, wenn sie eine abgehende JAX-RPC-Web-Service-Anforderung tätigt. Die Laufzeit von JAX-RPC unterstützt WS-BA 1.0.
Aktivieren Sie für JAX-WS-Anwendungen (Java API for XML-Based Web Services) die WS-BA-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, der für die WS-BA-Kommunikation verwendet wird. Die Laufzeit von JAX-WS unterstützt WS-BA 1.0, WS-BA 1.1, WS-BA 1.2 und die "WS-Policy"-Zusicherung für WS-BA.
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-BA 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 Service Atomic Transaction) oder "WS-BA"-Kontext. Dieses Verhalten entspricht der Konfigurationseinstellung "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 Konfigurationseinstellung "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".
WS-Transaction-Richtlinienzusicherungen
Die Konfiguration der Richtlinien für das Protokoll "WS-BusinessActivity" 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 Kompensationsanforderungen eines Clients oder Providers beschreibt, der "WS-BusinessActivity" verwendet, lautet "BAAtomicOutcomeAssertion". Wenn der Richtlinientyp "WS-Transaction" die "WS-BusinessActivity"-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-BusinessActivity BAAtomicOutcomeAssertion" angibt, dass ein Endpunkt mit dem in der Anforderungsnachricht enthaltenen "WS-BA"-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/wsba/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsba"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="BAPolicy">
<wsp:ExactlyOne>
<wsat11:BAAtomicOutcomeAssertion />
<wsat10:BAAtomicOutcomeAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#BAPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>