Stellen Sie sich eine transaktionale, Multithread-Java-Anwendung mit Spring, JDBC und AOP mit n-Klassen in m-Pakete alle an Datenbanktransaktionen teilnehmen. Nehmen wir an, dass es notwendig ist, eine beliebige Menge von Klassen innerhalb einer Transaktion zu definieren. Darüber hinaus gibt es immer eine Klasse T innerhalb des Bereichs, der die Transaktion beim Aufruf festschreibt.AOP, Spring und Transaktion Scoping
Lassen Sie mich ein Beispiel für die Klarheit geben: Angesichts der Pakete A, B, Z und Klassen A.Foo, B.Bar und Z.T. Die folgenden Instanzen der jeweiligen Klassen werden aufgerufen (möglicherweise durch verschiedene Aufrufer mit anderen Klassen dazwischen): A.Foo, B.Bar, A.Foo, Z.T Die Transaktionen werden erst nach dem Aufruf von Z.T übergeben. Sollte die Anwendung aus irgendeinem Grund herunterfahren, wird die Transaktion niemals ausgeführt, es sei denn, Z.T beteiligt sich.
Instanzen können sich gegenseitig aufrufen, und wie bereits erwähnt, gibt es keinen gemeinsamen Einstiegspunkt, der alle Instanzen von einem einzigen Einstiegspunkt aus aufruft (wie eine Serviceschicht), was ein einfaches Ziel für das Transaktions-Tag des Frühlings wäre.
Jetzt die Frage: Kann dieses Problem mit Aspekten gelöst werden? Wenn ja, was könnte der grundlegende Ansatz sein? Danke.
Können Sie klären, ob Sie sich in einem Webcontainer befinden und ob Ihre Transaktionen immer als Teil einer Webanfrage ausgeführt werden und ob Sie mehrere Transaktionen pro Anfrage haben? – skaffman
Transaktionen sollten nicht wissen oder sich darum kümmern, ob Sie ein Web-Frontend verwenden oder nicht. Es ist die Serviceschicht, die über Arbeitseinheiten Bescheid weiß, und hier werden Transaktionen deklariert. – duffymo
Ich bin nicht in einem Web-Container - die Anwendung läuft eigenständig. Duffymo ist richtig, das Web-Frontend sollte in diesem Fall keine Rolle spielen (wenn es existierte, würde es das Problem nicht verändern) –