# Server / mehrere Clients / MySQL / Konzept



## VictorRomeo (23. Feb 2015)

Hallo Forum,

ich bräuchte mal ein paar Denkanstöße.

ich arbeite gerade an einem Projekt, bei dem von einigen wenigen Arbeitsplätzen eine gemeinsame MySQL Datenbank (auf einem eigenen Host) bearbeitet werden soll. Nun stehe ich vor dem Problem, dass ich sicherstellen muss, dass ein Datensatz nicht gleichzeitig an zwei Plätzen bearbeitet werden kann, bzw. wie ich ich auf allen Arbeitsplätzen immer die gleichen Daten (Anzahl /Inhalt zur Anzeige zur Verfügung habe.

Realsiert habe ich das soweit mit Java 8, JavaFX und Hibernate. Funktioniert mit einem Arbeitsplatz soweit ja auch ganz gut – nun kommt ja aber mein oben beschriebenes Problem zum tragen. Mein Ansatz wäre, den Datensätzen quasi ein Sperr-Bit in der Tabellle zu verpassen, welches gesetzt wird wenn jemand den Datensatz in der Bearbeitungsmaske geöffnet hat, und auf dies per Abfrage zu prüfen und keinen zweiten Zugriff zuzulassen, solange dies gesetzt ist. 

Wird die Bearbeitungsmaske auf einem Arbeitsplatz dann geschlossen, wird der Datesatz entsprechend geupdatet und wieder freigegeben. Nur wie bekomme ich jetzt den geänderten Datensatz auf die anderen Arbeitsplätze zur Anzeige in meiner Maske/Tabelle wie auch immer.

Mein erster Gedanke war nun einfach alle Arbeitsplätze alle paar Sekunden abfragen zu lassen – das muss aber auch besser gehen. Mir schwebte da ein Server zwischen der MySQL DB und den Arbeitpätzen vor, der das ganze etwas koordiniert. Und dann eben Änderungsmitteilungen an die Arbeitsplätze schickt. Nur grundsätzlich ist mir schleierhaft wie das funktionieren soll. Ich bin noch Anfänger in Sachen Java.

Ich habe jetzt zum Beispiel Netty entdeckt – damit könnte ich ja wohl gleich POJOs durchs Netz schieben. Macht die Überlegung sich da einzuarbeiten Sinn, oder gibt es da einen einfacheren Weg? Wie ist mein Ansatz mit einem Server zu bewerten? Machbar für einen Anfänger?

VG,
VictorRomeo


----------



## CorperateRaider (1. Mrz 2015)

Der Umgang mit ServerSocket und Socket sollten auch für einen Anfänger möglich sein


----------



## Tobse (1. Mrz 2015)

Das mit dem Lock-Bit ist eine Möglichkeit. Wenn es aber auf der Datenbank passieren soll, dann würde ich da eher einen Timestamp/Datetime für nehmen. Denn wenn während des bearbeitens die Software abschmiert (oder die Netzwerkverbindung abbricht, oder, oder, oder) kann man den Datensatz nichtmehr bearbeiten. Mit einem Timestamp kannst du eine Funktion einbauen álá "Dieser Eintrag wurde nun X minuten lang bearbeitet und dabei noch nicht gespeichert, damit ist er wieder frei gegeben".

Da sich aber - wie du sagst - ide Nutzerzahl stark in Grenzen hält, würde ich es 100% mit der Server-Software machen. Du speicherst einfach im RAM, *wer* gerade *welchen* Datensatz bearbeitet. Das bietet folgende Vorteile:
- Einige datenanstichten bertreffen sicherlich mehrere Tabellen. Per Server kannst du ziemlich easy alle betroffenen Datensätze auf einmal sperren
- Du bekommst mit, wenn die Bearbeitung beendet wird. Bricht die Verbindung zu einem Client ab kannst du alle Resourcen, die er benutzt hat, direkt ohne Verzögerung freigeben.
- Du kannst anzeiegen, wer an welchem Datensatz arbeitet. Ich fände es nützlich zu wissen, mit welchem Kollegen ich sprechen muss wenn wir beide gerade an den selben Datensatz wollen als vorher durchs Böro zu fragen, wer gerade den Kunden XYZ bearbeitet.


----------

