2009-07-06 105 views
2

使用RMI将String对象从WebAppA传递到WebAppB.WebAppB是RMIServer,而WebAppA是RMIClient。我在WebAppB中添加了ContextListener,以便在tomcat中初始化上下文时rmi服务立即启动。关闭rmi注册表

unexportObject(remoteObj,true); 
LocateRegistry.getRegistry(3232).unbind("MessagePath"); //MessagePath - name of the remote reference 

但即使是aforeseen语句的执行后,RMI是监听在端口传入的请求3232.I看到:在Tomcat中,我试图关闭/的contextDestroyed方法,使用下面的语句关闭RMI在命令提示符下使用“netsat -ano”。请帮助我关闭RMI服务。

回答

1

getRegistry仅返回存根,因此请使用unreportObject中的createRegistry返回的实例。然而,在我的情况下,这并没有帮助 - 注册表不活跃了,但插座仍然是开放的,听:-(

0

createRegistry不会当你试图关闭注册表工作

Registry registry = LocateRegistry.createRegistry(3232); 

,这将抛出一个BindException当注册表已在运行,所以你不能在创建对象

UnicastRemoteObject.unexportObject(registry, true); 

但是使用它,即使你使用

Registry registry = LocateRegistry.getRegistry(3232); 

您只是得到存根,不能用作导出对象的参数。

其引起我关注的原因是因为我只希望启动注册表,如果我可以检查它尚未开始。我还没有找到办法做到这一点!

+1

* * * * * * *可以导出* createRegistry()`。要确保它正在运行,请尝试`createRegistry()`:如果得到`BindException`,请调用`getRegistry()`。当然,你只能在前一种情况下出口,但在后一种情况下,它是其他人的注册局,因此他们有责任对其进行导出。 – EJP 2011-12-23 03:50:39

-1

我发现从任何进程关闭注册表(为此事关停其在注册表中绑定任何绑定过程)

任何延伸远程和你最终想要的接口的方式杀死还应扩展以下接口:

public interface PIDSupplierInterface extends Remote { 
    String getPID() throws RemoteException; 
} 

你这个创建的每个服务器类作为其接口的一部分,必须然后实现GETPID()。那么你必须做的是返回进程ID。谷歌“getpids”的Windows,或去这里:www.jroller.com/santhosh/entry/get_current_java_process_id。据我所知,获得PID更直接。然后(在Windows中)你想去

String PID = myServer.getPID(); 
String[] a_command = { "taskkill", "/pid", PID }; 
Runtime.getRuntime().exec(a_command, envp, dir); 

杀死注册表本身的PID,首先打开注册表(编程)时,简单地去

PIDSupplierInterface stub = PIDSupplierInterface)UnicastRemoteObject.exportObject( 
new PIDSupplierServer(), 0); 
reg.bind("regKiller", stub); 

其中PIDSupplierServer是一个类它只实现PIDSupplierInterface。

然后,当你想杀死任何进程RMI注册表只是去

PIDSupplierInterface regProcess = (PIDSupplierInterface)reg.lookup("regKiller"); 
String regPID = regProcess.getPID(); 
String[] a_command = { "taskkill", "/pid", regPID }; 
Runtime.getRuntime().exec(a_command, envp, dir); 

了reg已经从系统中消失了。或者由于某种原因你的问题更复杂?欢迎任何评论。

+0

你究竟如何说服RMI Registry来实现`PIDSupplierInterface`?并体现`PIDSupplierServer`? – EJP 2011-12-23 03:52:34