首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java如何处理RemoteException

java如何处理RemoteException
EN

Stack Overflow用户
提问于 2022-10-12 21:21:11
回答 1查看 60关注 0票数 1

我已经检查了一些Java示例。但是,它们都没有演示如何从我们定义的远程接口引发的潜在服务器故障或RemoteException中恢复。我也找不到任何相关的信息。

例如,

代码语言:javascript
复制
public static void main(String[] args)
{
    try
    {
        Server server = new Server();
        Hello stub = (Hello) UnicastRemoteObject.exportObject(server, 0);
        Naming.rebind("rmi://localhost/Hello", stub);
        System.out.println("Server is up.");
    }
    catch (RemoteException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (MalformedURLException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

异常被捕获后,服务器就会退出。在此,当引发此类异常时,服务器是否会死亡?我们能从这样的故障中恢复吗,比如重新启动服务器?但是怎么做呢?

谢谢,

为了澄清,最初我认为在远程接口中指定的RemoteException可能会在这里捕捉到。但是经过一些实验,我发现它们实际上会出现在客户端,应该由客户端来处理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 12:12:24

您的RMI服务器只在UnicastRemoteObject.exportObjectNaming.rebind中的初始化/启动时抛出该异常。这里的任何错误都不可能仅仅通过运行一个循环来再次执行相同的操作就可以恢复。还有其他问题要调查。

如果服务器通过了exportObject/rebind,就会看到"Server“消息,执行将通过catch块,main(String[] args)将正常结束。甚至处理[main]的线程也可能在这里结束。

但是,JVM进程不会退出,因为有非守护进程线程正在运行。服务器中的任何异常都不会传递回主服务器中显示的catch(RemoteException e)块,因为main()已经结束。

在实时系统中,我观察到开发人员使用了几种措施来解决RMI服务器的问题:

instantly)

  • periodic服务器启动脚本使用有限的循环来重试如果它死了(如果它在很长一段时间后死了,而不是如果它失败了,operation

  • process往返rmi客户端到服务器调用的操作非常简单,以证明RMI服务器运行正常,

  • 运行多个rmi服务器的实例,并在不同的时间故意重启重新启动周期,以确保rmi服务器上的100% operation

  • process监视器为手动intervention

触发警报。

最重要的是,您需要有效的日志记录,这样您就可以诊断它后来死亡的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74048113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档