# RMI-Aufrufe



## spitzname (28. Jan 2011)

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 (28. Jan 2011)

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.


----------



## spitzname (28. Jan 2011)

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?


----------



## Murray (28. Jan 2011)

Ein RMI-Call erfolgt doch i.d.R. zwischen verschiedenen VMs; wie sollte denn da eine Referenz übergeben werden?


----------



## spitzname (28. Jan 2011)

Ok alles klar, danke.


----------



## spitzname (29. Jan 2011)

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ß


----------



## tuxedo (30. Jan 2011)

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 (1. Feb 2011)

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ß


----------



## tuxedo (1. Feb 2011)

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


----------

