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

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

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

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks

    準(zhǔn)備這幾天如果有空整理一下,先放在這里。
    要正確理解OpenSessionInView必須具備以下幾個(gè)知識(shí)點(diǎn):
    1.
    servlet的多線程模型。
    2.
    Filter的工作原理。
    3.
    ThreadLocal的使用。
    4.
    Hibernate的Session以及Connection的管理。
    5.
    Lazy Load
    6.
    Hibernate的FlushMode
    7.
    Spring的處理分兩種:
          7.1 One session per request   
          7.2 One new session per operation(這里的operation是指一次業(yè)務(wù)操作,例如如果我們的一次請(qǐng)求調(diào)用了某個(gè)業(yè)務(wù)方法,而這個(gè)方法里面有兩個(gè)與Session相關(guān)的操作,則每一個(gè)操作都會(huì)新開一個(gè)Session,但是使用結(jié)束以后并不關(guān)閉,而是注冊(cè)到ThreadLocal的deffered close 的變量里面,等到open session in view filter執(zhí)行完畢的最后進(jìn)行一起close, 這樣有個(gè)問題就是一個(gè)request可能會(huì)啟動(dòng)很多Session,而且這些session之間的一級(jí)緩存不能共享,另外Hibernate限制不能在一個(gè)session里面load一個(gè)po卻在這個(gè)session沒有關(guān)閉的情況下面在另外一個(gè)session里面save或者update,也就是說同一個(gè)po實(shí)例同一時(shí)間只能跟一個(gè)session發(fā)生關(guān)聯(lián),這樣導(dǎo)致的結(jié)果是如果在上面假設(shè)的兩個(gè)業(yè)務(wù)方法中的第一個(gè)進(jìn)行l(wèi)oad,而在第二個(gè)中對(duì)load出來的進(jìn)行修改,鐵定會(huì)報(bào)錯(cuò)。)

       另外如果是One session per request  (官方說法是叫SingleSession Mode), 會(huì)看到在open session in view filter中進(jìn)行了FlushMode.setMode(Never),也就是從來不進(jìn)行flush, 想當(dāng)然地就是只能進(jìn)行read-only的操作。但是沒有關(guān)系,回到HibernateTemplate的模板方法以及SessionFactoryUtil的getSession方法,可以看到我們的業(yè)務(wù)方法發(fā)出的每個(gè)請(qǐng)求都會(huì)試圖先取到一個(gè)session(取session的策略與上面描述的有關(guān)),在取Session的過程中會(huì)判斷當(dāng)前的操作是不是配制成read-only的(同時(shí)也會(huì)注冊(cè)transaction sync manager,有spring和Jta兩種),如果不是read-only并且當(dāng)前的flush mode  是 never的話,會(huì)把flush mode改成auto,因此就可以進(jìn)行讀寫操作了。


         spring的callback使得所有的操作最后基本歸由HibernateTemplate當(dāng)中的excute方法進(jìn)行處理,對(duì)session的管控也是在這里集中進(jìn)行,如果我們自己控制session,有兩種方法,一種是我們也寫callback,讓spring幫我們擦屁股,另外一種是直接調(diào)用HibernateTemplate的getSession方法,但是需要我們對(duì)session的生命周期以及關(guān)閉作仔細(xì)的控制,具體的控制策略可以參考spring地實(shí)現(xiàn)。




    posted on 2005-05-31 09:16 笨笨 閱讀(908) 評(píng)論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALL
    主站蜘蛛池模板: a成人毛片免费观看| 在线a人片天堂免费观看高清| 日日躁狠狠躁狠狠爱免费视频| 亚洲免费福利在线视频| 亚洲免费视频在线观看| yellow视频免费在线观看| 亚洲嫩草影院久久精品| 永久免费看bbb| 青青操视频在线免费观看| va天堂va亚洲va影视中文字幕| 午夜亚洲av永久无码精品| 香港特级三A毛片免费观看| 亚洲成AV人片在线观看无码 | 国产JIZZ中国JIZZ免费看| 免费jjzz在线播放国产| 在线观看亚洲电影| 亚洲最大福利视频网站| 免费在线观看黄色毛片| 久久精品免费全国观看国产| v片免费在线观看| 亚洲欧美国产精品专区久久| 免费成人午夜视频| 日本最新免费网站| 亚洲精品人成网线在线播放va | 国产免费变态视频网址网站| 国产激情免费视频在线观看| 黄页视频在线观看免费| 亚洲区视频在线观看| 国产精品无码一二区免费| 人人爽人人爽人人片A免费| 亚洲一区二区三区91| 国产小视频在线观看免费| 18以下岁毛片在免费播放| 久久久久久亚洲精品无码| 91嫩草亚洲精品| 亚洲AV无码1区2区久久| 午夜精品在线免费观看| 国产成人免费午夜在线观看| 国产婷婷成人久久Av免费高清| 高h视频在线免费观看| 亚洲欧洲无码AV不卡在线|