java rmi服务器端异常处理

时间:2011-06-09 23:44:27

标签: java rmi

您是否认为有可能记录服务器端异常?
在服务器端考虑这样的代码:

catch (Exception ex) {  
    throw new IllegalStateException (ex);  
}  

该异常是由客户端调用引起的。当然,会在客户端注意到异常。有没有办法在服务器端以某种方式处理它,没有捕获运行时异常?某种处理程序,例如,我可以记录异常的堆栈跟踪吗?

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以将服务器实例包装在java.lang.reflect.Proxy中,并在代理中实现服务器端日志记录。只需确保导出代理,而不是服务器实现。

答案 1 :(得分:1)

有些RMI系统属性会自动为您记录服务器端异常。请参阅RMI主页上的链接。

答案 2 :(得分:0)

通常,顶级服务器方法将具有throws Exception

如果使用try-catch异常在此方法中包装“do it”代码,并且可以将其记录在那里仍然抛出它。

public Response myServerTopLevelMethod() throws Exception {
    try {
        myImplCode();
    catch (Exception e) {
        Log.error(e);
        throw e;
    }
}

现在您可以选择做什么。基本选项是:

  1. 你可以重新抛出异常(如上所述)
  2. 你可以玩得很好并返回一个“发生了不好的事情”的回复 - 就像许多网络服务器一样
  3. 以下是选项2的示例:

    public Response myServerTopLevelMethod() throws Exception {
        try {
            myImplCode();
        catch (Exception e) {
            Log.error(e);
            return new Response("Yikes! Something exploded... we'll look into it.");
        }
    }
    

    顺便提一下,选项1的“Log + throw”是你想要做的几次之一;在顶级方法。在其他时候,您通常要么 log 投掷,而不是两者。