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
on September 24th, 2010 at 11:26 am
Hi ich habe das selbe Problem bei einer Application welches ich nicht selber entwickelt habe.
Wie klappt es den mit dem halten es Objektes. Wie kann ich es realisieren?
Muss man da GC Werte setzen ?
Gruß
Air-Tan
on September 24th, 2010 at 1:25 pm
Das Problem ist grundsätzlich ein Programmierproblem und sollte bzw. muss im Programm auch behoben werden.
An den Einstellungen kann man maximal das Ganze so verändern, dass er gar nicht aufräumen muss. Dafür brauchst Du dann leider viel RAM oder ein Programm, was wenig Objekte erzeugt / vergisst. Kann mir aber schwer vorstellen, dass dies klappt. Eine andere Möglichkeit ist mir leider nicht bekannt.