Frage

Was passiert, wenn zwischen den Aufrufen zweier Methoden eine Ausnahme ausgelöst wird?Wenn die Webdienste nicht aufgerufen werden, wird die Transaktion rückgängig gemacht und es entsteht kein Schaden.Der Webdienst führt jedoch kein Rollback durch.Natürlich gibt es auch bei einem einzelnen Webdienst ein Problem.Obwohl dies eine allgemeine Frage ist, bin ich an Lösungen interessiert, die mit EJB-Session-Beans zu tun haben.

Eine einfache und individuelle Antwort wäre, dem Webdienst für jede Methode mit „echter Funktionalität“ eine spezielle „Rollback-Methode“ hinzuzufügen.Was ich verlange, ist eine standardisierte Methode, dies zu tun.

War es hilfreich?

Lösung

Eine Reihe von Techniken entwickelt sich weiter, aber das Problem ist immer noch so aktuell, dass der Standardisierungsprozess uns noch keine vollständig tragbare Lösung geliefert hat.

Option eins: Sie können die Web-Services-Transaktion bewusst machen.Dies setzt natürlich voraus, dass Sie die Kontrolle über sie haben, obwohl das Schreiben eines transaktionsbewussten Proxys für nicht-transaktionale Dienste in manchen Fällen auch eine Option ist.

Die Protokolle WS-AT und WS-BA sind die führenden Standards für transaktionale Webdienste.Leider geben sie nur das Protokoll an, nicht die Sprachbindungen.Mit anderen Worten: Auf Programmiersprachenebene gibt es keine Standard-API.Für Java kommt JSR-156 am nächsten, ist aber noch nicht fertig.

Dann wird das Problem:wie man das EJB bindet (d. h.JTA/XA)-Transaktion zur WS-Transaktion.Da die von den Protokollen WS-AT und XA verwendeten Modelle eng miteinander verwandt sind, kann dies mithilfe einer Protokollbrücke erreicht werden.Mehrere App-Server bieten allein diese Zeilen an.JBoss präsentierte ihre auf der JavaOne – siehe http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

Beachten Sie, dass die Protokoll-Bridging-Technik auch umgekehrt verwendet werden kann, um einem EJB zu ermöglichen, das z.B.ein XA-Datenbank-Backend, das als transaktionaler Webdienst verfügbar gemacht werden soll.

Das von zweiphasigen Commit-Transaktionen verwendete Sperrmodell eignet sich jedoch eigentlich nur für kurzlebige Transaktionen im gleichen Kontrollbereich.Wenn Ihre Dienste im selben Rechenzentrum des Unternehmens laufen, kommen Sie wahrscheinlich damit durch.Für eine breitere Verbreitung, sei es geografisch oder administrativ, sollten Sie sich wahrscheinlich WS-BA ansehen, ein Webservice-Transaktionsprotokoll, das speziell für diesen Zweck entwickelt wurde.

WS-BA verwendet ein vergütungsbasiertes Modell, das schwieriger zu programmieren ist.Es basiert im Wesentlichen auf der von Ihnen erwähnten Technik:Die Wirkung von Servicemethoden wird durch den Aufruf einer Kompensationsmethode rückgängig gemacht.Es kann schwierig sein, dies richtig zu machen, aber ein JBoss-Praktikant hat ein recht nettes Annotations-Framework erstellt, das es Ihnen ermöglicht, Kompensationsmethoden mit minimalem Aufwand zu definieren und diese automatisch steuern zu lassen.Es ist nicht standardisiert, aber es lohnt sich, einen Blick darauf zu werfen, wenn Sie sich für diesen Ansatz entscheiden: http://www.jboss.org/jbosstm/baframework

Andere Tipps

Web Services-Koordination (WS-C) und Web Services-Transaktion (WS-T) Spezifikationen entwickelt von Microsoft, BEA Systems und IBM werden in solchen Fällen verwendet, wie ich weiß. Sie können Web-Services aus der Lektüre Transaktionen und Ein Vergleich von Web-Service Transaktionsprotokollen von IBM zur Verfügung gestellt Artikel, um deutlich zu machen.

Eigentlich Sie in der Regel nicht nur eine benutzerdefinierte Rollback-Methode benötigen, sondern auch eine eigene Methode zu begehen. Andernfalls erhalten Sie Probleme wie die im WS-BA-Standard gefunden.

Just Besuche http://www.atomikos.com/Publications/TryCancelConfirm für einen ausführlichen Artikel. Die genannten Funktionen zur Verfügung stehen in Atomikos ExtremeTransactions ... Auch das Produkt klassischen ‚ACID‘ unterstützt Stil-Transaktionen Web-Service.

HTH

Guy

Disclaimer: Ich arbeite für Atomikos

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top