簡體   English   中英

EJB中的容器管理事務

[英]Container Managed Transaction in EJB

如果我將EJB標記為使用容器管理的事務,並且從該EJB的方法中不顯式使用setRollBackOnly()(發生異常時),該事務是否仍會自動標記為回滾?

它取決於該異常是應用程序異常 (默認情況下提交)還是系統異常 (始終回滾)。 應用程序異常是在throws子句中聲明的最常用的檢查異常,但也可以通過@ApplicationException批注(或ejb-jar.xml中的相應<application-exception>元素)聲明它們。

如果拋出的異常從RuntimeException擴展,則事務將回滾。 如果從Exception擴展(不是RuntimeException),則事務將提交。

從ejb 3.0開始,您可以使用@AnnotationException (或ejb-jar.xml文件中的application-exception部署描述符元素)更改此行為。

無論異常擴展到哪個類,如果您用@AnnotationException(rollback = true)標記該類,則事務將永遠不會提交,如果您使用@AnnotationException(rollback = false)標記該異常,則對立面適用。

請注意,如果您的代碼引發異常,但是在容器可以攔截它之前捕獲了該異常,則該異常不會影響事務狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM