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