JBoss事務的一些關鍵特性
多個操作組成一個不可分割的整體,可以稱為一個JBoss事務。
1.JBoss事務的四要素簡稱ACID,分別是
Atomicity 原子性:事務的多個操作組成一個單元,所有操作要么一起成功,要么一起失敗
Consistency 一直性:事務操作的前后,數(shù)據(jù)庫必須保持數(shù)據(jù)的一致性和完整性
Isolation 隔離性:多個事務之間彼此不會相互影響
Durability 持久性:事務成功之后,事務結果應該持久化,也就是說事務的成功是持久的
2.加鎖:鎖分為悲觀鎖和樂觀鎖,當使用悲觀鎖時,分為五個隔離級別,分別是SERIALIZABLE、 REPEATABLE_READ (default)、READ_COMMITTED、READ_UNCOMMITTED和NONE,隔離級別逐步減弱。樂觀鎖也叫版本鎖,其對數(shù)據(jù)進行操作時,將其復制到臨時區(qū),操作之后將版本與原有數(shù)據(jù)比較,如果一致則將遞增版本并寫回,如果不一致則回滾,由于樂觀鎖僅在復制出數(shù)據(jù)和提交數(shù)據(jù)時對數(shù)據(jù)加鎖,所以并行度更高,但如果寫操作比較頻繁地話則容易出現(xiàn)沖突導致回滾。
3.兩階段提交(Two-Phase Commit)
如果對多種可恢復的資源進行操作,在事務提交時,可能會導致部分事務成功而部分事務失敗,使數(shù)據(jù)處于不一致的狀態(tài),這時候可使用分布式事務,分布式事務采用兩階段提交協(xié)議,在事務提交之前,先詢問各種資源是否為提交做好準備(第一階段),然后再提交(第二階段),如果失敗,則全部回滾
JBoss事務管理器配置在JBOSS_HOME/server/all/config/jboss-service.xml中,如下:
- <mbean code="org.jboss.tm.TransactionManagerService" name="jboss:service=TransactionManager" xmbeandd="resource:xmdesc/Transaction ManagerService-xmbean.xml">
- <attribute name="TransactionTimeout">300</attribute>
- <attribute name="GlobalIdsEnabled">true</attribute>
- <depends optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
- </mbean>
可以通過JNDI名java:/UserTransaction訪問事務
- UserTransaction ut = (UserTransaction) ctx.lookup("java:/UserTransaction");
- ut.begin();
- ut.commit();
【編輯推薦】