Daten-Synchronisation Client <-> Datenquelle (DB) ?

Status
Nicht offen für weitere Antworten.

AlArenal

Top Contributor
Moinsen!

Folgende Situation:
Eine Client-Anwendung liest und schreibt seine Daten aus einer Datenquelle. In der Anwendung kann folgendes passieren:

- Daten werden geändert (aus der Datenquelle gelesene Daten wurden geändert und müssen zurückgeschrieben werden)
- Daten werden gelöscht (aus der Datenquelle gelesene Daten wurden gelöscht und müssen nun aus der Datenquelle entfernt oder dort archiviert werden)
- Daten werden erzeugt (der Client erzeugt neue Daten, die in die Datenquelle eingefügt werden müssen)
- Daten bleiben wie sie sind (Daten aus der Datenquelle werden nicht verändert)

Faktisch startet eine Anwendung und lädt benötigte Daten, in meinem Fall kommen sie aus einer SQL-Datenbank und werden via XML-RPC transferiert. Meine Denksportaufgabe ist wie ich die Daten in der Anwendung und der Datenbank synchron halte, dabei ist vereinfacht eine Sngle-User-Umgebung anzunehmen (der Multi-User-Fall wird durch Locking ausgeschlossen).

Meine bisherigen Überlegungen:
Im Grunde müsste ich für meine Datenobjekte sowas wie eine zantrale Verwaltung (Liste o.ä.) haben. Beim Speichern der Daten aus der Anwendung würde ich die Liste durchgehen, das Datenobjekt untersuchen und entsprechend agieren. Dazu wäre es vermutlich am praktischsten diese Objekte über eine Factory zu erzeugen. Jedes Datenobjekt müsste ein Interface implementieren, über das ich setze und abfrage ob die enthaltenen Daten mit der Datenquelle synchron (INSYNC) sind, zu löschen sind (DELETE), neu sind (NEW) oder sich geändert haben (CHANGED).

Problem:
a) Ein Datenobjekt mit Daten aus der Datenquelle wird im Programmverlauf auf null gesetzt. So hab ich keine Möglichkeit mehr nachzuvollziehen um welche Daten es sich handelte und ob und wie ich sie in der Datenquelle behandeln soll. Ich kann mir ne Richtlinie ausdenken um diesen Fall abzufangen, aber das ist macht die Implementierung unnötig komplex und fehleranfällig. Schön wäre es wenn das Programm selbst daraus resultierende Probeme abfangen könnte.

b) Mein Java Patterns Workbook ist gerade nicht bei der Hand :(

Da es sich um ein Problem handelt, das so ziemlich jede Datenbankanwendung hat, muss es da doch Erfahrungswerte und empfehelnswerte Lösungswege geben. Entweder hab ich aber gerade ein Brett vorm Kopf oder .. oder nicht.. ;)

Eben kam mir noch die Idee statt einer Liste meine Datenobjekte nochmals zusätzlich in ein Objekt zu packen und dies stattdessen in die Liste zu setzen. Würde das Datenobjekt ge-nullt, wäre das Wrapper-Objekt noch intakt und darin würde ich noch Meta-Infos ablegen um die Beziehung Datenobjekt->DB-Daten herstellen zu können.

Vielleicht hat hier ja wer die eine oder andere Anregung. Googel liefert zu den passenden Stichworten alles, nur nichts zu diesem Thema.. ;)
 

Bleiglanz

Gesperrter Benutzer
a) organisiere dir eine Zentrale Map, über du die jedes DB-Objekt per PK und tabellenname finden kannst (dann macht es nichts, wenn irgendwo was =null gesetzt wird)

b) solltest du aber

Fowler: Patterns of Enterprise Application Architecture

da steht das alles drin und es werden verschiedene Varianten diskutiert

alternativ: Hibernate, nimmt dir den ganzen Schmonzes ab
 
G

Guest

