# Erzeugung von Objekten in Remotemethoden



## DrJim (13. Dez 2010)

Schönen guten Tag,

bei der Fehlersuche in meinem RMI-Programm scheint gerade etwas nicht zu funktionieren, was ich bisher immer als gegeben vorrausgesetzt hatte. 

Server übergibt ein objektA der KlasseA (extends Remote)  und ein objektB der KlasseB (extends Remote) an den Client. Der Client ruft nun eine Methode tueWas(KlasseA objektA) bei objektB auf und übergibt als Parameter ObjektA. Soweit alles kein Problem.

Nun wird in der Methode objektB.tueWas(objektA)  eine Methode von objektA aufgerufen: tueAuchWas(). In tueAuchWas() wird ein objektC der KlasseC erzeugt und zurückgibt. Dieses Objekt verlässt nie den Server, aber ist halt ein Rückgabewert eine Remotobjekts. Daher erhalte ich eine Exception, dass KlasseC serializable sein muss. Kann man das elegant umgehen, indem man dem Programm irgendwie klar macht, dass das objektC nie den Server verlässt und daher nicht serializable sein muss?

Ich hoffe, man konnte verstehen, was mein Problem ist. ;-)

Viele Grüße!


----------



## andiv (13. Dez 2010)

Wenn ObjektC ein privates Feld von KlasseA/KlasseB ist und nicht serialisiert werden soll, dann solltest du dieses Feld mit dem Schlüsselwort transient kennzeichnen.


----------



## tuxedo (14. Dez 2010)

@Jim

Das Design hinkt da etwas:

KlasseA#tueAuchWas() ist eine Methode in einem Remote-Objekt, welche durchaus Remote genutzt werden kann. Ergo muss alles was aus "tueAuchWas()#" raus fällt, serialisierbar sein.
Nur du benutzt das scheinbar anders, nämlich NUR auf Serverseite 

Wenn es auszuschließen ist, dass diese Methode jemals ausserhalb des Servers aufgerufen wird, dann sollte dein Design wiederspiegeln: Pack die Methode in eine Nicht-Remote Klasse.

Alles andere führt nur zu hässlichen Krücken :autsch:

Gruß
Alex


----------

