java rmi服务 停止_终止Java RMI服务器应用程序

我已经使用Java RMI设置了客户端/服务器项目.下面我显示了部分实现.一世

使用启动服务器

ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/C", "start /B java -jar myServer.jar --start);

this.myProcess = processBuilder.start();

我向服务器添加了一个main方法来处理命令行调用.

服务器启动并正常运行.客户端能够按照我的预期进行连接和执行.

当我尝试杀死服务器时,出现了我的问题.这需要从外部完成.哪个对象

先前启动的过程不再可用.实际停止服务器的主要方法

服务器类的实例调用stop方法(请参见下文).现在,此方法会杀死RMI,但不会

至少停止JVM的运行.该过程仍然可用,需要从

任务管理器(在Windows上).

我在实现过程中会错过某些事实吗?为什么进程不停止运行?

public class MyServer {

// ...

public void startServer() throws RemoteException {

// the RMI registry

Registry registry;

try {

// find the registry

registry = LocateRegistry.createRegistry(portRMI);

} catch (Exception e) {

// if the registry does not yet exist, try to create a new registry

// entry or use an existing one

registry = LocateRegistry.getRegistry(MyConstants.HOST_NAME, portRMI);

}

// create the object

servantObject = new MyServant();

// bind the object to the server

registry.rebind(MyConstants.SERVER_NAME, servantObject);

}

public void stopServer() throws RemoteException {

try {

// access the service

Registry rmiRegistry = LocateRegistry.getRegistry(MyConstants.HOST_NAME, portRMI);

MyService myService = (MyService) rmiRegistry.lookup(MyConstants.SERVER_NAME);

rmiRegistry.unbind(MyConstants.SERVER_NAME);

// get rid of the service object

UnicastRemoteObject.unexportObject(myService, true);

// get rid of the rmi registry

UnicastRemoteObject.unexportObject(rmiRegistry, true);

} catch (NoSuchObjectException e) {

// ...

} catch (NotBoundException e) {

// ...

}

}

public static void main(String[] args) {

// handle arguments and call either startServer or stopServer

}

}

public class MyServant extends UnicastRemoteObject implements MyService {

// ...

}

public interface MyService extends Remote {

// ...

}

解决方法:

您应该在RMIServer中添加可用的自写RMIService接口,以便希望停止正在运行的服务器的程序指示其停止.

您尝试停止服务器的应用只是解除了某些对象的绑定,因为它不是正在运行的rmi服务器进程本身,所以不会产生很大的影响.

如果您的rmi服务器是进程a,则应编写一个以进程b运行的应用程序(使用rmi),以发送消息以使进程a停止它.

标签:console,rmi,java

来源: https://codeday.me/bug/20191122/2062358.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值