Gast
Was Du suchst, ist eigentlich etwas ähnliches wie Entity-Beans, nur clientseitig.
Was spricht dagegen Informationen über den Zustand der Daten zu verwalten?
z.B. INSERTED, CHANGED, DELETED (als Attribute der Datenobjekte)
Du kannst dann die Daten anhand dieser Informationen unterscheiden
und entsprechend reagieren bzw. geänderte, neu eingefügte oder gelöschte
Daten auf einen Schlag mit der Datenbank abgleichen, in der Anzeige
hervorheben/filtern usw.
Das alles ist noch dadurch vereinfacht, dass Du keine Mehrbenutzerumgebung
hast und Dich nicht um Änderungen an anderen Arbeitsstationen kümmern
musst.
 

AlArenal

Top Contributor
Bleiglanz hat gesagt.:
a) organisiere dir eine Zentrale Map, über du die jedes DB-Objekt per PK und tabellenname finden kannst (dann macht es nichts, wenn irgendwo was =null gesetzt wird)

Hab nun folgende Pen&Paper-Arbeitsversion:

interface DataChangedObservable:
  • addDataChangedObserver(DataChangedObserver)
  • removeDataChangedObserver(DataChangedObserver)
  • notifyDataChanged()

interface DataChangedObserver:
  • dataChanged(DataChangedObservable)

class DataObject:
  • enthält Referenz auf ein DataChangedObservable
  • implementiert DataChangeObserver
  • enthält Meta-Infos für das Objekt (DB-Tabelle, PK, Änderungs-Status, ...)

class DataFactory:
  • implementiert als Singleton
  • get-Methoden für meine Objekte
  • führt intern eine Map
    [list:1095fe67e3]
  • legt jedes erzeugte Objekt in ein DataObject ab
[/list:u:1095fe67e3]

Öhm.. hoffe ich hab das mal eben so richtig hingeklatscht.

Meine Objekte sollen nun im Grunde ihr DataObject bei Änderung benachrichtigen und dieses ändert dann entsprechend seine Status-Informationen. Speichere ich den Krims am Ende ab, durchlaufe ich meine Map mit den DataObjects und lese aus welche Daten in der DB ich anlegen, ändern oder löschen muss...

Hm.. nun habe ich doch für jedes Objekt noch eins angelegt und beide miteinander verschweißt. Naja, wenn es sich nicht vermeiden lässt...

b) solltest du aber

Fowler: Patterns of Enterprise Application Architecture

da steht das alles drin und es werden verschiedene Varianten diskutiert

Ich hab das hier. Muss es nur mal wieder den Klauen anderer entreißen..

alternativ: Hibernate, nimmt dir den ganzen Schmonzes ab

Soweit ich weiß aber nur wenn direkt auf DB gearbeitet wird und ich muss über den Umweg XML-RPC gehen (Kunden-IT kriegt graue Haare wenn intern Ports auf die DB freigeschaltet werden sollen).[/list]
 

AlArenal

Top Contributor
Anonymous hat gesagt.:
Was Du suchst, ist eigentlich etwas ähnliches wie Entity-Beans, nur clientseitig.

Mag sein, mit EJB hab ich mich nie beschäftigt :)

Was spricht dagegen Informationen über den Zustand der Daten zu verwalten?
z.B. INSERTED, CHANGED, DELETED (als Attribute der Datenobjekte)

Die Idee hatte ich auch. Anders lässt es sich im Grunde ja auch nicht handhaben.

Du kannst dann die Daten anhand dieser Informationen unterscheiden
und entsprechend reagieren bzw. geänderte, neu eingefügte oder gelöschte
Daten auf einen Schlag mit der Datenbank abgleichen, in der Anzeige
hervorheben/filtern usw.

Hm.. müsste ich aus meiner im vorigen angedachten Observer-Observable-Beziehung eine feste 1:1-Beziehung machen. Dann wäre das grundsätzlich drin in der Anwendung auch den Status irgendwo unterzubringen (so ich das mal bräuchte).

Das alles ist noch dadurch vereinfacht, dass Du keine Mehrbenutzerumgebung
hast und Dich nicht um Änderungen an anderen Arbeitsstationen kümmern
musst.

