乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      hibernate,spring管理事務(wù)中(transaction,JDBC connection,Hibernate Session的使用)

       小丑g22xft6chp 2016-06-21

      首先hibernate的Connection release mode有以下幾種:
      1 after_statement 2 after_transaction 3 on_close 其中after_statement 用在jta中 ,on_close 是3.1之前遺留的(也許是為spring留的-_-),也就是3.1之前默認(rèn)是on_close ,但3.1之后默認(rèn)如果單獨(dú)使用hibernate是after_transaction,如果有第三方事務(wù)管理,就用第三方提供的默認(rèn)值,spring就是默認(rèn)使用了on_close。
      在spring管理事務(wù)中我們看看系統(tǒng)啟動(dòng)后默認(rèn)使用的配置:
      1,ransaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory使用spring事務(wù)策略
      2,hibernate內(nèi)部 Automatic session close at end of transaction: disabled 因?yàn)橐呀?jīng)交給spring了
      3 Connection release mode: auto 默認(rèn),也就是沒有配置hibernate.connection.release_mode的時(shí)候,但是這里有地方需要注意:也就是前面提到的使用第三方策略時(shí)的問題:看一下代碼:
      StringreleaseModeName=PropertiesHelper.getString(Environment.RELEASE_CONNECTIONS,properties,"auto");
      log.info("Connectionreleasemode:"+releaseModeName);
      ConnectionReleaseModereleaseMode;
      if("auto".equals(releaseModeName)){
      releaseMode=transactionFactory.getDefaultReleaseMode();}

      else{
      releaseMode=ConnectionReleaseMode.parse(releaseModeName);
      if(releaseMode==ConnectionReleaseMode.AFTER_STATEMENT&&!connections.supportsAggressiveRelease()){
      log.warn("Overridingreleasemodeasconnectionproviderdoesnotsupport'after_statement'");
      releaseMode=ConnectionReleaseMode.AFTER_TRANSACTION;
      }
      }
      其中紅色部分就是調(diào)用了spring提供的默認(rèn)值,而spring的默認(rèn)值:在jta和cmt中都默認(rèn)使用的是after_statement
      /**
      *Setsconnectionreleasemode"on_close"asdefault.
      *<p>ThiswasthecaseforHibernate3.0;Hibernate3.1changed
      *itto"auto"(i.e."after_statement"or"after_transaction").
      *However,forSpring'sresourcemanagement(inparticularfor
      *HibernateTransactionManager),"on_close"isthebetterdefault.
      */
      publicConnectionReleaseModegetDefaultReleaseMode(){
      returnConnectionReleaseMode.ON_CLOSE;
      }

      而spring為什么要使用on_close ,而不是用after_transaction ,我們想想opensessioninview的原理也許能明白,session在view成還要使用,所以不能再transaction使用完后關(guān)閉JDBC connection,必須要在session之后,所以要使用on_close(也就是在on session(flush.auto,或者flush.Eagerly) 關(guān)閉)。這種情況hibernate內(nèi)部還會(huì)在spring關(guān)閉JDBC connection后提示(費(fèi)解,因?yàn)閍fter transaction之后session沒有關(guān)閉,但是Connection release mode配置的是on_close,session的關(guān)閉和Connection 的關(guān)閉都由spring來管理,hibernate就不知道了),所以hibernate有好的提示如下(其實(shí)session,已經(jīng)關(guān)閉。當(dāng)然隨著session的關(guān)閉jdbc鏈接釋放回連接池):
      transaction completed on session with on_close connection release mode; be sure to cl
      ose the session to release JDBC resources!,

      。當(dāng)然我們也可以使用after_transaction ,這種情況對(duì)使用編程式事務(wù)非常適用。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多