java.rmi.NoSuchObjectException
Heute erreichte mich die Exception java.rmi.NoSuchObjectException mit der Meldung “No such object in table”. Diese Meldung habe ich zuerst nicht ganz verstanden, denn der Client hat ja zuvor über Lookup das Objekt erfolgreich geholt. Dennoch trat anschließend bei der Verwendung diese Meldung auf.
Das Problem ist jedoch so einfach wie zugleich auch etwas versteckt. Bei einem Lookup des Clients erfolgt dies auf die RMI-Registry. Diese hält die Stubs bereit und bei einem Lookup erhält der Client Informationen wie er zum eigentlichen Remote-Objekt gelangt. Der Lookup war also kein Problem. Bei der ersten Verwendung des erhaltenen Objektes wird nun eine Verbindung zum RMI-Server aufgebaut und dann das Remote-Objekt verwendet. Dies war jetzt nicht mehr da und damit kam es zu dieser Meldung. Aber warum war es nicht mehr da? Ganz einfach: Der Garbage Collector hatte es aus dem Speicher entfernt.
Die Lösung ist daher, dass die Instanz, die beim Erzeugen des UniCastRemoteObjects verwendet wird, mit gehalten werden muß, damit diese nicht vom GC entfernt wird.
on Januar 16th, 2008 at 6:13 pm
Danke für den Tipp!
on April 28th, 2009 at 10:39 am
Top! Danke für die Info