Erzeugung von Objekten in Remotemethoden

DrJim

Mitglied
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

Bekanntes Mitglied
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.
 
T

tuxedo

Gast
@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 :oops:

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
 

Ähnliche Java Themen


Oben