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:
der RMI Server
hat dann eine HashMap <Observer, ClientManager> wobei ClientManager so eine Klasse ist um die Daten vom Client zu verwalten.
dann hat der Server eine test funktion:
Nun rufe ich von meinem Client (Window - JFrame - Observer) immer diese Server funktion test(Observer o) auf.
Also im Client steht dann so etwas:
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:
woher kommt den das, bzw. warum
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);
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