Java 是否将ApplicationException包装在EJBTransactionRolledBackException中?

Java 是否将ApplicationException包装在EJBTransactionRolledBackException中?,java,exception-handling,transactions,ejb-3.0,Java,Exception Handling,Transactions,Ejb 3.0,我使用JSF2和EJB3 我认为我的用例非常简单: JSF支持bean正在调用注入ejb上的方法。ejb可以抛出自定义异常。当异常发生时,我希望回滚事务,并在JSFbean中捕获异常(这样它就可以处理用户) 因此,我用@ApplicationException(rollback=true)注释了我的自定义异常,并从ejb方法中抛出它 但我的问题是,我的自定义异常从未进入JSFbean。相反,它包装在一个EJBTransactionRolledBackException中 如果我用@Applica

我使用JSF2和EJB3

我认为我的用例非常简单:

JSF支持bean正在调用注入ejb上的方法。ejb可以抛出自定义异常。当异常发生时,我希望回滚事务,并在JSFbean中捕获异常(这样它就可以处理用户)

因此,我用@ApplicationException(rollback=true)注释了我的自定义异常,并从ejb方法中抛出它

但我的问题是,我的自定义异常从未进入JSFbean。相反,它包装在一个EJBTransactionRolledBackException中

如果我用@ApplicationException(rollback=false)注释我的异常,那么事务不会回滚,异常会被JSFbean捕获

是否有回滚事务和抛出可捕获的应用程序异常的方法


可能是玻璃鱼特有的吗?(我使用的是glassfish 3.1.1)。

您是否在托管bean中捕获或抛出异常?如果自定义异常继承自“exception”,则尝试使用throws子句,而不是使用try/catch(假设您正在这样做)

如果自定义异常继承自“RuntimeException”,则不必使用try/catch或“throws”子句


这就是我正在做的事情,它是有效的。除此之外,我不知道。

根据您所说的,这看起来像是产品缺陷。我建议提交一份bug报告。是的,我试过了。但是我想尝试/捕获异常(不是运行时),以便对其作出反应(即重定向、添加faces消息等)。我最后使用了,因为它会在必要时自动打开异常。