RMI



  • Hallo
    Ich möchte ein chat-system aufsetzen. Dazu habe ich einen Client und ein Server. Der Server stellt dem Client über RMI methoden zur verfügung damit er sich einloggen und messages an den server schicken kann. Der Server verwaltet alle Clients und messages. Der Server leitet alle Messages an alle Clients weiter, damit immer alle den aktuellen stand haben. Dieses Update würde ich gerne mit einem Observer lösen. Wie kann ich es machen das der Server die update methode des Clients aufrufen kann?
    Muss der Client ebenfalls eine Remote methode anbieten (fände ich nicht so gut)?



  • day schrieb:

    Wie kann ich es machen das der Server die update methode des Clients aufrufen kann?
    Muss der Client ebenfalls eine Remote methode anbieten (fände ich nicht so gut)?

    Hallo day,

    also du hast einen Server und einen Client. Der Client ruft eine Methode auf und bekommen einen Rückgabewert zurück. So weit so gut... 😉
    ... Ich glaube dass dein Problem eigentlich eher mit dem Observer-Pattern zusammenhängt. Damit das ganze funktioniert, muss die Klasse ebenso dem SOAP (oder womit du den RPC machst) bekannt sein, d.h. im Deployment-Descriptor definiert sein. Also definiere 2 Interfaces:
    * Subject mit Methoden
    - addObserver(Observer o)
    - remoteObserver(Observer o)

    * Observer mit Methoden
    - update(Subject s)

    Dann implementiere Subject in deiner Serverklasse und Observer in der Client-Klasse. Die Serverklasse kennt dann den Client (also hat eine Referenz auf ihn), denn sie hat ja per addObserver den Client registriert (z.B. in einer Collection gespeichert). Daher z.B. beim Einloggen des Clients wird automatisch die Methode addObserver auf dem Server aufgerufen. D.h., um Clients dann ohne expliziten Request zu benachrichtigen, muss man Referenzen auf die Clientklasse halten. ... Und wenn der Server den Clients was mitteilen will, läuft er alle Referenzen durch und auf jeder Referenz ruft er die Methode update auf. Ich glaube, solange die Klasse sauber definiert werden (Default-Konstruktor, getter- und setter-Methoden etc.), sollte doch möglich sein, sie dann per Deployment Descriptor bei der Tomcat (verwendest du?) anzumelden.
    Also IMHO könnte es so funktionieren.

    lg
    kati


Anmelden zum Antworten