2014-01-22 8 views
6

Ich arbeite derzeit an einem SOA-Projekt.Verwendung von Transaktionen und Rollbacks in einer SOA-Architektur

Ich muss mehrere Verarbeitungsketten entwickeln, also Web-Services, die Web-Services innerhalb eines ESB in Java ketten.

Da jeder Web-Service-Kette verschiedene Ausnahmen auslösen kann, dachte ich über die Verwendung von Transaktionen, um die Web-Services-Verhaltensweisen zurückzusetzen.

Ich habe jedoch keine Ahnung, ob dies in einer SOA-Umgebung überhaupt möglich ist, wenn jeder Dienst anders ist. Ich habe es durchsucht und einige Informationen über AtomicTransactions gefunden, bin mir aber nicht sicher, ob es zur Lösung meines Problems verwendet werden kann.

Zum Schluss, meine Fragen sind, ist es tatsächlich möglich, Rollback-Dienste? Und wenn ja, wie kann ich es einrichten?

Vielen Dank im Voraus.

+1

Ich habe dieses Problem untersucht und festgestellt, dass Leute Saga-Muster verwenden. Dies ist keine vollständige Antwort, also setze es in einen Kommentar. http://arnon.me/soa-patterns/saga/ – ReVolly

+0

Nur eine Frage, aber Sie haben sich JTA angesehen? – Namphibian

+0

Ich habe JTA nicht oft verwendet, aber ist es möglich, es in einer verteilten Umgebung zu verwenden? Ich dachte, dass es einen anderen Weg geben muss, da die Sorgen irgendwie anders sind. Haben Sie einen Link, der mir helfen könnte, Transaktionen in einer SOA einzurichten, oder ist es einfach JTA? Gibt es spezielle Anmerkungen? – qbisson

Antwort

9

Mit Transaktionen zwischen den Diensten ist keine gute Praxis, wie Sie Ressourcen für Komponenten der Hand halten, die nicht unbedingt vertrauenswürdig sind, und Service-Prozesse sind in der Regel lang andauernd (ich schrieb darüber mehr in „transactional-integration anti-pattern“.

Als jemand in einem Kommentar erwähnt finde ich, dass die „saga pattern“ ein besserer Weg ist es, diesen lange Lauf Wechselwirkungen

+1

Danke. Ich habe nach dem "saga pattern" gesucht, und wenn ich es richtig verstehe, muss ich die Aktionen der Dienste kompensieren. Benötigen die Dienste eine Methode zum Abbrechen einer Dienstmethode? Zum Beispiel, wenn eine add() Methode ausgeführt wird , muss es die aremove() -Methode für den Service aufrufen, wenn eine Exception ausgelöst wird oder gibt es eine andere Möglichkeit, dies zu implementieren? Für Informationen verwendet unser Projekt eine Orchestrierungskomponente, um die verschiedenen Services aufzurufen – qbisson

+2

wenn Sie orchestrieren alles von außen kann man die umgekehrte Aktion auf dem Dienst aufrufen.Eine andere Möglichkeit ist, den externen Orchestrator einfach die Saga koordinieren zu lassen und den Dienst einfach wissen zu lassen, dass es fehlgeschlagen ist.Jeder Dienst kann den Fehler intern so gut wie möglich behandeln Rollback oder Ausgleich auf andere Art. Dienste können auch Mietverträge auf ihren Versprechungen aufrechterhalten und selbständig Rollbacks durchführen, wenn der Mietvertrag nicht erneuert wird und/oder die Saga nicht erfolgreich ausgeführt wurde –

+0

Danke. Wir werden versuchen, dies in unserem Projekt umzusetzen. Ich werde versuchen, das Saga-Muster genauer zu untersuchen. – qbisson

0

ich die ganze Idee schlecht besten finden zu behandeln. SOA und Transaktionen sind schon immer ein großen Kopfschmerzen. befürwortend die umgekehrte Aktion einer Reihe von Diensten, kann auch fehlschlagen! Was würden Sie dann tun?

Ich kenne ein sehr angesehenes Medienunternehmen in Großbritannien, das ein dediziertes Offshore-Team hat, das Daten aufgrund von Orchestrierungsfehlern über Web-Services massiert, was den Verstand in den Schatten stellt.

Schließlich, mit OEM BPM-Engines als Orchestratoren denke ich, dass es eine Fähigkeit geben kann, auf der man sich für ein Unit of Work-Konzept verlassen kann. Dieses Thema war und ist erstaunlicherweise immer noch ein Thema.

+0

Ich verstehe nicht wirklich, warum Sie denken würden, Transaktionen in einer SOA-Architektur wären schlecht. Ich denke wirklich, dass es einen Weg geben sollte, dies zu tun, vielleicht in den Protokollen, um eine Vorstellung von Transaktionen zwischen Diensten hinzuzufügen, ohne sie selbst implementieren zu müssen. Nun, ich weiß, dass es keine leichte Aufgabe ist, weil es immer noch andere Probleme geben würde, aber wie können Sie Ihre Anwendungsintegrität ohne dies beibehalten? – qbisson

+0

Hallo. eigentlich denke ich nicht, dass sie schlecht sind. Ich sage nur, dass es keine gute Idee ist, eine Entschädigung zu machen. Habe gerade herausgefunden, dass meine Antwort tatsächlich fehlerhaft ist. Es gibt seit meinem letzten SOA-Projekt OASIS-Standards für Transaktionen, die mit Oracle Weblogic 11 implementiert wurden, zum Beispiel: http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2 -spec-cs-01/wstx-wsat-1.2-spec-cs-01.html – Beezer

Verwandte Themen