天天看點

孫衛琴的《精通JPA與Hibernate》的讀書筆記:聲明JTA事務

Java應用通過JTA API聲明JTA事務的步驟如下。

(1)在Hibernate配置檔案中配置資料源以及JTA平台屬性:

(2)在程式中建立javax.naming.InitialContext對象:

(3)在程式中,通過JTA的javax.transaction.UserTransaction接口來聲明JTA事務。

以下程式代碼聲明了一個分布式的事務。entityManagerFactoryBeijing代表運作在北京的一個資料庫存儲源,entityManagerFactoryShanghai代表運作在上海的一個資料庫存儲源。entityManager1和entityManager2會分别操縱這兩個存儲源中的資料。由于entityManager1和entityManager2所做的資料庫操作都位于同一個JTA事務中,是以JTA實作會保證這個JTA事務的原子性。

以上程式代碼示範了一個分布式的轉賬事務,從位于北京的一個賬戶中轉賬100元到上海的一個賬戶中。JTA實作會保證這個分布式的轉賬事務的原子性。

預設情況下,通過UserTransaction的commit()方法送出事務時,該方法不會自動清理底層Session的持久化緩存,是以必須在程式中調用EntityManager的flush()方法來手工清理緩存。此外,程式必須在送出事務後手工關閉EntityManager。

孫衛琴的《精通JPA與Hibernate》的讀書筆記:聲明JTA事務