# Web Frameworks und DB-Transaktionen



## megachucky (12. Apr 2010)

Hallo.

Angenommen ich verwende als DB-Schicht einen ORM-Mapper (JPA, Hibernate), die DB-Aufrufe werden in Transaktionen nach dem ACID-Prinzip durchgeführt, es können also keine Inkonsistenzen entstehen.

Die Oberfläche wird mit einem Web-Framework entwickelt, welches dann (ohne EJB oder ähnliches) auf die DB-Schicht zugreift und in einem Tomcat deployed.

Eine Webanwendung ermöglicht ja, dass mehrere Menschen theoretisch gleichzeitig auf die gleichen Daten zugreifen und diese verändern.

Wie gewährleistet man hier die Transaktionssicherheit? Wird das durch den Tomcat geregelt? Oder wird von der DB-Schicht eine Exception geworfen, weil die Daten schon durch einen anderen Nutzer gelockt sind - diese Exception muss man abfangen und an der GUI anzeigen, dass die Daten bereits von einem anderen Nutzer verwendet werden?

Oder ist das bei jedem Web-Framework anders gelöst?

Bei EJBs hat man das gleiche Problem, weil hier dann Anwendungs- und DB-Schicht in einer Transaktion laufen, aber Oberfläche trotzdem nicht?

Vielen Dank für Erläuterungen, ich sitz gerade auf dem Schlauch


----------



## JanHH (14. Apr 2010)

Also so allgemein kann man die Frage nicht beantworten. Im Endeffekt werden die Datenbankzugriffe innerhalb von Transaktionen durchgeführt; ob man diese nun manuell startet und beendet (wie bei einer Anwendung mit JPA, aber ohne einen Application Server / EJB), oder der Application Server (z.B. JBoss) automatisch dafür sorgt, dass alle Zugriffe innerhalb einer Transaktion stattfinden, ist ja nur Detailkram. Die Datenbank selber bietet da verschiedene Optionen an (isolation level), und ansonsten sind die Anwendungen ja auch höchst unterschiedlich. Daten, die von einem Benutzer gelesen worden sind, müssen ja auch nicht unbedingt "gelockt" werden. Für ein solches Locking gibts bei einigen Datenbanken (MySQL, Postgres) ein "select for update". Ansonsten muss man evtl. innerhalb der Anwendung selber für eine Synchronisation von konkurrierenden, kritischen Zugriffen sorgen.


----------



## pizza1234 (14. Apr 2010)

Hi,
Du kannst die Transaktionen auch in der Webschicht starten. Stichwort *OpenSessionInView-Pattern*. Funktioniert übrigens sehr gut mit dem SpringFramework.


Grüße
Peter


----------



## megachucky (14. Apr 2010)

Danke. Das Pattern habe ich bisher noch nie gehört, nach erstem googeln scheint es den Zweck zu erfüllen und die beliebteste Lösung für dieses Problem zu sein.


----------

