# Java Anwendung für Multi-User



## Gast (8. Okt 2007)

Hallo,

ich möchte gerne meine JAVA Anwendung Multiuser fähig machen.
Jetzt frage ich mich allerdings wie ich dieses am besten realisieren kann ...

Die Datenbank im Backend ist eine MySQL Datenbank auf die jeder User Zugriff hat.

In meiner Anwendung gibt es JTrees und JTables, jetz Frage ich mich natürlich wie ich diese synchron halte.
Im Moment ist es so, das ich nach einem ändern der Daten die GUI update, sprich die Table und Tree Models
werden neu geladen.

Reicht dieses Vorgehen evtl. schon aus um das ganze synchron zu halten? Gibt es bessere Möglichkeiten?
Worauf muss ich achten? Was habt Ihr für Erfahrungen? - Alles Dinge die mich Interessieren ;-)

Vielen lieben Dank für eure Hilfe!


----------



## HLX (8. Okt 2007)

Folgendes Szenario:

a) 1. User liest Daten einer DB-Tabelle
b) 2. User liest Daten der gleichen DB-Tabelle
c) 1. User ändert in der GUI einen Wert in einer Zeile
d) 2. User löscht die gleiche Zeile, schreibt´s in die DB und setzt ein commit ab
e) 1. User will die Änderung speichern (update)
==> es knallt.

In bestimmten Fällen macht es Sinn, die Tabelle oder Zeile(n) deiner Tabelle, die sich im Zugriff befinden für übrige Benutzer zu sperren. So merkt ein ändernder Benutzer, dass gerade etwas mit seiner Tabelle/seinem Datensatz passiert. Du könntest dich mit Locking von Datenbanken, und dem Sperrkonzept deines DBMS auseinandersetzen und dann überlegen, wie du Datenbanksperren umsetzen willst. 

Wichtig ist auch zu entscheiden, wann ein commit abgesetzt wird, da alles was ein User nicht comittet von den anderen nicht gesehen werden kann.


----------



## tfa (8. Okt 2007)

Locking ist der pessimistische Ansatz und für einen echten Mehrbenutzerbetrieb nicht wirklich gut. 
Such mal nach "Optimistic concurrency control". 
In der Praxis versioniert man die DB-Einträge (Tabellenzeilen), z.B. durch fortlaufende Nummern, Zeitstempel o.ä.
Wenn ein Client den Datensatz ändert, wird automatisch die Versionierung mit erhöht. Der anderer Client, der später seine Änderungen comitten will, findet den Datensatz nicht mehr. Die Persistenzschicht liefert einen Fehler, auf den die Anwendung entsprechend reagieren kann. 
Persistenz-Frameworks wie z.B. Hibernate unterstützen Optimistic concurrency control.


----------

