2013-01-25 103 views
0

我正在修改/现代化项目,它有一个小的RMI作品,不幸的是我从未与RMI合作过。如何停止RMI客户端?

我无法弄清楚的一件事是,为什么在我最初创建一个RMI客户端后,它一直调用它的自定义SocketFactory构造函数。看起来好像每隔5分钟就会发生一次,即使在客户端和服务器之间没有流量时,我也会看到构造函数被调用。

所以我想必须有某种方式来结束客户端或以某种方式清理它,所以它停止这样做,但我不知道它可能是什么。

它建立RMI连接,像这样:

UnicastRemoteObject.exportObject(this); 
TheServer rmiServer = (TheServer)Naming.lookup(s); // where s is some rmi:// url 

于是我可以访问服务器的方法,它可以叫我的客户端上的方法。

一旦我完成了连接,我应该怎么做才能清理并停止任何线程进行持久化?

我正在检查UnicastRemoteObject,也许我需要使用方法unexportObject?

但是,这个自定义的SocketFactory怎么会被调用呢,在我的项目中绝对没有对它的类名的引用,除非它在背景中通过从客户端的名称派生类名来找到它,东西...

回答

0

您正在看到分布式垃圾收集的效果。如果你完成了存根,只需释放所有本地引用,并让它在本地被垃圾收集。然后,DGC也会停止,并将所有网络活动都停止到该远程对象。

+0

似乎没有工作。我没有任何引用,我仍然看到被调用的socketfactory。 – Trant

+0

多久?当存根被垃圾收集时它会停止。而且你没有别的办法可以做。 – EJP