Spring事務管理器分類

Spring並不直接管理事務,事實上,它是提供事務的多方選擇。你能委託事務的職責給一個特定的平臺實現,好比用JTA或者是別的持久機制。Spring的事務管理器能夠用下表表示:

 

事務管理器的 實例
目標
Org.springframwork.jdbc.datasource.DataSourceTransactionManager
用JDBC的 DataSource 去管理事務
Org.springframwork.orm.hibernate.HibernateTransactionManager
當持久機制是Hibernate時的事務管理器
Org.springframework.orm.jdoTransactionManager
當持久機制是JDO時的事務管理器
Org.springframework.transaction.jta.JtaTransactionManager
用JTA管理事務
Org.springframwork.orm.ojb.PersistenceBrokerTransactionManager
當持久機制是apache的OJB時的事務管理器
3.1 JDBC事務
若是你直接使用JDBC做爲持久方案,DataSourceTransactionManager將會爲你管理事務的邊界。爲了能使用DataSourceTransactionManager,咱們把下面的XML加到上下文的定義中:
<bean id="transactionManager" class="org.springframework.jdbc.
Datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
注意:dataSource的屬性設置引用一個叫dataSource的BEAN,dataSource多是一個javax.sql.DataSource bean,它在上下文中已經定義好了。
3.2 Hibernate事務
若是你使用Hibernate做爲持久層,你將會使用HibernateTransactionManager,請在應用的上下文申明以下:
<bean id="transactionManaager" class="org.springframework.
Orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
sessionFacoty 的屬性和Hibernate的SessionFactory組合在一起。HibernateTransactionManager委託事務管理給一個 net.sf.hibernate.Transactioin事例,它從Hibernate的會話中得到。當一個事務成功結束時, HibernateTransactionManager會調用Transaction的commit()方法。類似的,一個失敗的事務將會調用 rollback()去回滾。
3.3 JDO事務
可能你不喜歡JDBC 和Hibernate,你能夠選擇JDO去實現你的持久層。若是是這樣的話,你能夠用JdoTransctionManager,你能夠在你的上下文中以下申明:
<bean id="transactionManager"
Class="org.springframework.orm.jdo.JdoTransactioinManager:>
<property name="persistenceManagerFactory">
<ref bean="persistenceManagerFactory"/>
</property>
</bean>
爲了使用JdoTransctionManager,你須要組合一個具備persistenceManagerFactory 屬性的javax.jdo.PersistenceManagerFactory。
其實,JdoTransactionManager和事務對象一塊兒工做,它是從JDO的持久管理器中得到。一個成功的事務會調用commit()方法,而一個失敗的事務會調用rollback()方法。
3.4 JTA事務:
若是你上面全部的事務管理器都不符合你的須要,,或者你的應用是多資源交錯的事務,那麼.你能夠使用JTA的事務管理器
JTA事務(Java Transaction API)是J2EE規範中有關事務的標準。它是容器級別的事務,只能運行在J2EE服務器中。它的最大優點是能夠支持分佈式的事務,若是系統採用的是分佈式的數據庫,那麼只能選擇JTA管理EntityManager事務。
<bean id="transactionManager" class="org.springframewrok..
Transaction.jtaTransactionmanager">
<property name="transactionManager">
<value>java:/TransactionManager</valure>
</property>
</bean>
JtaTransactionManager 委託事務管理給JTA的實現.JTA定義了一系列的標準接口;能協調事務,應用和一個或多個數據源. 在這之中, transactioinManageName屬性指向JTA事務管理器. 這個事務管理器能在JNDI中找到. JtaTransactionManager, javax.transaction.UserTransaction和javax.transaction.TransactionManager對象在一塊兒工做. 全部的事務管理委託給它們完成. 一個成功的事務將會被提交,經過調用UserTransaction.commit()方法,相反,一個失敗的事務會調用UserTransaction 的rollback()方法.
 
本文轉自:http://blog.csdn.net/xiancaifu/article/details/6639290
相關文章
相關標籤/搜索