<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    如果單獨(dú)使用hibernate可參考上一篇文章http://www.tkk7.com/freeman1984/archive/2011/08/04/355808.html

    首先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í)的問題:看一下代碼:
    String releaseModeName = PropertiesHelper.getString( Environment.RELEASE_CONNECTIONS, properties, "auto" );
            log.info( 
    "Connection release mode: " + releaseModeName );
            ConnectionReleaseMode releaseMode;
            
    if ( "auto".equals(releaseModeName) ) {
                
    releaseMode = transactionFactory.getDefaultReleaseMode();        }

            
    else {
                releaseMode 
    = ConnectionReleaseMode.parse( releaseModeName );
                
    if ( releaseMode == ConnectionReleaseMode.AFTER_STATEMENT && !connections.supportsAggressiveRelease() ) {
                    log.warn( 
    "Overriding release mode as connection provider does not support 'after_statement'" );
                    releaseMode 
    = ConnectionReleaseMode.AFTER_TRANSACTION;
                }

            }
    其中紅色部分就是調(diào)用了spring提供的默認(rèn)值,而spring的默認(rèn)值:在jta和cmt中都默認(rèn)使用的是after_statement
    /**
         * Sets connection release mode "on_close" as default.
         * <p>This was the case for Hibernate 3.0; Hibernate 3.1 changed
         * it to "auto" (i.e. "after_statement" or "after_transaction").
         * However, for Spring's resource management (in particular for
         * HibernateTransactionManager), "on_close" is the better default.
         
    */

        
    public ConnectionReleaseMode getDefaultReleaseMode() {
            
    return ConnectionReleaseMode.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ù)非常適用。
        
    主站蜘蛛池模板: 免费v片视频在线观看视频| 岛国大片免费在线观看| 亚洲韩国精品无码一区二区三区 | 又黄又爽又成人免费视频| 亚洲成在人天堂在线| 四虎影视成人永久免费观看视频| 国产亚洲人成网站在线观看不卡| 中文字幕成人免费高清在线| 亚洲无人区午夜福利码高清完整版| aa在线免费观看| 久久精品国产亚洲| 最新黄色免费网站| 丁香婷婷亚洲六月综合色| 在线精品免费视频| 免费一级毛片在线播放视频免费观看永久 | 97在线线免费观看视频在线观看| 亚洲日韩中文字幕天堂不卡| 西西大胆无码视频免费| 亚洲αⅴ无码乱码在线观看性色| 免费**毛片在线播放直播| 一区二区三区在线免费观看视频 | 日批视频网址免费观看| 亚洲一区二区中文| 国产精品成人免费一区二区 | 亚洲日韩国产欧美一区二区三区 | 麻豆va在线精品免费播放| 国产亚洲精品成人a v小说| 一级毛片免费观看| 亚洲第一男人天堂| 亚洲乱码中文字幕手机在线 | 亚洲国产综合专区电影在线| av无码免费一区二区三区| 亚洲av无码有乱码在线观看| 伊人久久综在合线亚洲91| 久久久久久精品免费看SSS| MM1313亚洲精品无码久久| 亚洲va久久久噜噜噜久久男同| 成人免费无码大片A毛片抽搐 | 亚洲春黄在线观看| 亚洲国产人成中文幕一级二级| 久久不见久久见免费视频7|