SOA代表了基于組件應用程序發(fā)展中的下一步

字號:

SOA 有什么真正的新特性?
    我對圍繞面向服務的體系結(jié)構(gòu) (SOA) 的所有喧囂感到有點迷惑——而您似乎被它迷住了。
    例如,在EJB倡導者: 在面向服務的體系結(jié)構(gòu)中,使用無 facade 的 EJB 組件是選擇嗎? 您描述了在設計 EJB 組件以使它們“面向服務”(例如,使它們成為粗粒度的或無狀態(tài)的)時所應遵循的實踐。
    對我們這些使用諸如 CORBA 和 Enterprise JavaBeans 等分布式對象技術(shù)來構(gòu)建過成功應用程序的人來說,您所描述的原理并不新鮮。我想我們一直都是“面向服務”的。
    我承認您從“面向服務”的體系結(jié)構(gòu)中獲得了比“分布式對象”體系結(jié)構(gòu)更好的術(shù)語。但除此之外,我還有一個嚴肅的問題:存在任何有關(guān) SOA 的新特性嗎?明確地說,當我能夠使用 Enterprise JavaBean 組件來做一切工作時,我為什么要關(guān)心新的服務組件體系結(jié)構(gòu) (Service Component Architecture) 和服務數(shù)據(jù)對象 (Service Data Objects) 規(guī)范?
    SCA 代表了服務器端的自然發(fā)展
    在給定我是 EJB 倡導者的前提下,下面的陳述可能會讓您感到震驚——但是,您可以使用 EJB 組件以 Java 語言在服務器端編寫任何代碼,并不意味著您應該那樣做。我的感受是,我們正在看到服務器端技術(shù)的自然發(fā)展,非常類似于我們在客戶端所看到的 Java™ Servlet 的發(fā)展。
    不知您是否記得,Java Servlet 是作為一個基于標準Java 的組件來引入的,以統(tǒng)一與特定 Web 服務器相關(guān)聯(lián)的 Java API,如 Microsoft® 的 Internet Server API (ISAPI)。Java Servlet 使得 Java 程序員能夠開發(fā)組件來生成動態(tài)網(wǎng)頁,使那些網(wǎng)頁能夠與來自不同供應商的更廣泛 Web 服務器一起運行。
    最常用的組件是 HttpServlets,它處理來自 HTTP 請求流中的輸入和到 HTTP 響應流中的輸出的所有映射詳細信息,從而將程序員解放出來以集中于應用程序流程邏輯的詳細信息。
    盡管這非常不錯,然而用戶很快發(fā)現(xiàn),使用 Java 代碼來生成 HTML 非常繁瑣。例如,下面是 HttpServlet doGet() 方法中用于生成簡單的動態(tài)“Hello world”的代碼片段:
    String name = request.getAttribute("name");
    PrintWriter pw = request.getPrintWriter();
    pw.println("");
    pw.println("");
    pw.println("
    Hello " + name + "!
    ");
    pw.println("");
    pw.println("");