题
我很困惑通过一个模糊点的定义和可能产生的影响 Application Exceptions
和 System Exceptions
在 EJB
.特别是,我无法推测如果异常的定义为:
public class SomeException extends Exception{
...
}
将是你的 Application
或 System Exception
.根据该规范的一个 Application Exception
总是应该定义的注释 @ApplicationException
.我推断,因此,上述类不是一个 Application Exception
虽然这是一个检查的例外。我的问题出来涉及到正确的Java语法和随后的行为 EJB Container
在这种情况下 Exception
是被抛在一业务方法中的一个 Session Bean
(不 Singleton
尽管):
@Stateless
@LocalBean
public class StatelessBean{
public void doStuff(){
throw new SomeException();
}
}
1)应该的 SomeException
被宣布在扔条款?
2)不会的 Container
放弃实例之后的方法 doStuff()
被称为?
3)如果这是最后一个 Sytem Exception
是我的假设正确,那一个 System Exception
可以检查和没 RuntimeException
?
更新:
我认为这不是绝对清楚根据的规范,经过检查的例外应该始终是一个 Application Exception
.如果一个将定义一个检查 RuntimeException
?它应该被包括在 throw
一个方法吗?它是一个 System
或 Application Exception
?
public class SomeException extends RuntimeException{
...
}
解决方案
该规格说:
应用程序的例外情况,检查的例外情况可以被定义为这样的通过被列在投条款的方法的豆的业务界面,没有接口来看,家庭接口界面组件,以及网络服务的终点。应用程序的例外,是一个未经检查的例外被定义为一种应用程序的除外注释它与ApplicationException的元数据注释,或表示它在部署描述符用于应用程序的例外元。
因此,上述类是一个应用程序的例外,因为它是经过检查的例外。当然,它必须列出的引发条款的方法,否则的代码不会编译。不,bean实例不会被丢弃在此之后的异常,因为每次的规范。