为什么EJBException不使用Throwable.cause?

时间:2015-08-05 08:57:55

标签: java ejb

很长一段时间我想知道为什么 EJBException 不使用标准的 Throwable.cause 字段来达到它包装的异常?

使原始根本原因复杂化

会变得复杂
private String getRootCauseErrorMessage(final Exception ex) {
    Throwable currentException = ex;
    Throwable nextException = null;
    do {
        if (nextException != null) {
            currentException = nextException;
        }

        /* For some reason EJBException stores cause in a separate field rather the all generic Throwables */
        if (currentException instanceof EJBException) {
            nextException = ((EJBException) currentException).getCausedByException();
        } else {
            nextException = currentException.getCause();
        }
    } while (nextException != null);

    return currentException.getMessage();
}

ps:我在Java6和EJB3上

1 个答案:

答案 0 :(得分:0)

直到Java 1.4才添加

Throwable.getCause。 EJBException的某些实现会改进getCausedByException方法以使用getCause方法(类似于RemoteException.getCause方法的改进方式),但听起来您的应用程序服务器不会这样做。