系统异常或应用程序异常



我对定义中的一个模糊点以及Application ExceptionsSystem ExceptionsEJB中可能产生的影响感到困惑。特别是,我无法确定异常是否定义为:

public class SomeException extends Exception{
...
}

将是CCD_ 4或CCD_。根据规范,Application Exception应该总是用注释@ApplicationException来定义。因此,我推断上面的类不是Application Exception,即使它是一个选中的Exception。我提出的问题涉及正确的Java语法,以及在Exception被抛出到Session Bean(而不是Singleton)的业务方法中的情况下EJB Container的行为:

@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException(); 
}
}

1) 是否应该在throw子句中声明SomeException

2) 调用方法doStuff()后,Container是否丢弃实例?

3) 如果它最终是Sytem Exception,我的假设正确吗,System Exception可以是检查的,而不是RuntimeException

更新:

在我看来,根据规范,检查的异常应该始终是Application Exception,这一点并不明确。如果定义一个已检查的RuntimeException呢?是否应将其包含在方法的throw中?它是System还是Application Exception

public class SomeException extends RuntimeException{
...
}

规范上写着:

作为检查异常的应用程序异常可以通过在bean的业务接口、无接口视图、主接口、组件接口和web服务端点的方法的throws子句中列出来定义。未检查异常的应用程序异常定义为应用程序异常,方法是使用ApplicationException元数据注释对其进行注释,或在部署描述符中使用application exception元素对其进行表示。

因此,上面的类是一个应用程序异常,因为它是一个已检查的异常。当然,它必须列在方法的throws子句中,否则代码将无法编译。不,根据规范,在抛出这个异常之后,bean实例不会被丢弃

相关内容

最新更新