我对定义中的一个模糊点以及Application Exceptions
和System Exceptions
在EJB
中可能产生的影响感到困惑。特别是,我无法确定异常是否定义为:
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实例不会被丢弃