当存在业务逻辑错误而不是系统错误时,应引发应用程序异常。
有一个重要的区别: 应用程序异常不会自动导致事务回滚 。抛出应用程序异常后,客户端有机会恢复。
应用程序异常被发送到客户端,而没有被重新包装为EJBException。因此,您可以使用它们来报告验证错误或业务逻辑问题,并且它们将到达客户端。
是否包括所有异常,运行时和已检查的异常,而不管其来源如何?
否。默认情况下,应用程序异常是不扩展RuntimeException或RemoteException的异常。您可以如下所述进行更改。
如何使用ApplicationException批注影响行为?
如果要自动回滚事务,可以使用@ApplicationException(rollback = true)。
您还可以在RuntimeException和RemoteException的子类上使用注释,以避免包装为EJBException,并定义它们的自动回滚行为。
其他Java EE库抛出的异常又如何呢?
它们将遵循相同的规则,但是您可以使用XML描述符将第三方类声明为应用程序异常(有或没有自动回滚)。
提供程序代码引发的其他异常呢?
不确定,我认为您很少会看到来自提供程序代码的非系统错误(远程或运行时异常)。
如果将异常包装在EJBException中,会有所不同吗?
是。这将影响您如何处理客户端代码中的异常。
(参考:Enterprise JavaBeans 3.0,Bill Burke,O’Reilly)
希望对您有所帮助。



