Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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?!
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.
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.