Sven Rautenberg: Verteilte Objekte synchron halten?!

Beitrag lesen

Moin!

Wäre alles auf dem selben Rechner hätten wir kein Problem. Ein Status-Modell sorgt dafür, dass sich "arbeiten" und "bearbeiten" nicht in die Quere kommen. Was dafür allerdings erforderlich ist, ist die Kenntnis des EINEN Workflows. Nun haben wir aber das Problem, dass das System sich ja über mehrere Rechner verteilt. An der Kommunikation bin ich nur mittelbar beteiligt, mein aktueller Kenntnisstand ist ein Servlet oder gar direkte Socket-Kommunikation.
Wir überlegen jetzt krampfhaft, welche Daten man wann geschickterweise austauscht.

Wenn ich deine Ausgangslage mal selbst formuliere: Du hast "den Zustand" (des Workflows), welcher bearbeitungslogisch nur eine einzige Instanz sein darf, und daran arbeitend diverse Clients. Und du suchst eine Lösung, mit der dieser "Zustand" auf allen Clients parallel und (mehr oder weniger) synchron angezeigt und verändert (von anderen) wird, damit der Benutzer dieses Clients immer "den Zustand" sieht und ggf. auch selbst Änderungen veranlassen kann.

Ganz offensichtlich bedarf es dabei wohl einer zentralen Instanz, die "den Zustand" verwaltet, und hinreichender Kommunikation zwischen dieser Zentrale und allen Clients, damit Änderungen jedem zeitnah mitgeteilt werden.

Es gibt für solche Dinge schon Beispiele, die funktionierend umgesetzt wurden: Chats. Da ist eine zentrale Instanz, die alle "Änderungen" (Textbeiträge der Clients) verwaltet und auch an alle anderen Cliente weiterleitet, damit diese jeweils ganz genau "den Zustand" darstellen können.

Ein Chat ist sicherlich nicht ganz so "Hi-Tech" in der Anzeige, aber das Prinzip dürfte als Denkanstoß passen: Die Clients "chatten" mit dem Server über alles, was der Benutzer so macht, klickt und tippt, damit der Server sofort diese Änderungen mitgeteilt bekommt. Er wiederum "chattet" alle diese Änderungen an die Clients - oder zumindest an den Teil der Clients, die dadurch ihre Anzeige beeinflussen müssen.

Technisch simpel umgesetzt wäre das tatsächlich durch eine persistente Verbindung (also ganz im Gegensatz zu HTTP), auf der während der gesamten Zeit bidirektional Informationsaustausch betrieben wird.

Dementsprechend erscheint es sinnvoll, nur Delta-Informationen auszutauschen, und nicht immer den kompletten Zustand zu übermitteln.

Hat jemand eine Idee, wir man doch mit allen Anwendungen auf der selben Instanz arbeiten kann? Wäre RMI vielleicht eine Lösung?

Ob Java für solche Probleme was anbietet, kann ich nicht sagen.

- Sven Rautenberg

--
"Love your nation - respect the others."