RMI: Wo wird die Methode ausgeführt?

Status
Nicht offen für weitere Antworten.

Angel4585

Bekanntes Mitglied
Hallo,

ich bin ja noch recht neu in Sachen RMI und stehe öfters vor der Frage:
Wo wird diese Methode nun ausgeführt? Auf dem Server oder auf dem Client?

Momentan beschäftigt mich folgender Fall:

Ich erzeuge auf dem Server ein Objekt mit der Methode "public String getName()".
In dieser Methode lese ich aus einer embedded DB auf dem Server einen Wert aus.
Jetzt übergebe ich dieses Objekt über eine Methode dem Client.
Der Client soll nun die Methode "getName()" aufrufen.
Wo wird die jetzt ausgeführt? Auf dem Server?
Also wird versucht den Wert aus der DB auf dem Server auszulesen, oder wird versucht diese DB auf dem Client anzusprechen, obwohl es die hier ja nicht gibt?

Gibt es etwas womit ich mir generell merken kann wo eine Methode ausgeführt wird?
 
das hängt davon ab, wer die Operation aufruft,

ein Objekt kann nicht fliegen, es existiert in genau einer VM, entweder beim Server oder beim Client,
wenn der Server damit arbeitet, dann ist der Aufruf beim Server,

wenn das Objekt an den Client übertragen wird, dann passiert alles weitere damit beim Client
 
Interface sind nur dafür da, dass du nicht die genaue Implementierung kennen musst,
das hat auf das Objekt/ die Übertragung und die Ausführung von Operationen keinen Einfluss
 
OK, und wie setze ich es dann um das wenn die Methode "getName" aufgerufen wird, in jedem Fall der Datenbankaufruf auf dem Server stattfindet und das Ergebnis zurückgibt?
Dann müsste ich ja quasi in das Interface vom Server eine Methode "getName(MeinObjekt)" einfügen oder?
 
das einfachst ist, im Client nicht das Objekt zu befragen, sondern direkt den Server, ja,
oder beim Objekt-Laden dafür sorgen, dass der Name vorgeladen und im Objekt gespeichtert ist

der Client sollte generell keinen Code potentiell zur ausführung haben, der DB-Operationen enthält,
wenn ein Objekt DB-Operationen in seiner Klasse hat, dann solche Objekte am besten nicht aus dem Server rauslassen
 
hmm..
kann ich auch das Interface des Objektes auf dem Server an den Client übergeben und daraus ein anderes Objekt erzeugen?

So das das Objekt auf dem Server in der Methode direkt aus der DB liest und das Objekt auf dem Client eben die Funktion des Servers aufruft.. geht das?
 
Du implementierst einfach zwei Arten von Objekten (die dasselbe Interface implementieren), eine Objektart, die du an den Client überträgst (zum nachladen aus der DB werden Servermethoden aufgerufen) und die andere Objektart, die du lokal auf dem Server benutzt (kann direkt aus er DB nachladen). Um die eine oder andere Objektart zur Laufzeit zu erzeugen, empfehle ich das Factorypattern bzw. Abstrakte Fabrik.
 
mit Pattern ist es da nicht getan, man braucht automatische Wrapper,
die für beliebige Operationen die gesamte RMI-Übertragung im Hintergrund abwickeln

sowas baut man kaum mal eben selber
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben