[英]JTA vs Local transactions
我們是否需要transactionManager進行本地交易?
我閱讀了transactionManager對於本地交易將無效。 那是對的嗎?
JTA是否同時提供CMT和BMT的准備金?
BMT或CMT在本地或全局事務處理方面沒有區別。
BMT和CMT僅定義如何定義事務的開始和結束。 在CMT中,它是由帶注釋的方法的調用定義的;在BMT中,事務的開始和結束是使用UserTransaction-object定義的。
如果有必要進行全局交易,或者更好的是進行分布式交易,那么Transactionmanager會獨立於BMT或CMT進行安排。
一旦涉及一個以上的事務資源,就必須進行這些全局事務或兩階段提交。 例如,如果您使用MessageDriven bean,它調用一個標注為“ Bean管理的事務處理”的bean,並在DBMS中進行更改。 在這種情況下,將對消息隊列和DBMS的資源進行兩階段提交。
因此,回答您的問題:
以下是針對您的問題的幾點說明。
全局事務支持可用於Web和企業bean J2EE組件,並且在某些限制下可用於應用程序客戶端組件。
企業bean組件可分為兩類:使用容器管理的事務( CMT )的bean和使用bean管理的事務( BMT )的bean。
local transaction containment (LTC)
用於在未指定的事務上下文中定義應用程序服務器行為。 LTC是有界的工作單元范圍,可以在其中訪問零個,一個或多個資源管理器本地事務(RMLT)。 LTC定義了必須完成所有RMLT的邊界; 容器會根據政策解決所有不完整的RMLT。 LTC對於bean實例是本地的; 即使這些Bean由同一容器管理,也不會在Bean之間共享它。 每當在不存在全局事務上下文的情況下進行分派時,LTC由容器啟動,然后在J2EE組件(例如企業bean或servlet)上分派方法。 LTC由容器根據應用程序配置的LTC邊界(例如,在方法分派結束時)完成。 LTC支持沒有編程接口; LTC由容器專門管理,由應用程序部署人員通過應用程序部署描述符中的事務屬性進行配置。
本地事務包含不能與全局事務同時存在。 如果在沒有全局事務的情況下發生應用程序組件分發,則容器總是在J2EE 1.3或更高版本上為J2EE組件建立一個LTC。
如果應用程序使用兩個或更多資源,則需要一個外部事務管理器來協調對全局事務中所有資源管理器的更新。
有關更多信息。 在事務管理器上 : https : //access.redhat.com/documentation/zh-CN/Fuse_ESB_Enterprise/7.1/html/EIP_Transaction_Guide/files/TxnManagers-WhatIs.html
BMT企業bean,應用程序客戶端組件和Web組件可以使用Java事務API(JTA)UserTransaction接口來定義全局事務的划分。 要獲取UserTransaction接口,請使用java:comp / UserTransaction的Java命名和目錄接口(JNDI)查找,或使用SessionContext對象中的getUserTransaction方法。
UserTransaction接口不可用於CMT企業beans.If CMT企業bean嘗試獲取此接口,拋出一個異常,按照企業JavaBeans(EJB)規范。
Web組件或企業bean( CMT或BMT )可以通過查找java:comp/websphere/ExtendedJTATransaction
獲得ExtendedJTATransaction
接口。 該接口提供對交易身份的訪問以及接收交易完成通知的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.