Das automatische Transaktionsmanagement ist nur eine der Spezialitäten des Spring Frameworks. So lässt sich transaktionales Verhalten einfach per @Transactional-Annotation auf Klassen- oder Methodenebene konfigurieren. Allerdings sollte man nicht zu großzügig beim Annotieren sein.
Spring: Transaktionskosten im Auge behalten
In herkömmlichen Schichten-Architekturen (Domäne / Datenzugriffsschicht / Serviceschicht / Controllerschicht / Viewschicht) werden Transaktionen in der Regel in der Serviceschicht konfiguriert. Und oft genug sind alle Methoden eines Service transaktional, sodass die Annotation @Transactional auf Klassen- bzw. hier Interfaceebene vollkommen ausreicht.
Etwas anders sieht die Sache mit Catapult und einem konsequent domänengetriebenen Entwurf aus: sämtliche Anwendungslogik gehört in die Modellklassen der Domäne, also auch alle transaktionalen Methoden. Ein unbedachtes Setzen der @Transactional-Annotation an die Modellklassen kann hier jedoch fatale Folgen haben. Jeder Zugriff auf ein einzelnes Domänenproperty über einen Getter wird in diesem Fall in einer eigenen Transaktion ausgeführt, kontaktiert also die Datenbank und führt damit unweigerlich zu erheblichen Performanceeinbußen auf datenintensiven Seiten. Richtiger und performanter ist ein gezieltes Annotieren nur genau der Methoden, die sich transaktional verhalten sollen.
Was uns hier Catapult vor Augen führt: Ein konsequent domänengetriebener Entwurf erfordert ein durchdachtes Architekturdesign, kann so jedoch Fehler aufzeigen, die bei der Aufteilung in die oben genannten Schichten leicht übersehen werden (weil sie dort zugegebenermaßen weniger fatale Folgen haben).

2 Antworten auf „Spring: Transaktionskosten im Auge behalten“
Kommentare zu diesem Eintrag sind geschlossen.