天天看點

對Java事物的了解

一、什麼是Java事物

        我們通常說的事物是指資料庫事物,那麼Java事物又是什麼,它與資料庫事物之間是什麼關系?

在Java的開發系統中,如果需要操作資料庫,則需要JDBC來連接配接。新增,修改,删除資料也是通過java代碼來操作,是以資料庫事物的控制就轉移到Java代碼中,這時候的資料庫事物習慣上就叫做Java事物。

二、Java的事物類型

   Java的事物類型有兩種:JDBC事物和JTA(Java Transaction API)事物

1.JDBC事物

JDBC 事務(本地事物)是用 Connection 對象控制的,下圖是一個簡單的本地事物處理流程:

對Java事物的了解

JDBC Connection 接口( java.sql.Connection )提供了兩種事務模式:自動送出和手工送出。

java.sql.Connection 提供了以下控制事務的方法:

public voidsetAutoCommit(boolean)

public booleangetAutoCommit()

public void commit()

public void rollback()

使用 JDBC 事務界定時,您可以将多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的範圍局限于一個資料庫連接配接。一個 JDBC 事務不能跨越多個資料庫。

2. JTA事物(Java Transaction API)

JTA(分布式事物)是一種高層的,與實作無關的,與協定無關的API。應用程式可以通過JTA的接口使用事物。與JDBC事物相比,JTA事物允許通路或者更新多個資源(通常是資料庫),極大的提高了資料的通路能力。下圖是一個簡單的分布式事物的處理流程:

對Java事物的了解

1.UserTransaction—javax.transaction.UserTransaction接口提供能夠程式設計地控制事務處理範圍的應用程式。 javax.transaction.UserTransaction方法開啟一個全局事務并且使用調用線程與事務處理關聯。

2.Transaction Manager—javax.transaction.TransactionManager接口允許應用程式伺服器來控制代表正在管理的應用程式的事務範圍。

3.XAResource—javax.transaction.xa.XAResource接口是一個基于X/Open CAE Specification的行業标準XA接口的Java映射。

注意:

如果一個程式已經用了分布式事物的XA連接配接就不要再用JDBC連接配接,即不要使用java.sql.Connection. commit()和java.sql.Connection. rollback()。

三、容器事物

        容器事物一般是指J2EE容器自己的提供的事物管理機制,這裡筆者了解容器事物應該是指架構事物,例如EJB,Hibernate等架構提供的事物服務。其原理是對JDBC和JTA的再次封裝,在使用上提供了更加友善的API或者是更強大的聲明式的事物管理。

四、JDBC事務隔離級别 

         在多線程通路資料源的情況下,事物之間使用鎖隔開的。JDBC的API提供了5中不同級别的隔離級别,具體如下:

TRANSACTION_NONE:不支援事務。

TRANSACTION_READ_UNCOMMITTED: 在送出前一個事務可以看到另一個事務的變化。這樣髒讀、不可重複的讀和虛讀都是允許的。 

TRANSACTION_READ_COMMITTED: 讀取未送出的資料是不允許的。這個級别仍然允許不可重複的讀和虛讀産生。 

TRANSACTION_REPEATABLE_READ: 事務保證能夠再次讀取相同的資料而不會失敗,但虛讀仍然會出現。 

TRANSACTION_SERIALIZABLE:是最高的事務級别,它防止髒讀、不可重複的讀和虛讀。 

在程式開發時可以通過Connection對象使用上面的幾種隔離級别,事物的級别越高,性能損耗就越大。

繼續閱讀