gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          AJAX聯(lián)手SOA新一代Web2.0應(yīng)用程序

          一、引言

            當(dāng)今,各個(gè)企業(yè)都在想方設(shè)法提高自己的生產(chǎn)效率,并且對(duì)IT資產(chǎn)的重組也都在努力的探索當(dāng)中。借助于面 向服務(wù)的架構(gòu)(SOA)技術(shù),IT組織已經(jīng)在克服這些問題方面取得了一定的成效;但是,在大多數(shù)情況下仍然只是實(shí)現(xiàn)了整個(gè)IT服務(wù)組合的一小部分。目前, 有關(guān)這方面的大多數(shù)的努力也只不過是達(dá)到一種“剛剛滿足”的SOA應(yīng)用狀況—在改進(jìn)構(gòu)建應(yīng)用程序的能力以及使之與市場的結(jié)合更快更好更為便宜方面。而且正 如我們已了解的,要實(shí)現(xiàn)這些目標(biāo)說起來容易做起來難。

            二、傳統(tǒng)的基于中間件的復(fù)合應(yīng)用程序

            現(xiàn)有的事實(shí)是,SOA是一種中間件—而傳統(tǒng)情況下,中間件往往要依賴于更多的中間件才能把數(shù)據(jù)翻譯成一 種消費(fèi)者友好的狀態(tài)。當(dāng)你最后搞清楚構(gòu)建一種融入SOA技術(shù)的復(fù)合應(yīng)用程序不僅要求使用一種portal(中間件)而且還有可能要使用一種BPEL引擎 (甚至還是中間件)對(duì)它進(jìn)行編排時(shí),這當(dāng)然使你非常失望。更糟糕的是,你有可能在一家發(fā)布UDDI注冊(cè)表和注冊(cè)大量Web服務(wù)的組織內(nèi)工作。但遺憾的是, 在大多數(shù)情況下,還存在極少的實(shí)際消費(fèi)這些服務(wù)的應(yīng)用程序。怎么會(huì)是這種情況呢?

            難道如果無法構(gòu)建消費(fèi)這些SOA服務(wù)的應(yīng)用程序我們就該得出結(jié)論—什么東西出錯(cuò)了嗎?是否是因?yàn)闃I(yè)務(wù)內(nèi) 容開發(fā)者太難構(gòu)建這種直接消費(fèi)SOA服務(wù)的應(yīng)用程序從而導(dǎo)致只好由其它的IT組織為我們創(chuàng)建這樣的應(yīng)用程序呢?是否由于缺乏一種SOA監(jiān)管架構(gòu)從而使我們 猶豫不決?我想,我對(duì)上面所有問題的回答都是“是的”。而且存在一種非常突出的理由:僅由業(yè)務(wù)開發(fā)者消費(fèi)和利用這種由IT組織暴露的SOA服務(wù)實(shí)在是太難 了!其實(shí),真正存在的問題是缺乏一種容易的方法來在SOA上加入一種界面—而這正是把AJAX技術(shù)與SOA結(jié)合到一起的優(yōu)點(diǎn)所在。

            典型情況下,SOA服務(wù)被實(shí)現(xiàn)為一種松耦合的封裝和暴露業(yè)務(wù)功能的Web服務(wù)。這聽起來似乎非常直接, 但是實(shí)現(xiàn)起來卻非常復(fù)雜和困難。開發(fā)者經(jīng)常在SOA服務(wù)的開發(fā)粒度方面討論不止;但是現(xiàn)在,大多數(shù)開發(fā)人員都一致認(rèn)為“業(yè)務(wù)級(jí)”的開發(fā)粒度是最合適的。然 而,這仍然需要大量的相關(guān)領(lǐng)域?qū)<壹尤氩⑶乙c業(yè)務(wù)內(nèi)容合作才能最終確定這些服務(wù)的大小。

            三、SOA的復(fù)興

            幸運(yùn)的是,最近人們又對(duì)SOA產(chǎn)生了深厚的興趣。也許企業(yè)最終意識(shí)到SOA確實(shí)能夠幫助給它們帶來巨大 幫助。也許這是由于更好的開發(fā)工具和在Amazon,Yahoo和eBay宣傳下的Web服務(wù)所致的緣故。也許它就是AJAX?不錯(cuò)—這也正是本人撰寫此 文之原因。認(rèn)真地說,我確實(shí)認(rèn)為正是AJAX成為更新人們對(duì)于SOA的重新認(rèn)識(shí)的一種重要的驅(qū)動(dòng)力量,特別是在當(dāng)今各種新技術(shù)混合應(yīng)用領(lǐng)域。但是,這兩種 迥然不同的技術(shù)應(yīng)該如何結(jié)合并連接到一起才能迸發(fā)出更巨大的力量呢?先讓我們來看一下Wikipedia對(duì)當(dāng)前AJAX技術(shù)的定義。其中涉及到了Web頁 面,但是根本沒有提及SOA。其中的描述是:

            “AJAX,代表了‘異步JavaScript+XML’,是一種創(chuàng)建交互式Web應(yīng)用程序的Web開 發(fā)技術(shù)。其目的是,通過在后臺(tái)與服務(wù)器實(shí)現(xiàn)少量的數(shù)據(jù)交換從而使前端Web頁面感覺起來更具響應(yīng)性;因此,每當(dāng)用戶作出一個(gè)改變時(shí),不必重載整個(gè)Web頁 面。其最終目的是進(jìn)一步提高Web頁面的交互性、響應(yīng)速度及可用性。”

            此定義中沒有提及SOA并不奇怪,因?yàn)樵缙诘腁JAX應(yīng)用主要集中在增強(qiáng)頁面的功能與可用性方面。這一 點(diǎn)已經(jīng)在眾多應(yīng)用程序,例如Google Maps,F(xiàn)lickr和Yahoo Mail,中得到證實(shí)。然而,并不是這些面向消費(fèi)者的應(yīng)用程序使我對(duì)AJAX的潛力感到激動(dòng),而是運(yùn)行于公司的防火墻背后的業(yè)務(wù)應(yīng)用程序真正利用了 AJAX中的優(yōu)點(diǎn),因?yàn)樗蛭覀冋故玖藘蓚€(gè)關(guān)鍵特征:一個(gè)是客戶端編程模型,另一個(gè)是對(duì)服務(wù)器進(jìn)行異步調(diào)用的易實(shí)現(xiàn)。這兩種關(guān)鍵能力—在客戶端(瀏覽器) 應(yīng)用邏輯的能力和在不打斷Web頁面的情況下存取服務(wù)器數(shù)據(jù)的能力,正是它們拓寬了構(gòu)建新的更為豐富的Web 2.0企業(yè)應(yīng)用程序的如此眾多的可能性應(yīng)用領(lǐng)域。

            前面,我曾提及SOA缺乏一種界面。這也正是AJAX“介于”這其中的原因—它能夠給SOA加上一個(gè)體 面的外觀。在此,請(qǐng)讓我多作一些解釋。我們不妨考慮一下,如果SOA服務(wù)以在線方式出現(xiàn)的話,情況會(huì)怎么樣?這樣的服務(wù)通常需要在一個(gè)注冊(cè)表或倉庫中進(jìn)行 注冊(cè)(如果我們幸運(yùn)的話),然后就可以用于消費(fèi)。例如,我們不妨去看一下StrikeIron網(wǎng)站(www.StrikeIron.com)中所提供的內(nèi) 容。StrikeIron已經(jīng)成功地創(chuàng)建了一種針對(duì)普通大眾的“Web服務(wù)市場”。乍看起來,StrikeIron網(wǎng)站中的目錄機(jī)制很象一個(gè)小型業(yè)務(wù)應(yīng)用 程序中所提供的列表。但是稍后,你就會(huì)意識(shí)到這并不是一些應(yīng)用程序—它們實(shí)際上是一些Web服務(wù)。由一家公司針對(duì)廣大消費(fèi)者提供WSDL/REST Web服務(wù)的概念本身就蘊(yùn)含了多種意義。但是,現(xiàn)在先讓我們來看一下這家公司所出售的內(nèi)容。根據(jù)StrikeIron提供的信息(他們?cè)试S存取這些服 務(wù)),它提供的大多數(shù)流行的Web服務(wù)包括:

            ·美國地址校驗(yàn)

            ·全球短信服務(wù)

            ·銷售和使用稅

            ·電子郵件校驗(yàn)

            ·逆向電話查詢

            毫無疑問,所有這些Web服務(wù)都相當(dāng)有用,而且能被應(yīng)用于許多不同的領(lǐng)域。但同時(shí),它們又太“商品 化”。換句話說,我可能并不在意是誰提供的這些服務(wù),而僅想得到我所希望的信息。另一方面,我會(huì)簡單地使用任何Web服務(wù)來實(shí)現(xiàn)把現(xiàn)金從我的經(jīng)常帳戶轉(zhuǎn)到 我的儲(chǔ)蓄帳戶嗎?我不會(huì)這么做的。我首先需要建立對(duì)這種服務(wù)的信任,因此,我必須與提供該服務(wù)的供應(yīng)商建立一定的關(guān)系。存在于我(消費(fèi)者)和服務(wù)提供者之 間的這種“信任圈”也正代表了企業(yè)內(nèi)部及其合伙企業(yè)之間的關(guān)系。

            四、AJAX+SOA技術(shù)相結(jié)合

            上面同樣的方式也可以為企業(yè)所采用,從而把他們的Web服務(wù)提供給更廣大的用戶群。通過一種Web服務(wù) 市場,企業(yè)可以注冊(cè)各種Web服務(wù)—而這些Web服務(wù)通常情況下僅能為企業(yè)內(nèi)部或合作伙伴所使用。市場供應(yīng)商顯然希望這種情況發(fā)生,但是更重要的是,我們 看到了一種機(jī)會(huì)—應(yīng)用AJAX+SOA技術(shù)來驅(qū)動(dòng)一類新的Web 2.0業(yè)務(wù)應(yīng)用程序。

            第一次,人們開始感覺到應(yīng)用程序開發(fā)與SOA終于走到了一起。我們擁有通過可重用形式—SOA服務(wù)—加 以描述的業(yè)務(wù)功能。我們擁有無所不在的連接—Web。我們擁有正在被證明成為新的應(yīng)用程序容器的瀏覽器。我們?cè)谶@類應(yīng)用程序容器/瀏覽器中擁有一種編程模 型—JavaScript。并且它們使用的都是開放式標(biāo)準(zhǔn)!我們還要求什么呢?其實(shí),還有其它一些內(nèi)容。

            我特別希望看到一種更快的基于所有以上技術(shù)的開發(fā)應(yīng)用程序的方案—一種不必再依賴于與SOA服務(wù)集成到 一起的中間件即可構(gòu)建應(yīng)用程序的方法。這正是我所期望的Web應(yīng)用程序的能力—“直接連接SOA”。這種“直接連接SOA”應(yīng)該能夠穿過傳統(tǒng)型門戶屏障以 及重量級(jí)進(jìn)程引擎進(jìn)而直接(至少在概念上如此;稍后,我們將詳及)存取SOA服務(wù)。在此,我不僅是指Web服務(wù),它也可能是BPEL編制服務(wù),粗粒度 POJO服務(wù),RSS回饋或任何其它能夠被暴露為一種“服務(wù)”的東西。當(dāng)然,這其中的接口應(yīng)該使用開放型標(biāo)準(zhǔn)暴露。

            這種新式的開發(fā)和運(yùn)行時(shí)刻模型創(chuàng)建了一種構(gòu)建應(yīng)用程序驅(qū)動(dòng)的復(fù)合應(yīng)用程序的新方法。它具有客戶機(jī)/服務(wù)器類型的吸引力,而沒有傳統(tǒng)型重量級(jí)客戶機(jī)/服務(wù)器所具有的沉重包袱。它運(yùn)行于瀏覽器端并且能夠依具體要求而實(shí)現(xiàn)。

            五、基于用戶的復(fù)合應(yīng)用程序

            在過去的幾年間,我們都聽說過“復(fù)合應(yīng)用程序”這一概念。但是,大多數(shù)供應(yīng)商卻在一直談?wù)撝?#8220;復(fù)合服務(wù)”—作為一種把他們的宿主服務(wù)重構(gòu)成另一些更好用的服務(wù)或門戶應(yīng)用程序的方法。讓我作個(gè)類比來作進(jìn)一步的說明。

            AcmeGrid,我們?cè)诒疚闹刑摌?gòu)的一家網(wǎng)格計(jì)算供應(yīng)商,它提供一種服務(wù)—網(wǎng)格計(jì)算—能夠使你的應(yīng)用 程序運(yùn)行為一種服務(wù)。這家公司的顧客告訴它他們想通過一個(gè)方法實(shí)現(xiàn)把許多服務(wù)組合成一種粗粒度的服務(wù)。因此,很自然地,AcmeGrid發(fā)布了一種基于 Eclipse的AcmeGrid復(fù)合應(yīng)用程序構(gòu)造器(CAB)。有趣的是,CAB看上去很象一個(gè)BPEL設(shè)計(jì)器,但是與AcmeGrid發(fā)布的服務(wù)更為 緊密地集成到一起。盡管相當(dāng)漂亮,但是,它并不是一種真實(shí)的應(yīng)用程序,充其量也只是一種服務(wù)。實(shí)質(zhì)上,CAB更象一個(gè)服務(wù)構(gòu)造器。但是,當(dāng)我們?cè)谂?gòu)建 應(yīng)用程序時(shí)有誰會(huì)需要一種服務(wù)構(gòu)造器呢?不久,另一家虛構(gòu)的供應(yīng)商,我們暫且稱其為AcmePortal,宣布了它的Portal復(fù)合應(yīng)用程序構(gòu)造器 (PCAB)。它也發(fā)行了一種基于Eclipse的設(shè)計(jì)器;盡管它的外觀感覺也象一個(gè)BPEL設(shè)計(jì)器,但是,這個(gè)程序卻“知道”如何構(gòu)建portal。在 許多情況下,一個(gè)portal和一個(gè)應(yīng)用程序有一樣好的效果。但是,如果你硬性要求把一個(gè)portal轉(zhuǎn)換為一個(gè)應(yīng)用程序的話,也只是徒然。

            實(shí)際上,我非常想實(shí)現(xiàn)一種基于用戶的復(fù)合應(yīng)用程序,而不是一種基于中間件的復(fù)合應(yīng)用程序。為此,我需要 一種開發(fā)和運(yùn)行時(shí)刻平臺(tái)—這種平臺(tái)不僅能夠使用AJAX和SOA,而且還能夠?qū)@二者進(jìn)行管理。一些經(jīng)銷商又進(jìn)一步推進(jìn)了AJAX應(yīng)用程序的概念—直接從 瀏覽器中調(diào)用基于WSDL的Web服務(wù),其實(shí)質(zhì)上是作一種SOAP調(diào)用。這種方法甚至還有一個(gè)名字—“客戶端/SOA”。這對(duì)于簡單的非企業(yè)或消費(fèi)者應(yīng)用 程序而言可能是不錯(cuò)的,但是對(duì)于真正的企業(yè)程序卻不是這樣。為什么呢?因?yàn)楫?dāng)你直接從瀏覽器端調(diào)用Web服務(wù)時(shí),監(jiān)管功能等于交給了瀏覽器—這簡直就是 說,根本不存在監(jiān)管問題。圖1展示了非監(jiān)管的Web服務(wù)消費(fèi)框圖。我還從來未遇到過一家不去監(jiān)管自己的服務(wù)的企業(yè),并且也不相信企業(yè)僅僅因?yàn)槲覀冊(cè)诩夹g(shù)上 實(shí)現(xiàn)非常有效就會(huì)允許這樣的事情發(fā)生。如果你不相信我的看法,那么你只須記住企業(yè)是從來不會(huì)對(duì)除HTTP和SSL以外的應(yīng)用程序開放其防火墻的。不管我們 如何勸告系統(tǒng)主管,他們是不會(huì)開放其它端口的。

            六、我們需要一種新型的平臺(tái)

            由上面可知,我們所討論的不僅是停留在AJAX和SOA技術(shù)方面。其實(shí),我們真正需要的是一種平臺(tái),它 能夠?yàn)锳JAX和SOA共存于企業(yè)之中提供必要的監(jiān)管能力。這個(gè)平臺(tái)還提供站在客戶端角度消費(fèi)SOA服務(wù)的能力,而且還能監(jiān)管服務(wù)消費(fèi)情況。圖2展示了如 何通過一個(gè)服務(wù)網(wǎng)關(guān)來監(jiān)管Web服務(wù)。一個(gè)服務(wù)網(wǎng)關(guān)實(shí)際上是一個(gè)服務(wù)端抽象,它能夠代表客戶端監(jiān)管并調(diào)節(jié)服務(wù)存取,這在剛才我們所討論的情況下是指基于瀏 覽器的AJAX應(yīng)用程序。使用服務(wù)網(wǎng)關(guān)的漂亮之處在于,你并不被限制僅訪問在企業(yè)內(nèi)運(yùn)行的服務(wù)。這種服務(wù)網(wǎng)關(guān)能夠監(jiān)管注冊(cè)到企業(yè)內(nèi)的任何服務(wù)。在基于 WSDL的Web服務(wù)中,企業(yè)會(huì)注冊(cè)WSDL,而WSDL又提供在運(yùn)行時(shí)刻到服務(wù)的綁定。這可能是運(yùn)行在企業(yè)的數(shù)據(jù)中心的一種服務(wù),但是它有可能與一個(gè)運(yùn) 行于一家合伙企業(yè)的數(shù)據(jù)中心的服務(wù)一樣容易。如果企業(yè)允許(通過監(jiān)管)應(yīng)用程序存取服務(wù)的話,那么,這些服務(wù)運(yùn)行于何處是無關(guān)緊要的。

            七、結(jié)論

            讀完本文,我希望你已開始欣賞起把AJAX和SOA結(jié)合到一起的強(qiáng)大威力來了—特別是這二者之間的共存 方式以及實(shí)現(xiàn)新式的具有企業(yè)要求的監(jiān)管能力的基于Web服務(wù)的應(yīng)用程序。我堅(jiān)信,我們正在進(jìn)入到一種充滿令人驚異的機(jī)會(huì)的新時(shí)代的前夕。Web 2.0時(shí)代社會(huì)性網(wǎng)絡(luò),圖片共享以及各種標(biāo)注技術(shù)都是偉大的,但是真正有影響力的還在于Web 2.0對(duì)企業(yè)的響應(yīng)。

          posted on 2008-03-11 13:46 gembin 閱讀(481) 評(píng)論(0)  編輯  收藏 所屬分類: SOAAjax

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊(cè)

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          free counters
          主站蜘蛛池模板: 时尚| 江口县| 布尔津县| 尼玛县| 桑日县| 涡阳县| 蓬安县| 丹寨县| 班戈县| 扶绥县| 瓮安县| 宁河县| 柳林县| 林甸县| 内丘县| 雷山县| 贵港市| 牡丹江市| 张家川| 拉孜县| 将乐县| 墨脱县| 咸宁市| 沧州市| 寿光市| 平顺县| 靖西县| 丰台区| 丽水市| 涪陵区| 称多县| 大兴区| 漳平市| 秭归县| 吉木萨尔县| 滨海县| 淄博市| 漠河县| 德化县| 辽中县| 河间市|