我正在为JAVA中的论文开展一个项目,该项目要求从抽象语法树生成自动RMI。我使用RMI作为
`public int createProcess(CompilationUnit cu){
//Some Code Here
return processid;
} `
用于在每个节点上从AST生成RMI。它将自动生成接口文件和AST中的所有java文件,并将所有方法放在这些文件中。我可以使用流程构建器执行javac
,rmic <remote-class>
,rmiRegistry
命令。但是
如何在进程完成后销毁和取消绑定远程对象?我是否必须将此代码放在控件退出的每个文件的末尾?
public void exit() throws RemoteException
{
try{
// Unregister ourself
Naming.unbind(mServerName);
// Unexport; this will also remove us from the RMI runtime
UnicastRemoteObject.unexportObject(this, true);
}
catch(Exception e){}
}
我必须在每个远程方法/类创建后执行rmiRegistry,否则它会自动将后来的远程方法/类添加到注册表中,如果它已经处于执行状态(意味着如果processbuilder已经在执行命令&#34; rmiRegistry&#34;)?例如,如果nodeA在nodeB上创建Process1(RMI类),然后通过Processbuilder使用命令执行它,则rmiRegistery将处于运行状态。现在,如果NodeA想在NodeB上创建另一个Process2,我是否必须停止rmiRegistery的实例并重新运行它,或者没有必要这样做,Registery会检测到&amp;自动添加新绑定?
我是第一次与RMI合作,所以没有任何以前的经验或知识。
道歉,我的问题似乎不清楚,所以我试图通过编辑提出更多解释? 遵循本教程Link答案 0 :(得分:0)
1如何在进程完成后销毁和取消绑定远程对象?
见2,但我不知道你为什么要这样做。让它们存在并绑定到注册表。
2我是否必须将此代码放在控制退出的每个文件的末尾?
是的,如果你想要它执行,否则没有。但是,不要产生空的捕获块。
3我必须在每个远程对象创建后执行rmiRegistry
不,你必须在包含过程开始时启动它一次。最简单的方法是通过LocateRegustry.createRegistry()。