JFrame hat immer andere Referenz über RMI

socke999

Erfahrenes Mitglied
Hallo, also ich mach so ein größeres Client - Server Projekt und verwende dabei RMI.

Keine angst, es ist keine RMI frage oder so was, denn RMI klappt.

Nur so als zusatz Info: Ich verwende das Observer Pattern (MVC) und dabei is der server das Model, der Client dann nur mehr ein JFrame (View und Controller).

ich habe im Client eine klasse:
Code:
public class Window extends JFrame implements Observer{}

der RMI Server
hat dann eine HashMap <Observer, ClientManager> wobei ClientManager so eine Klasse ist um die Daten vom Client zu verwalten.
Code:
private Map <Observer, ClientManager> clientMap;

dann hat der Server eine test funktion:
Code:
	public String test(Observer o) throws RemoteException {
		System.out.println("Observer: "+o);
		return "test string";
}

Nun rufe ich von meinem Client (Window - JFrame - Observer) immer diese Server funktion test(Observer o) auf.

Also im Client steht dann so etwas:
Code:
server.test(this);
wobei this natürlich die Referenz vom Window (Client) selbst ist.

NUN das komische bzw. mein Problem:
ich gebe in der Funktion test immer die Referenz vom Aufrufenden Observer Objekt aus. Jedoch ist die immer eine andere, obwohl ichs immer von selben Client aufrufe.

z.B. sieht die Ausgabe so aus:
  • at.ac.uibk.informatik.zenrm.presentation.Window[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout ... usw.
  • at.ac.uibk.informatik.zenrm.presentation.Window[frame1,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout ... usw.
  • at.ac.uibk.informatik.zenrm.presentation.Window[frame2,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout ... usw.

woher kommt den das, bzw. warum
 
Hi,
ich bin zwar nicht RMI bewandert ... aber lass mich Dein Problem nochmal in meinen Worten zusammenfassen bzw verifizieren.
Du rufst vóm Client aus eine Funktion auf, die den RMI-Server um eine Referenz bittet.
Du würdest erwarten, dass diese referenz immer die selbe ist, da die Referenzen zentral beim RMI-Serverteil liegen und in einer Map gespeichert werden.
(richtig verstanden?)

Frage: Hast Du schonmal geschaut, was bei Deiner Testfunktion auf Deinem RMI-Server ankommt?
Ich nehme an, dass das Objekt Observer immer wieder serialisiert und zum RMI-Server wieder mittels Deserialiserung gelangt. Das würde dann bedeuten, Dein RMI-Server bekommt immer munter ein neues Observer-Objekt.
Kann das sein?
 
Zurück