Frage

Transaction ist eine erstaunliche Eigenschaft, aber zu wenige Anbieter es implementiere richtig. Ich möchte nicht, die Verbindung als Parameter zu übergeben.

War es hilfreich?

Lösung

Nicht sicher, was Sie hier mit Transaction erreichen wollten - wenn Idee ist auotmatic Fluss von Transaktionen über Methoden (und einfache Eintragung im Rahmen der laufenden Transaktion) zu haben, dann Verbindung als Parameter übergeben ist nicht der einzige Weg. Sie können aktuelle Verbindung und Transaktion mit aktuellen Callcontext (oder aktuelle Thread). Legen Sie eine einfache statische Wrapper, überprüfen würde, wenn die Verbindung / Transaktion zu aktuellem Anrufkontext vorhanden ist, und erstellt, wenn nicht. Dies ist transparent nicht-intrusive Weise, wie durch Parameter vorbei entgegengesetzt.

Nun, wenn Sie suchen, Transaktionen über App Domain-Grenzen hinweg fließt und / oder mehrere Ressourcenmanager verwenden (dh unter Verwendung verteilter Transaktionen), dann die beste Wette wäre Transaction zu verwenden und Roll-out Ihre eigenen Resourcemanager . Natürlich ist dieses Ding nicht trivial, aber dann das ist, was die Anforderung zur Folge hat. Wenn das System zugrunde liegenden bietet keine Transaktions Ressource dann benutzerdefinierten können Ressourcenmanager Transaktion verwenden zu kompensieren Roll Rücken (zum Beispiel kann ein Manager auf einem Top-Dateisystem verwenden „Ordner löschen“ als Transaktion mit dem ursprünglichen Transaktion von „Create Folder“ Kompensation) .

Andere Tipps

Vielleicht Sie suchen System-Prävalenz .

Im Grunde ist jede Transaktion journaled (die Details der Transaktion werden gespeichert ), und wenn die Anwendung abstürzt und Sie können entweder neu gestartet abholen, wo Sie die Änderungen auf dem journaled Zustand basierend aufhörte oder Rollback.

Hier ist ein Link auf die Snapshot Muster , die Sie bei der Umsetzung von System-Prävalenz helfen können.

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