我对Application Exceptions
和System Exceptions
中EJB
和public class SomeException extends Exception{
...
}
的定义和可能产生的影响感到困惑。特别是我无法弄清楚Exception是否定义为:
Application
将是System Exception
或Application Exception
。根据规范,应始终使用注释@ApplicationException
定义Application Exception
。因此我推断上面的类不是EJB Container
,即使它是一个已检查的异常。我提出的问题属于正确的Java语法,随后是Exception
的行为,以防Session Bean
在Singleton
的业务方法中抛出(@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}}
答案 0 :(得分:4)
规范说:
检查异常的应用程序异常可以通过在bean的业务接口,无接口视图,home接口,组件接口和Web服务端点的方法的throws子句中列出来定义。作为未经检查的异常的应用程序异常通过使用ApplicationException元数据批注对其进行批注,或使用application-exception元素在部署描述符中表示,将其定义为应用程序异常。
因此,上面的类是一个Application异常,因为它是一个已检查的异常。当然它必须列在方法的throws子句中,否则代码将无法编译。不,根据规范抛出此异常后,bean实例不会被丢弃。