@Transactional und @Controller in SpringMVC
Ich verwende schon seit einiger Zeit SpringMVC für einige meiner Projekte. Besonders gut gefällt mir das praktisch konfigurationslose Schreiben von Controllern, die schlicht und einfach durch das Annotieren mit @Controller, @RequestMapping und @RequestParam 'zum Leben erweckt' werden. Ich bin jetzt schon zweimal in Versuchung geraten eine Controller Methode durch das Annotieren mit @Transactional transaktional über mehrere DAO Methoden zu machen - doch dabei gibt es ein paar Dinge zu beachten. Zunächst einmal erbt der DispatcherServletContext nicht automatisch ein etwaiges $lt;tx:annotation-driven /> von seinem RootApplicationContext. Hat man das gelöst, aber keinen Bytecode Generator an Bord, der sich auch auf das Modifizieren von Klassen an Stelle von Interfaces verstehet (wie z.B. CGLib 2), so muß man einen solchen als weitere Abhängigkeit aufnehmen oder für @Transactional Controller auch noch Interfaces erzeugen. Nach einigem Überlegen bin ich zu dem Schluss gekommen, dass transaktionale Controller Methoden einen Holzweg darstellen und man anstatt dessen lieber eine Service oder Manager Klasse im Business Logik Layer einführen sollte, die die DAO Aufrufe, welche in einer gemeinsamen Transaktion ablaufen sollten, bündelt.
Posted at 02:56PM Feb 03, 2009 by joerg in Allgemein |