Web Frameworks und DB-Transaktionen

megachucky

Bekanntes Mitglied
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

Top Contributor
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.
 
Zuletzt bearbeitet:

pizza1234

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


Grüße
Peter
 

megachucky

Bekanntes Mitglied
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
megachucky Offline-Fähigkeit von Web-Frameworks Web Tier 7
G Entscheidung des Frameworks Web Tier 4
M Performance von Web-Frameworks Web Tier 23

Ähnliche Java Themen

Neue Themen


Oben