Es macht bei uns keinen Sinn wenn mehrere an einem Datensatz doktorn. Daher werde ich den wohl beim Laden über ein Flag und nen Timestamp in der DB sperren. Die Client-Anwendung bekommt nen Timer verpasst der periodisch den Timestamp des Locks updatet. So hoffe ich vermeiden zu können, dass jemand nen Datensatz öffnet und sie auf ewig gelockt bleibt (weil Client abschmiert oder sonstwas passiert).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
padde479 Collections Daten in Dreiecksform Allgemeine Java-Themen 13
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
A Hartgecodete Daten auslagern Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
S Webservices für binäre Daten? Allgemeine Java-Themen 5
OnDemand Daten in RAM zwischenspeichern oder lieber aus DB holen? Allgemeine Java-Themen 24
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
S Entities aus XML - Daten. Allgemeine Java-Themen 1
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
C Daten für Klassifikationsverfahren gewinnen Allgemeine Java-Themen 6
J Daten von Quelltext Allgemeine Java-Themen 5
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
J Jasper Reports - Daten vom Hoster Allgemeine Java-Themen 2
kodela Daten während Laufzeit zugriffsbereit Allgemeine Java-Themen 15
J Millisekunde zwischen 2 Daten Allgemeine Java-Themen 6
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
R Android Daten online senden Allgemeine Java-Themen 0
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
OnDemand Desktop-Applikation schreiben, wie daten persistent? Allgemeine Java-Themen 9
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
J Serial Port Daten empfangen Allgemeine Java-Themen 5
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
J Daten persistent speichern Allgemeine Java-Themen 14
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
G Daten aus Website auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
O Serial Port Daten als Tastaturanschlag senden Allgemeine Java-Themen 0
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
T Input/Output Daten in eine Datei schreiben Allgemeine Java-Themen 4
Z daten bindung Allgemeine Java-Themen 1
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
A Daten in Formularen/Vorlagen erstellen und ausdrucken Allgemeine Java-Themen 3
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
OnDemand PC identifizieren / Daten auslesen Allgemeine Java-Themen 15
G Combobox füllen mit daten aus einer Tabelle Allgemeine Java-Themen 4
J Maven .war enthält veraltete Daten Allgemeine Java-Themen 3
N Daten aus Jar laden Allgemeine Java-Themen 10
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
T Daten effizient verwalten Allgemeine Java-Themen 4
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
R Daten aus DB auslesen in ein formular (JSP) Allgemeine Java-Themen 13
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
H OOP Daten über TCP Allgemeine Java-Themen 5
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
D Daten eines User auslesen. Allgemeine Java-Themen 5
B Input/Output Einbinden von Daten in Java Allgemeine Java-Themen 3
L Einbinden von Daten in ausführbare Jar Allgemeine Java-Themen 6
N Methoden Einzelne Daten aus "Person" auslesen Allgemeine Java-Themen 3
R SerialPort auslesen und Daten verarbeiten Allgemeine Java-Themen 23
ARadauer Wo liegen die Daten der Preferences Klasse Allgemeine Java-Themen 3
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
S JDialog Daten ins JFrame übergeben Allgemeine Java-Themen 5
F Threads synchronisierung des Zugriffes auf daten Allgemeine Java-Themen 4
O Amazon S3 Anmelden / Daten downloaden Allgemeine Java-Themen 2
A Daten aufbereiten Allgemeine Java-Themen 11
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
L Speichern von Daten in JKS Allgemeine Java-Themen 5
K JFreeCharts - Dummy für fehlende Daten Allgemeine Java-Themen 6
M Daten aus doc, pdf .... auslesen Allgemeine Java-Themen 12
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
A Login-Daten Formular automatisch ausfüllen Allgemeine Java-Themen 10
C Daten speichern und verwalten Allgemeine Java-Themen 3
Z Daten aus einer Internetseite auslesen? Allgemeine Java-Themen 2
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
ruutaiokwu META-INF-daten bei ungepackten library-projekten während der entwicklung mit einbeziehen...? Allgemeine Java-Themen 2
K Server Daten Visualisieren Allgemeine Java-Themen 3
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
A XML-Daten komprimieren Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben