我在方法执行之前抛出了AccessDeniedException,但是获得了EJBException

时间:2012-11-19 08:38:17

标签: java-ee ejb aspectj

我正在使用AspectJ在EJB环境中执行方法之前进行访问检查,因此我在使用around建议的方法之前拦截控制流(我知道也有EJB拦截器)。如果访问检查失败,我将抛出AccessDeniedException。不幸的是,我得到的是一个EJBException,其原因是“AccessDeniedException”。我怎样才能规避这种行为?

1 个答案:

答案 0 :(得分:2)

这是由系统和应用程序异常之间的差异引起的。这些大致对应于未经检查和检查的异常。

他们每个人都有一定的属性。系统异常将包装在EJBException中,发生异常的bean将被销毁,任何挂起的事务都将被回滚。

人们经常想要的是一个未经检查的异常,只会进行回滚。

您可以在自己的一个异常类型上使用@ApplicationException(可以不检查),然后相应地设置注释的属性来创建这样的一个。