Frage

Meine Forderung ist I Server J2EE Web-Anwendung und Client J2EE Web-Anwendung haben. Manchmal kann Client offline gehen. Wenn der Client online geht sollte er in der Lage sein, Änderungen hin und her zu synchronisieren. Ich sollte auch in der Lage zu kontrollieren, welche Zeilen / Tabellen basierend auf einige Filter / Regeln synchronisiert werden müssen. Gibt es ein vorhandenes Java-Frameworks für sie tun? Wenn ich auf meinem eigenen implementieren müssen, was sind die verschiedenen Strategien, die Sie vorschlagen?

Eine Lösung in meinem Kopf ist die Aufrechterhaltung SQL-Protokolle und gleichen Aussagen an der anderen Seite während der Synchronisation ausgeführt wird. Sehen Sie irgendwelche Probleme mit dieser Strategie?

War es hilfreich?

Lösung

Es gibt eine Reihe von Java-Bibliotheken für Daten-Synchronisations- / Replikation. Zwei, die ich bin mir dessen bewusst sind Narzisse und SymmetricDS . In einem früheren Leben dummerweise umgesetzt I (in Java) meinen eigenen Datenreplikationsprozess. Es scheint, wie die Art von Sache, die ziemlich einfach sein sollte, aber wenn die Daten gleichzeitig an mehreren Stellen aktualisiert werden, es ist höllisch kompliziert. Ich empfehle Ihnen dringend, eine der oben genannten Projekte verwenden, um zu versuchen und Bypass mit dieser Komplexität zu tun selbst.

Andere Tipps

Das biggist Problem mit der Synchronisation ist, wenn der Benutzer offline etwas bearbeitet, und es ist online bearbeitet zugleich. Sie müssen die zwei geänderten Teile von Daten, oder befassen sich mit der Benutzeroberfläche verschmelzen, damit der Benutzer sagen, welche Version richtig ist. Wenn Sie die Möglichkeit, beide zur gleichen Zeit beseitigen bearbeitet wird, dann müssen Sie nicht dieses klebrige Problem zu lösen.

Das Verfahren ist in der Regel ein Feld ‚geändert‘ auf alle Tabellen hinzufügen und vergleichen den geänderten Bereich des Kunden für einen bestimmten Datensatz in einer bestimmten Zeile, gegen das Änderungsdatum des Servers. Wenn sie nicht übereinstimmen, dann ersetzen Sie die Daten des Servers.

Seien Sie vorsichtig mit automatisch generierten Schlüsseln - Sie benötigen, um Ihre Datenintegrität, um sicherzustellen, wird beibehalten, wenn Sie vom Client zum Server kopieren. Streng läuft die SQL-Anweisungen wieder auf dem Server können Sie in einer Situation bringen, wo die automatisch generierten Schlüssel hat sich verändert, und plötzlich Ihre Fremdschlüssel verweisen auf verschiedene Datensätze als beabsichtigt.

Oft, wenn Daten aus einer anderen Quelle importiert, halten Sie den Überblick über den Primärschlüssel aus der Fremdquelle sowie Ihren eigenen persönlichen Primärschlüssel. Dies macht die Änderungen zu bestimmen und die Unterschiede zwischen den Datensätzen einfacher für schwierige Synchronisation Situationen.

Ihre Synchronizer muss erkennen, wenn Daten nur aktualisiert, und wenn es sein muss kann ein Mensch einen potenziellen Konflikt zu vermitteln. Ich habe ein Papier geschrieben, das erklärt, wie dies mit Protokollierung zu tun und algebraischen Gesetze .

Was ist am besten als die clientseitige Datenspeicher geeignet in Ihrer Anwendung? Sie können aus einer eingebetteten Datenbank wie SQLite oder eine Nachrichtenwarteschlange oder einem Objektspeicher wählen oder (wenn keine dieser Seiten verwendet werden kann, da es sich um eine Web-Anwendung ist) Dateien / Dokumente auf dem Client mit Hilfe von Web-DB oder IndexedDB durch HTML 5 Localstorage API.

Überprüfen Sie die Papier Gold Rush: Mobil Transaktion Middleware mit Java -object Replikation . Microsoft-Dokumentation von gelegentlich verbundenen Systemen beschreibt zwei Ansätze: serviceorientierte oder nachrichtenorientierte und datenorientiert. Gold Rush nimmt den früheren Ansatz. Der spätere Ansatz nutzt Datenbank Merge-Replikation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top