August 16th, 2007

java.rmi.NoSuchObjectException

Posted by frank in Java

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.

4 Responses to ' java.rmi.NoSuchObjectException '

Subscribe to comments with RSS or TrackBack to ' java.rmi.NoSuchObjectException '.

  1. Babysitter said,

    on Januar 16th, 2008 at 6:13 pm

    Danke für den Tipp! :grin:

  2. TheT said,

    on April 28th, 2009 at 10:39 am

    Top! Danke für die Info :grin:

  3. Air-Tan said,

    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

  4. frank said,

    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.

Leave a reply

:mrgreen: :neutral: :twisted: :shock: :smile: :???: :cool: :evil: :grin: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: