Frage

Vor einer Weile ich eine Anwendung geschrieben, die verwendet Frühling AOP zum definieren von denen Methoden waren transaktional. Ich habe nun auch die zweiten Gedanken, wie viel von einer großen Idee war; Ich habe ein paar Mal nach einem kleinen Refactoring (Änderungsverfahren Signaturen usw.) getroffen worden, was natürlich nicht offensichtlich nicht werden, bis tatsächlich etwas schief geht (und ich habe eine logisch inkonsistent Datenbank).

Also ich bin interessiert in ein paar Dinge:

  1. Haben Sie andere Menschen explizite Transaktionsmanagement zurückkehren entschieden (beispielsweise über @Transactional Anmerkungen)?
  2. Gibt es nützliche Werkzeuge, die ich als Teil eines Build-Prozess identifizieren helfen können, ob alles war „gebrochen“?
  3. Wenn die Menschen AOP verwenden Transaktionen zu verwalten, welche Schritte unternehmen, um sie, die Fehler zu vermeiden, die ich gemacht habe?

Ich bin mit IntelliJ IDEA, die Sie eingerichtet Methoden durchsuchen können und Frühling XML Config zusammen mit Methodennamen Änderungen Refactoring, aber dies ist nicht immer ausreichend (kann, ob ein Aspekt beeinflussen einen Parameter auf ein Verfahren an der falschen Stelle Hinzufügen Brände zum Beispiel)

War es hilfreich?

Lösung

Ich bin derzeit deklarative Transaktionsmanagement in den beiden Java-Projekten arbeite ich an, angeben, welche Methoden Transaktionsbereich mit @Transactional Anmerkung benötigen. Meiner Meinung nach ist es eine gute Mischung aus Flexibilität und Robustheit: Sie sind in der Lage, um zu sehen, welche Methoden Transaktionsverhalten über eine einfache Textsuche, Isolierung und Vermehrung anpassen kann Attribute von Hand, wenn nötig, und die zusätzliche Menge an Typisierung ist praktisch fahrlässige .

An einem dieser Projekte, ich habe Sicherheit / Protokollierung über Aspekte umgesetzt und haben stolperte gelegentlich auf gleichen Hindernisse, die Sie, wenn Sie eine Methode oder Ändern von Signaturen umbenennen. Im schlimmsten Fall, verlor ich einige Protokolldaten von Benutzern Zugriff auf Verträgen, und in einer Version, einige Benutzerrollen waren alle Anwendung für den Zugriff auf Funktionen nicht in der Lage. Nichts Besonderes, aber so weit wie Datenbank-Transaktionen gehen, aber ich denke, es ist einfach nicht wert, und ich es besser ist, @Transactional biss sich zu geben. Frühling tut der harte Teil jedenfalls.

Andere Tipps

In Bezug auf (1): Ich fand @Transactonal eine praktischere Lösung in allen Projekten in den letzten Jahren gearbeitet. In einigen sehr speziellen Fällen jedoch hatte ich auch Frühling AOP zu erlauben, die Verwendung von mehr als eine JDBC-Verbindung / Transaction zu verwenden, da @Transaction an einen einzelnen Transaktionsmanager gebunden ist.

In Bezug auf (2): Having said that, in einem gemischten Szenario, das tue ich möglicherweise gebrochen Code eine Menge von automatisierten Tests zu finden. Ich verwende Spring AbstractTransactionalJUnit4SpringContextTests / AbstractTransactionalTestNGSpringContextTests meine Tests zu erstellen. Es war eine sehr effektive Lösung so weit.

Ich neige dazu, eher ein Purist sein, aber ich versuche, jede und alle Transaktionsmanagement über eine einfache autocommit zu halten, in der Datenbank selbst. Die meisten Datenbanken sind hervorragend bei der Handhabung Transaktionsmanagement, schließlich, seine eine der Schlüsselkomponenten, was eine Datenbank zu tun, gemeint ist.

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