RMIでNoSuchObjectExceptionが出る件

リモートオブジェクトを取ってきてメソッドを呼び出すときに"no such object in table"とかいいつつ例外が出る件。

interface RmiServer extends Remote{
}

などというRMIの定義があるとして

class SomeClass{
  RmiServer server;
  void someMethod(){
    RmiServer localServer = new RmiServerImpl();
    server = (RmiServer)UnicastRemoteObject.exportObject(localServer, 0);
    Registry reg = LocateRegistry.getRegistry(java.rmi.registry.Registry.REGISTRY_PORT);
    reg.rebind("server", server);
  }
}

などとRMIレジストリーに登録してると、呼び出し側がメソッドを呼びだすときにNoSuchObjectExceptionが出たり出なかったりする。
結局、exportObjectしてできたオブジェクトは、元になるサーバーオブジェクトへの参照を持っていないために、上のコードだとlocalServer変数に割り当てたサーバーオブジェクトがGCされて、いざメソッドが呼び出されたときに例外が出るという話。
悩まされました。