RMI: Client-Objekt auf Server

Winnetoupopper

Grünschnabel
Hi,

ich teste gerade RMI anhand eines kleinen Chat-Programms.
Soweit alles super, nur werden "System.out.println"s der Clients auf dem Server ausgespuckt..

Etwas genauer:
Als Schnittstellen gibts 2 Interfaces, den
"ServerChatKommunikator", betreffende Methode ist

Code:
public void sendeNachricht( ClientChatKommunikator pAbsender, String pNachricht ) throws java.rmi.RemoteException

Dazu das clientseitige Pendant
"ClientChatKommunikator" mit

Code:
empfangeNachricht( String pNachricht ) throws java.rmi.RemoteException


Der Server wird mit sendeNachricht() angehauen, diese Nachricht an alle angemeldeten Clients zu senden. Mittels empfangeNachricht() natürlich...

In empfangeNachricht() (CLIENT) steht erstmal ein System.out.println drin, der wird allerdings vom Serverprozess ausgespuckt.. Das versteh ich nicht. Wurde hier mein "richtiges" Client-Objekt auf den Server kopiert und dort ausgeführt? Das soll aber schon auf dem Client bleiben! Wie komm ich jemals auf meine Oberfläche?

bin für jede Hilfe dankbar ;)
 
na gerne..

Da ich vermute, dass es daran liegt, dass ich keine Ahnung hab, was persistente und transiente Objekte sind, noch schnell ein Tip:
Das Client-Interface ist von Remote und Serializable vererbt.
(ohne, dass ich mir von der Bedeutung von Serializable im Klaren wäre)

So und nun die Methode, die vom Client selbst angestoßen wird:

SERVER:
Code:
public void sendeNachricht(ClientChatKommunikator pAbsender, String pNachricht)
		throws RemoteException
{
	// Eine Nachricht wird erstellt:
	String tNachricht = new String(pAbsender.getName() + ":  " + pNachricht);
	
	// und an alle angemeldeten Clients gesendet
	for (int i = 0; i < clients.size(); i++)
	{
		clients.get(i).empfangeNachricht(tNachricht);
	}
}
(clients ist ein typsicherer Vector, in dem alle angemeldeten Clients abgelegt sind)


CLIENT
Code:
// ClientChatKommunikator
public void empfangeNachricht(String pNachricht)
{
	System.out.println("Client::empfangeNachricht");
}

Und genau dieses println wird vom Serverprozess abgelegt...
Hilft das? *g*
 
Zuletzt bearbeitet:
Konnte durch oberflächliche Recherchen und T&E dann doch den gewünschten Effekt erreichen..

Ich habe die Implementierung meines Client-Interfaces von der Klasse PortableRemoteObject abgeleitet und im Nu funktioniert es..

Noch ein Tip, was da passiert ist? Ich hab nur wage Vermutungen ;)
 
Zurück