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

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

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

    J2EE之巔

     

    Facade與邊界控制

    多層結構是J2EE應用開發的基本模式,很多開發者都會按照多層結構來組織自己的應用(通常分為Facade,Application Service,DAO等層),但是他們往往會選擇在不同層上去控制事務和Hibernate Session的邊界,可千萬不要小看這樣的選擇它會大大影響程序的可維護性和可復用性。
    其實在Facade層來控制事務的邊界通常都是最佳選擇。我們知道Facade層的粗粒度接口是直接為用戶請求提供相應服務的,在典型的J2EE環境中通常使用Session Bean來實現Facade層,并且使用CMT。這時如果有的開發人員在其他層次控制了事務如DAO,由于這些層次通常不會采用EJB實現,所以所使用的事務為容器提供的用戶管理事務,根據EJB的事務規范CMT是無法把事務上下文傳遞到用戶管理事務的邊界中的,由于J2EE并不支持事務的嵌套,所以當來自Facade的CMT事務遇見DAO的事務時,內部事務將被掛起,這樣整個事務的情況,就會和設想的業務邏輯產生很大的差異。
    并且有時不同業務邏輯的實現會復用DAO提供多個方法,所以很難控制事務的邊界,導致這些方法難以被復用。
    對于Hibernate Session,由于存在懶加載的問題,所以開發人員常會預見這樣的異常LazyInitializationException。避免這個問題就要求在關閉session前要裝載好要使用的對象關系域。而這種邏輯通常只與界面顯示內容相關,如果把session的邊界控制放置在DAO或者Application Service中就會使業務邏輯的實現要和界面顯示邏輯混合在一起,我們必須在這些方法中加載那些界面顯示需要的對象關系域。而界面顯示是經常變化的,并且業務邏輯會被多個不同的界面所復用,如果這樣Application Service,DAO中方法的復用性就會大大降低。
    把這些工作放在離表現層最近的Facade中便可以避免這些問題。
    注意在其他層次中我們不需要控制session的邊界,我們通常采用getCurrentSession()來獲得當前事務中的session,記住這個方法必須在事務上下文存在的情況下才可以調用,并且在事務被提交的時候Hibernate會在自動關閉session,所以我們不要顯示的關閉session.

    posted on 2007-10-26 10:00 超越巔峰 閱讀(1319) 評論(0)  編輯  收藏 所屬分類: Java EE

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: a在线视频免费观看| www免费黄色网| 色猫咪免费人成网站在线观看| www亚洲一级视频com| 国产成人亚洲精品蜜芽影院| 亚洲五月综合缴情婷婷| 黄页网站在线视频免费| 又黄又爽一线毛片免费观看| 亚洲美国产亚洲AV| 无码人妻久久一区二区三区免费| 国产亚洲精品无码成人| 亚洲成aⅴ人片久青草影院按摩| 成人久久免费网站| 精品亚洲综合在线第一区| 免费黄网站在线看| 久久精品国产亚洲AV无码娇色 | 亚洲精品456播放| 无码精品人妻一区二区三区免费| 国产大片免费观看中文字幕| 亚洲熟妇无码八V在线播放| 国产免费怕怕免费视频观看| 久久国产亚洲精品无码| 无码永久免费AV网站| 在线观看亚洲精品专区| 伊人久久精品亚洲午夜| 免费看h片的网站| 色九月亚洲综合网| 亚洲精品无码乱码成人| 日本免费人成在线网站| 亚洲国产日韩a在线播放| 国产精品亚洲视频| 亚洲AV色无码乱码在线观看| 亚洲情a成黄在线观看| 日本最新免费网站| 成在线人免费无码高潮喷水| 亚洲精品伦理熟女国产一区二区| 成年美女黄网站18禁免费| 国产成人无码精品久久久久免费| 久久精品国产亚洲AV香蕉| 吃奶摸下高潮60分钟免费视频| a级毛片免费高清毛片视频|