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

字號(hào):

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