java - 从 'remote' 异常中的通用异常链工具中排除

标签 java jms rmi rpc

考虑任何“远程”异常:
javax.jms.JMSExceptionjava.rmi.RemoteException
两者都通过具有详细信息链接异常属性来排除异常链接的常见模式。
当您打印包含此异常之一的堆栈跟踪时,您将得到修剪的堆栈跟踪。要获得完整堆栈跟踪,您需要额外用铃鼓跳舞。

远程异常要这样设计的原因是什么?

编辑:

我正在浏览 java 1.6.0_26 的源代码。查看java.rmi.RemoteException 的两个参数构造函数public RemoteException(String s, Throwable Cause)。你可以看到下一个代码 initCause(null);//禁止后续的 initCause。这似乎是 Java SE 6 有意做出的决定。
但是根据common practice initCause() 的宏伟目标是构建异常链!
我不记得来源,但我对创建自定义异常的最佳实践充满信心:
1. 暴露父类(super class)的所有构造函数
2. 不要中断异常链(换句话说,调用Throwable.initCause())。这可以通过调用 super 构造函数来简单地实现。

谢谢。

最佳答案

猜猜是时候更新你的java了:)

As of release 1.4, this exception has been retrofitted to conform to the general purpose exception-chaining mechanism. The "wrapped remote exception" that may be provided at construction time and accessed via the public detail field is now known as the cause, and may be accessed via the Throwable.getCause() method, as well as the aforementioned "legacy field."

http://docs.oracle.com/javase/1.5.0/docs/api/java/rmi/RemoteException.html

编辑:

同时回答你的问题:这是一个糟糕的设计决策,在 1.4 中得到了纠正

关于java - 从 'remote' 异常中的通用异常链工具中排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292216/

相关文章:

java - 使用 Renjin 将 POJO 对象的 ArrayList 转换为 R 数据框

java - 为什么我的二叉树不显示正在插入的内容?

java - Tomcat 中的 JMS : creation a queue per client?

java - 在 Java 中使用 RMI 实现领导者选举算法

Java JSSE RMI SSL 文件被拒绝访问

java - 调度程序客户端启动失败 -> 无法获取远程调度程序的句柄 : Sched1_$_NON_CLUSTERED

java - 我既没有看到按钮上的标签,也没有看到它被涂成绿色。这是为什么 ?

Java 嵌套类型场景

.net - .NET 中是否有等效的 JMS?

java - 使用java对请求进行排队和批处理