RMI-Aufrufe

spitzname

Mitglied
Hallo, ich habe folgende Frage: Kann man bei RMI-Aufrufen Parametern per Referenz übergeben?

Ich sehe da eigentlich kein problem die Frage kann man also klar mit ja beantworten, oder?


würde mich über Tipps freuen
Gruß
 

Murray

Top Contributor
Ich denke eher, dass die Antwort "nein" lauten muss - die Parameter werden beim RMI-Call ja serialisiert und auf der anderen Seite wieder als neue Instanz deserialisiert, so dass das Objekt auf der Empfängerseite immer nur eine unabhängige Kopie des Parameters der Server-Seite sein kann.
 
Zuletzt bearbeitet:

spitzname

Mitglied
Ah so verstehe, also wird nur local Referenzübergabe verwendet und bei einem RMI-Aufruf werden die Instanzen von localen Klasen per Kopie übergeben, ist das so korrekt?
 
Zuletzt bearbeitet:

spitzname

Mitglied
Hallo, erstmal danke für die Antworten, ich habe einwenig rumgestöbert und folgendes in einem Buch gefunden:

"Ein weiterer Vorteil von RMI
besteht darin, dass alle gängigen objektorientierten verteilten Kommunikationsmechanismen
auch die Parameter übergabe per Objektreferenz erlauben
(Referenzparameter-Semantik); man ist also nicht mehr auf die häufig zu
restriktive Wertparameter-Semantik beschränkt sondern es können Daten auch als Referenz auf das entsprechende Objekt (Referenzparameter-Semantik) als Aufrufparameter und Ergebniswerte
von Methoden übergeben werden..

also ist das doch möglich, oder habe ich bei dem Ausschnitt aus dem Buch was falsch verstanden:bahnhof:

Gruß
 
T

tuxedo

Gast
Laut RMI Sourcecode werden alle Methoden-Parameter und Rückgabewerte serialisiert. Damit man hier mit Referenzen arbeiten kann, müsste RMI für die entsprechenden Objekte eine Remote-Referenz anlegen, so dass änderungen in VM1 an die VM2 weitergeleitet werden. Und soweit ich das im Code gesehen/verstanden habe, ist das nicht der Fall. Zumindest nicht mit den Standardtypen/Objekten. Du kannst natürlich Callback-Objekte anlegen. Das sind dann Objekte die von UnicastRemoteObjekt erben, oder "exportiert" wurden. Wenn du die von VM1 an VM2 schickst, kann VM2 in der tat das Objekt manipulieren (über Methodenaufrufe, nicht über ändern von Instanzvariablen) und die Manipulation wird in VM1 sichtbar (da die Methodenaufrufe entsprechend in die andere VM delegiert werden).

Alles in allem: Das Stichwort heisst hier Callback. Aber da hat RMI so seine "Probleme" mit (siehe auch: SIMON - Start - root1.de - Software Engineering)

Gruß
Alex
 

spitzname

Mitglied
Hallo, ich habe was gefunden das meine Frage beantwortet :) und zwar folgendes:

Objekte können nur dann als Referenz übergeben werden, wenn es sich dabei selbst um Server-Objekte handelt. Statt dem Wert wird hierbei lediglich das Proxy-Objekt (der Stub) übergeben, der alle Informationen darüber enthält, wie das Server-Objekt kontaktiert wird. Für Server-Objekte gilt wiederum:

-Sie müssen das Interface java.rmi.Remote implementieren bzw. ein Interface, das davon abgeleitet ist.
-Sie müssen von der Klasse UnicastRemoteObject abgeleitet sein.

Wenn diese beiden Punkte zutreffen, ist eine Übergabe als Referenz möglich.

Trotzdem danke für eure Hilfe

Gruß
 
T

tuxedo

Gast
Das deckt sich doch so ziemlich genau mit dem was ich geschrieben ab.
Das ganze klappt übrigens auch mit Objekten die man als Remote-Objekt exportiert (google hilft).

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S RMI RMI Aufrufe kommen nicht mehr durch Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben