系统异常或应用程序异常

时间:2014-02-27 07:16:09

标签: java java-ee exception ejb

我对Application ExceptionsSystem ExceptionsEJBpublic class SomeException extends Exception{ ... } 的定义和可能产生的影响感到困惑。特别是我无法弄清楚Exception是否定义为:

Application

将是System ExceptionApplication Exception。根据规范,应始终使用注释@ApplicationException定义Application Exception。因此我推断上面的类不是EJB Container,即使它是一个已检查的异常。我提出的问题属于正确的Java语法,随后是Exception的行为,以防Session BeanSingleton的业务方法中抛出(@Stateless @LocalBean public class StatelessBean{ public void doStuff(){ throw new SomeException(); } } 虽然):

SomeException

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

2)调用方法doStuff()后,Sytem Exception会丢弃实例吗?

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

更新:

根据规范,我认为检查的异常应始终为RuntimeException并不是很清楚。如果定义一个已检查throw怎么办?它应该包含在方法的System中吗?是Application Exception还是 public class SomeException extends RuntimeException{ ... }

{{1}}

1 个答案:

答案 0 :(得分:4)

规范说:

  

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

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