RMI RemoteObjekt in Quellobjekt wandeln

Status
Nicht offen für weitere Antworten.

SegFault

Bekanntes Mitglied
Gibts dafür eine möglichkeit. Also der Server der das RemoteObjekt anbietet, bekommt dieses in einer Funktion geschickt und wandelt es wieder in das dahinterstehende basisobjekt um? Oder sollte ich mir dafür eine hashmap bauen welche dem RemoteObjekt das eigentlich objekt zuordnet und dies dann nehmen. Dann muss ich aber dafür garantieren das es, sofern auf clientseite freigegeben auch auf Serverseite rausgeht. Dazu muss ich unreferenced implementieren. Das Problem was ich dann aber habe ist, das ich in unreferenced nicht mehr weiss welcher Stub jetzt gelöscht wurde. Ich kann ja nicht einfach alle Objekte dieser Klasse aus der Hashmap schmeißen.
 
T

tuxedo

Gast
Also der Server der das RemoteObjekt anbietet, bekommt dieses in einer Funktion geschickt und wandelt es wieder in das dahinterstehende basisobjekt um?

Wie soll das denn gehen? Der Server wird vom Client ebenfalls wieder einen Stub erhalten. "Umwandeln" geht nicht. Wenn dann nochmal nen Proxy drum rum schnallen und alle Aufrufe zum echten Objekt schicken. Aber wandeln? Dann gäbe es wohl zwei absolut identische Instanzen eines Objekts. Und das ist ja nicht wirklich möglich oder sinnvoll.

Was hast du denn vor dass du so ein verrücktes Konstrukt suchst?!

- Alex
 

SegFault

Bekanntes Mitglied
Sorry, muss mich allgemein für Gestern entschuldigen. Mir sind die einfachsten Sachen nicht mehr eingefallen. Nach ca 10 Minuten Pause gings dann wieder. Ich werds mit HashMaps machen.
Der Client liefert mir den Stub, im Server kann ich in der HashMap raussuchen welches wirkliche Objekt zu den Stub gehört und darauf spezielle Funktionen ausführen die der Client nicht direkt können soll. (Identifikation über den Stub) und wenn der Stub freigegeben wird kann ich ja über den this pointer in der map nach dem richtigen objekt suchen und dieses dann löschen.
 
T

tuxedo

Gast
Ah, jetzt weiß ich worauf du hinaus willst ...

Ich hab das bisher immer anders gelöst:

Der Server bietet ein RemoteObjekt an. Dieses RemoteObjekt kennt nur eine Methode: "login()".

Der Client identifiziert sich mit Benutzername, Passwort etc. und bekommt dann ein weiteres Remote-Objekt zurück. Darin enthalten sind die "basismethoden" die jeder Nutzer ausführen darf. Je nach Authorisationslevel kann der Client dann mit getter-Methoden von diesem Remote-Objekt weitere Remote-Objekte holen die dann weitere Methoden mitbringen. Hier mal ein kleines Beispiel:

Code:
RemoteObject: Server
-> login(user, pw) -> returns: UserSession

RemoteObject: UserSession
-> some User related methods ...
-> getMemberSession() -> returns: MemberSession, throws: AccessNotAllowedException
-> getAdminSession() -> returns: AdminSession, throws: AccessNotAllowedException
-> isMember() -> returns: true/false
-> isAdmin() -> returns: true/false

RemoteObject: MemberSession
-> some Member related methods

RemoteObject: AdminSession
-> some Admin related methods


Die UserSession wird beim Login für jeden Client einzeln Instantiiert und im Server in einer Map gespeichert. MemberSession und AdminSession werden ebenso für jeden Client einzeln Instantiiert. Deren Methoden greifen dann auf Funktionen im Server-Basis-Code zu. Den kann man dann nach belieben z.B. als Singleton etc. auslegen, je nachdem wie man's braucht.

Gruß
Alex
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben