<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人片在线观看国产| 色偷偷尼玛图亚洲综合| 免费a级毛片大学生免费观看 | MM131亚洲国产美女久久| 中文毛片无遮挡高清免费| 亚洲精品无码乱码成人| 午夜无码A级毛片免费视频| 亚洲伊人色一综合网| 免费被黄网站在观看| 国产精品福利片免费看| 国产成人无码综合亚洲日韩| 久久成人免费播放网站| 亚洲国产精品美女| 四虎影在线永久免费四虎地址8848aa| 免费一级全黄少妇性色生活片| 亚洲人成色77777| 69av免费视频| 国产精品亚洲片在线花蝴蝶| 亚洲色婷婷六月亚洲婷婷6月| 日韩免费无码视频一区二区三区| 亚洲一区二区三区久久久久| 又粗又硬免费毛片| 日本免费中文视频| 亚洲香蕉在线观看| 亚洲午夜精品久久久久久浪潮| 99久久人妻精品免费一区| 亚洲色偷偷偷综合网| 国产亚洲精品va在线| 99精品全国免费观看视频| 一区二区三区免费视频播放器| 亚洲第一页中文字幕| 免费人妻av无码专区|