RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling

D

Dennis4

Gast
Hallo an alle,
ich sitze seit einiger Zeit an einem Problem mit RMI und dem MVC Prinzip.

Man Stelle sich vor es gäbe drei Klassen, ein Model, ein View und ein Controller. Der Controller fungiert als Bridge zwischen Model und View.
View und Controller liegen auf dem Server und die View liegt auf dem Client.
Der Controller hat Referenzen zum Model und zur View. Der Controller implementiert das PropertyChangeListener Interface und registriert sich beim Model als solches. Treten beim Model Property Veränderung auf wird ein PropertyChangeEvent erzeugt und mit firePropertyChange der Controller benachrichtigt.
Der Controller propagiert das Event weiter and die View, welche sich dann entsprechend den neuen Werten anpasst.
So Weit so Gut. Nun gibt es ein Problem, da der Controller eine Referenz zur View benötigt, wird diese durch RMI serialisiert. Dies möchte oder muss ich aber vermeiden, da ich es nicht sinnvoll finde die Komplette Gui zu serialisieren. Ein weiterer Punkt, es geht auch nicht.
Ich habe die View mit Hilfe von Matisse erzeugt und das von Matisse verwendete GroupLayout implementiert nicht das Serializable interface.
Dementsprechend wirft RMI auch die NotSerializableException.

Gibt es nun eine Möglichkeit die MVC Architektur beizubehalten über RMI? Die einzige Möglichkeit, die ich bisher gefunden habe wäre ein Polling von der Clientseite aus um nach Änderungen zu fragen. Polling find ich aber in diesem Zusammenhang nicht sehr schön und frisst auch mehr Ressourcen.

Ich hoffe damit wird mein Problem klar und hoffe ihr könnt mir helfen.
Sollte es weiter Fragen geben kann ich auch noch schnell ein simples Beispiel implementieren.

Danke im Voraus.
Dennis
 
M

Marcinek

Gast
Nein das geht nicht mit dem java native rmi.

Es gibt implementierungen von rmi, die es erlauben an das Socket der RMI connection zu kommen. Damit kannst du vom Server über die bestehende Verbindung eine Nachricht an den Client zu schicken.

Daafür registrierst du so callback handler.

Ich meine diese Implementierung heißt: Easy RMI.

Aber ich finde das gerade nicht.
 
D

Dennis4

Gast
Hallo,
Danke erstmal für die Antwort.

Heißt das nicht, das RMI gänzlich ungeeignet ist für Applikation mit einer Grafischen Oberfläche?
Ich habe irgendwo gelesen, dass man nicht davon ausgehen soll, die GUI Komponenten von Java würden Serialisierbar bleiben.

Ausgenommen sind natürlich applikation deren GUI sich nicht an das dahinterliegende Model anpasst.

Grüße
Dennis
 
M

Marcinek

Gast
Ich verstehe deine Aussage nicht. Hier scheinen einfach mehrere Fachbegriffe in ein Posting gepackt und mit Verben verbunden.

Natürlich kannst du mit RMI mit einer GUI nutzen. Alle Informationen, die auf dem Client angezeigt werden müssen durch den Client selbst abgefragt werden.

Der Server kann nicht sagen. So nun sende ich dir die Daten, die du vor einer Stunde angefragt hast. Dazu eigent sich das klassische RMI nicht.

Der Controller ist einfach in zwei gesplittet. Du würdest einen Teil in der GUI und einen anderen Teil auf dem Server implementieren.

Der Controller im Client würde wirlich nur GUI Elemente auslesen und dann serialisieren und zum Server scicken. Auf keinen Fall würdest du Events der GUI in den Server schicken. DAs muss getrennt sein, sonst würde man sich dazu verleitet führen im Server Textfield.setText() zu machen, was auf keinen Fall funktionieren würde.
 
I

irgendjemand

Gast
ich wüde MVC noch nicht mal so trennen ... sondern alles client-seitig implementieren ...
auf dem server läuft dann vielleicht noch MC *also ohne view* ...
die schnittstellen zwischen beiden stellen würde ich selbst implementieren das man a-sync von einem zum anderen schicken kann *beduetet das eine seite informationen schicken kann ohne das diese von der anderen angefordert wurde*

wenn dann auf dem server eine veränderung des Model festgestellt wird kümmert sich der Controller auf dem server dem Controller auf dem client diese informationen mitzuteilen ...
dieser aktualisiert darauf hin sein lokales Model *zum cachen* und dann entsprechend seinen View ...

aber das gesamte pattern so krass trennen und über mehrere knoten hinweg ausdehnen ... das halte ich dann doch für aufwändiger anstatt eine eigene , schnelle schnittstelle zu implementieren
 
D

Dennis4

Gast
"Alle Informationen, die auf dem Client angezeigt werden müssen durch den Client selbst abgefragt werden."

Das ist genau was ich meine. Die einzige Möglichkeit eine GUI mit RMI zu realisieren heißt der Client muss den Server pollen, ob veränderungen eingetreten sind. Es gibt soweit ich das sehe keine Möglichkeit bei Veränderungen im Model auf dem Server, die GUI entsprechend über diese Veränderungen zu informieren.

Bei mir wäre es so wie "irgendjemand" gesagt hat. Ich habe MC auf dem Server und das V auf dem Client mit einem quasi mini Controller der dem Server die Informationen über die GUI Events vermittelt.

Man stelle sich nun andere Fälle vor, die Client View muss in echtzeit aktualisiert werden, weil es um Millisekunden geht(Beispiel Spiele?), da kann Polling doch nicht die Lösung sein oder doch?
 
I

irgendjemand

Gast
du hast nicht ganz verstanden wie ich das meinte

nach deiner aktuellen auffassung muss der client beim server nachfragen ...

auch wenn ich mich jetzt nicht mit RMI auskenne würde ich jedoch behaupten das eine a-sync verbindung möglich ist ... also das beide seiten zwar in einem thread auf daten vom anderen warten ... aber unabhängig davon auch beliebig daten senden können ...
das sollte mit RMI umsetzt bar sein ...

falls nicht : selbst implementieren
 
M

Marcinek

Gast
Was der TO sucht ist ein RMI Callback.

Aber das ist so nicht vorhanden. Da muss man auf andere Implementierungen zurückgreifen.

Bei kaufmännischen Anwendungen ist das aber imho nicht notwendig und spiele sollten eigene effiziente Protokolle implementieren.
 
D

Dennis4

Gast
Also, ich habe mich mal erkundigt nach RMI Callback.

Danke auf jeden Fall für den Hinweis mit RMI Callback. Ich habe jetzt auf Clientseite dem Client ein Remote Interface verpasst und mit UnicastRemoteObject.exportObject automatisch einen stub erstellt. Jetzt wo der Stub vorhanden ist, wird die GUI nicht mehr serialisiert, sondern nur der Stub, der mit der Grafischen Oberfläche nichts zu tun hat übergeben.

Also zusammengefasst:
Es funktioniert jetzt ohne Polling und nach dem MVC Modell.

Danke an alle.
 
I

irgendjemand

Gast
wesshalb ich ja auch bereits den tipp gegeben habe : verbindung selbst implementieren ...

denn MVC ist wenn überhaupt nur sehr schlecht auf die art und weise ... "trennbar" wie TO es hier versucht ...
 
T

tuxedo

Gast
Wieso selbst implementieren wenn es bereits eine Lösung zum RMI Callback-Problem gibt?? (siehe Link)
 
D

Dennis4

Gast
Danke ich seh mir das auf jeden Fall an wenn es denn soweit ist bis jetzt funktioniert es ja alles^^.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben