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

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

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

    paulwong

    《真實世界 Java EE 模式》閱讀筆記 01:重新思考業務層

    對于任何一種技術來說,好用和用好是兩個不同的概念。《真實世界 Java EE 模式:重新思考最佳實踐》(Real World Java EE Patterns: Rethinking Best Practices)就是教我們如何用好 Java EE 的一本書,也是目前市面上能找到的唯一一本,非常值得一讀。前兩章是一些概述性的文字,所以直接從第 3 章“服務門面(應用程序服務)”(Service Façade (Application Service))開始。

    概述

    本章的開頭對 Java EE 中的服務門面進行了簡介,下面是我的歸納。服務門面的作用是將獨立且可重用服務的組合起來,其概念和門面模式差不多,只不過要加上一些 Java EE 所特有的東西。 它是一個帶本地接口的會話 Bean(通常是無態的)。除非需要從 JVM 之外進行訪問,否則不應當提供遠程接口。它充當展示層和業務層之間的界限,其方法都由客戶端調用,不應當出現門面之間相互調用的情況。任何客戶端和門面間的交互都屬于業務會話,每次調用都啟動一個新的事務,因此門面類需要帶有TransactionAttributeType.REQUIRES_NEW 注解。

    策略
    接下來作者討論了各種服務門面的實現策略,它們是本章的重點:

    CRUD 門面
    一個 CRUD 門面只是一個暴露的、事務性的 DAO。在 J2EE 時代,通常將服務門面的所有方法調用委托給后臺的 DAO。EJB 3.0 本來就是 POJO,所以這種委托已經顯得多余了。在 EJB 3.1 里,甚至連 EJB 接口都是可選的,例如:  
    @Stateless
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
    public class BookService 
     
        @PersistenceContext
        
    private EntityManager em; 
     
        
    public void createBook(Book book) 
            em.persist(book); 
        }
     
     
        
    // 
     
    }
      


    雙視圖門面
    服務門面通常都由部署在同一個 ear 中的 Web 組件直接訪問,但有時候也需要提供遠程接口供外部客戶端使用(例如使用 Swing 開發的 EJB 客戶端應用程序)。這種情況就可以使用雙視圖:  
    public interface BookServiceRemote {// 
     
    public interface BookServiceLocal extends BookServiceLocal {// 
     
    @Stateless
    @Local(BookServiceLocal.
    class
    @Remote(BookServiceRemote.
    class
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
    public class BookService implements BookServiceLocal {//  


    SOA 門面
    SOA 門面的一大特點就是異步,最容易想到的方式就是 JMS,但 JMS 消費者在對事務和消息類型的處理上有些微妙的問題,JMS 生產者和消費者之間不容易交互,而且部署和維護消息隊列的成本也比較高。EJB 3.1 引入的異步調用則提供了一種輕量級的異步門面解決方案,簡單自然地解決了這些問題:  
    @Stateless
    @Asynchronous
    public class BookService 
     
        
    public Future<Order> orderBook(Book book) 
            
    // 
            return new AsyncResult<Order>(order); 
        }
     
     
    }
      


    多通道門面
    通過在門面上增加注解,可以使同一個門面以更多的形式暴露出來。下面代碼中的門面不僅是一個 EJB,而且能夠提供 SOAP 和 RESTful 的 Web 服務:  
    @Stateless
    @WebService
    @Path(
    "book"
    public class BookService {//


    IIOP 門面
    這種門面主要用于和 CORBA / IIOP 兼容,例如可用于和老系統或者 .NET 客戶端通信。在一般的 Java 開發中應該很少用到。

    總結
    雖然本章有很多理論性的東西,但實際上都是圍繞 EJB 3.0/3.1 的新特性在講。正如作者所說,J2EE 時代的諸多模式都是出于對規范的短處進行修補,而并非設計上的最佳實踐。這讓我想起以前從阿三手上接過來的一個項目,雖然使用 EJB 3.0,但充斥著大量 EJB 2.x 的“設計模式”,造成大量冗余的代碼,甚至很多方法委托就是透傳。我當時雖然覺得不妥,但也沒有充足的理由反駁阿三架構師,實在是可惜了。

    posted on 2011-05-22 11:39 paulwong 閱讀(365) 評論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 亚洲色av性色在线观无码| 特级毛片全部免费播放| 日韩免费高清一级毛片在线| 免费一级毛片在线播放放视频 | 老司机69精品成免费视频| 亚洲毛片基地日韩毛片基地| 四虎影库久免费视频| 国产成人免费视频| 亚洲国产精华液2020| 亚洲国产精品无码久久一区二区 | 暖暖免费日本在线中文| 亚洲偷自拍另类图片二区| 亚洲香蕉网久久综合影视| 日韩在线免费视频| 国产婷婷成人久久Av免费高清 | 国产高清在线精品免费软件| 在线播放免费人成毛片乱码| 亚洲乱妇老熟女爽到高潮的片| 国产成人亚洲精品狼色在线| 黄色成人网站免费无码av| 久久国产乱子精品免费女| 亚洲精品无码久久久久YW| 亚洲三级电影网址| 国产亚洲美女精品久久久| 好大好硬好爽免费视频| 99久久久国产精品免费牛牛| 一区二区三区视频免费观看| 99久久婷婷国产综合亚洲| 亚洲av无码乱码国产精品| 亚洲高清免费视频| 最新免费jlzzjlzz在线播放| 日韩人妻无码精品久久免费一| 成人免费视频一区二区| 亚洲欧美一区二区三区日产| 久久精品蜜芽亚洲国产AV| 亚洲综合另类小说色区| 免费一级成人毛片| 国产精品成人无码免费| 欧亚精品一区三区免费| 久久WWW免费人成一看片| 日本一卡精品视频免费|