xih  
          日歷

          導(dǎo)航

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

           
          項(xiàng)目要求能獲得CONNECTION便于對(duì)數(shù)據(jù)庫(kù)的操作,并要求能與spring中的事務(wù)處于同一事務(wù)中。實(shí)現(xiàn):
          1.定義SanHibernateTransactionManager類,繼承spring中的
          HibernateTransactionManager,便于獲得HibernateTransactionObject。把這個(gè)類注入到spring容器中。
          < bean? id ="transactionManager"
          ????????class
          ="com.san.tools.hibernate.SanHibernateTransactionManager" >
          ????????
          < property? name ="sessionFactory" >
          ????????????
          < ref? bean ="sessionFactory" />
          ????????
          </ property >
          ????
          </ bean >

          ?
          public?class?SanHibernateTransactionManager?extends?HibernateTransactionManager{

          ????
          public?Object?getTransactionObj(){
          ????????
          return?super.doGetTransaction();
          ????}

          ????
          ????????
          ????
          public?boolean?existsTransaction(Object?transaction){
          ????????
          return?super.isExistingTransaction(transaction);
          ????}

          ????
          ????
          public?Session?getSession(){
          ????????
          return?SessionFactoryUtils.getSession(this.getSessionFactory(),?true);
          ????}

          ????
          ????
          public?Session?getCurrentSession(){
          ????????HibernateTransactionObject?obj?
          =?(HibernateTransactionObject)this.getTransactionObj();
          ????????
          return?obj.getSessionHolder().getSession();
          ????}

          }

          2.開始事務(wù)。
          public ? void ?beginTransaction()? throws ?SQLException {
          ????????
          // TransactionDefinition.PROPAGATION_REQUIRED:支持當(dāng)前的事務(wù),如果不存在就創(chuàng)建一個(gè)新的。

          ????????DefaultTransactionDefinition?transactionDef? = ? new ?DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
          ????????
          // 創(chuàng)建一個(gè)TransactionStatus

          ????????TransactionStatus?transactionStatus? = ?transactionManager.getTransaction(transactionDef);
          ????????
          //
          取得綁定到當(dāng)前線程上的session。從HibernateTransactionObject中獲得,這里修改了spring中HibernateTransactionManager.java文件,
          ????????
          // 將private?HibernateTransactionObject改為protected?HibernateTransactionObject

          ????????Session?session? = ?transactionManager.getCurrentSession();
          ??????
          if (session? != ? this .session)
          {
          ????????????System.err.println(
          " session不是同一對(duì)象 "
          );
          ????????}

          ????????
          // 將transactionStatus保存到集合中
          ???????? this .transactionStatuss.add(transactionStatus);
          ????????
          this .beginTransaction? = ? true
          ;
          ????}
          3.提交事務(wù)
          public ? void ?commit()? throws ?HibernateException,SQLException {
          ????????
          // 循環(huán)TransactionStatus集合,直至第一個(gè)transactionStatus被提交時(shí),才真正提交

          ???????? for ( int ?i? = ?transactionStatuss.size()? - ? 1 ;i? >= ? 0 ;i -- ) {
          ????????????DefaultTransactionStatus?transactionStatus?
          =
          ?(DefaultTransactionStatus)transactionStatuss.get(i);
          ????????????transactionManager.commit(transactionStatus);
          ????????}

          ????????transactionStatuss.clear();
          ????}
          4.回滾事務(wù)
          public?void?rollBack(){
          ????????
          for(int?i?=?transactionStatuss.size()?-?1;i?>=?0;i--){
          ????????????DefaultTransactionStatus?transactionStatus?
          =?(DefaultTransactionStatus)transactionStatuss.get(i);
          ????????????transactionManager.rollback(transactionStatus);
          ????????}

          ????????transactionStatuss.clear();
          ????}
          ???????貼出這段代碼一是為了共享一點(diǎn)所得,二是希望能指出中間有什么不正確的地方(心里不是很有底)
          posted on 2009-03-30 15:32 費(fèi)思量 閱讀(544) 評(píng)論(1)  編輯  收藏
          評(píng)論:

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © 費(fèi)思量 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 东兰县| 股票| 长海县| 区。| 阜南县| 清苑县| 崇信县| 龙川县| 陵水| 台州市| 阜南县| 南阳市| 绵竹市| 亚东县| 玛纳斯县| 扎赉特旗| 泸州市| 龙南县| 孝昌县| 鄂托克前旗| 梓潼县| 凤城市| 靖远县| 富平县| 双柏县| 佳木斯市| 西城区| 共和县| 靖西县| 武宁县| 康定县| 贵南县| 辽源市| 开远市| 阿克陶县| 霍邱县| 靖安县| 福安市| 文山县| 天柱县| 博乐市|