[英]Java EJB transactions and transactional resources
交易經理如何知道我們何時參與交易資源,並且需要對其進行特殊處理? 例如:
EJB中的方法:
public void doStuff() {
persistentManager.doWork(); // needs to be rolled back/commmited
somefield2.doWork(); // doesnt participate in roll back/commit
System.out.println("x"); // doesnt participate in roll back/commit
jmsStuff.doWork(); // needs to be rolled back/commmited
}
當您使用EntityManager時,應用程序服務器或JPA提供程序將使用TransactionSynchronizationRegistry或(等效內部API)在當前事務上下文中注冊一個回調,以便在事務提交之前立即得到通知,以便它可以使用基礎資源(JDBC數據源)做實際的工作。
當您查找或使用JDBC資源時,應用程序服務器會在TransactionManager中注冊該資源,以便在提交/回滾事務時可以完成該資源。 確切的細節未指定,但可以在其底下使用JCA。
當您查找JCA資源(例如JMS)時,JCA規范包含有關應用程序服務器如何與資源提供者進行交互以通知事務完成的詳細信息(例如XAResource接口)。
通過交易注釋 。 這些使程序員可以聲明性地定義EJB組件的事務行為。 這意味着您可以指示persistentManager.doWork()
應在當前事務中登記,並somefield2.doWork()
應自行開始(或完全不進行事務運行)。
對於更復雜的場景,您還可以使用Bean Managed Transactions ,它允許對交易行為進行程序控制,以達到更模糊的要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.