《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > JAVA、SOAP構(gòu)建服務(wù)集成平臺(tái)

JAVA、SOAP構(gòu)建服務(wù)集成平臺(tái)

2008-12-19
作者:方 洋

1、引言?

隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,軟件的開(kāi)發(fā)在經(jīng)歷了面向?qū)ο?、面向組件和面向領(lǐng)域后,如今進(jìn)一步要求面向服務(wù)、面向工作流。面向服務(wù)的軟件開(kāi)發(fā)將不再局限于單個(gè)企業(yè)部門(mén),而需要考慮到整個(gè)企業(yè),整個(gè)行業(yè)以及與行業(yè)運(yùn)作相關(guān)的政府職能部門(mén)。這樣,集成技術(shù)就顯得越來(lái)越重要,不僅需要有企業(yè)內(nèi)部的A2A集成,還需要有企業(yè)間的B2B以及政府職能部門(mén)與整個(gè)企業(yè)的G2B集成,甚至還包括政府各部門(mén)間的G2G集成。?

在傳統(tǒng)的集成技術(shù)中,開(kāi)發(fā)人員一直通過(guò)集成本地系統(tǒng)服務(wù)來(lái)構(gòu)建應(yīng)用系統(tǒng)" title="應(yīng)用系統(tǒng)">應(yīng)用系統(tǒng)。分布式的應(yīng)用系統(tǒng)建立需要使用分布式的組件對(duì)象模型。如目前應(yīng)用比較廣泛DCOM和CORBA。這兩種系統(tǒng)使用了不同的數(shù)據(jù)表達(dá)方式,互不兼容。并且,無(wú)法擴(kuò)展到互聯(lián)網(wǎng)上,它們要求通信兩端有同類(lèi)基本結(jié)構(gòu),緊密耦合,一旦一方的執(zhí)行機(jī)制發(fā)生變化,那么另一方就會(huì)崩潰,它們穿透互聯(lián)網(wǎng)上各種各樣的防火墻的能力不能令人滿(mǎn)意。?

2、JAVA中的SOAP分布式結(jié)構(gòu)?

面向服務(wù)和工作流的集成技術(shù)通常需要的是松耦合、跨平臺(tái)、語(yǔ)言無(wú)關(guān)、與特定服務(wù)無(wú)關(guān)的。而SOAP恰恰能做到這一點(diǎn)。SOAP簡(jiǎn)單、輕量級(jí)的協(xié)議,它把成熟的基于HTTP的Web技術(shù)和XML的靈活性、可擴(kuò)展性結(jié)合在一起。方便的實(shí)現(xiàn)多種異構(gòu)平臺(tái)之間的相互訪問(wèn)。JAVA是一種跨平臺(tái)語(yǔ)言,它為SOAP提供了一個(gè)開(kāi)放源代碼的簡(jiǎn)單易操作的Java實(shí)現(xiàn)。JAVA中的SOAP分布式結(jié)構(gòu)" title="分布式結(jié)構(gòu)">分布式結(jié)構(gòu)如圖1所示:?

這種結(jié)構(gòu)有利于軟件組件的重復(fù)使用,例如,一個(gè)商業(yè)邏輯存在于一個(gè)分布式系統(tǒng)中,它可以被一個(gè)用交互分布計(jì)算協(xié)議的遠(yuǎn)程系統(tǒng)所使用。允許外部機(jī)構(gòu)訪問(wèn)包含在無(wú)法通過(guò)防火墻障礙的分布式系統(tǒng)內(nèi)的也是有效方法。類(lèi)似地,分布式結(jié)構(gòu)可以用于組成企業(yè)應(yīng)用程序集成(EAI)方案和企業(yè)間的B2B集成方案。?

3、SOAP機(jī)制下服務(wù)集成平臺(tái)結(jié)構(gòu)?

服務(wù)集成平臺(tái)是業(yè)務(wù)服務(wù)運(yùn)作的支撐平臺(tái),它使得業(yè)務(wù)服務(wù)最終面向公眾,是一個(gè)為公眾提供與之密切相關(guān)的各種業(yè)務(wù)服務(wù),如查詢(xún),消費(fèi)和各種申請(qǐng)服務(wù)的一站式服務(wù)平臺(tái)" title="服務(wù)平臺(tái)">服務(wù)平臺(tái)。?

本文構(gòu)建了基于SOAP的服務(wù)集成平臺(tái)結(jié)構(gòu),以實(shí)現(xiàn)各種業(yè)務(wù)服務(wù)。其結(jié)構(gòu)如圖2所示:?

SOAP機(jī)制[1]在服務(wù)集成平臺(tái)中充當(dāng)了底層通信的角色,其作用是作為消息的載體,實(shí)現(xiàn)分布式對(duì)象訪問(wèn)和應(yīng)用系統(tǒng)之間的調(diào)用,從而將企業(yè)內(nèi)部,企業(yè)間,政府內(nèi)部,企業(yè)與政府間各個(gè)分散的、獨(dú)立的服務(wù)能按一定的業(yè)務(wù)規(guī)范連接起來(lái),組成一個(gè)有機(jī)的整體,完成更多的功能,以實(shí)現(xiàn)企業(yè)自動(dòng)化、商務(wù)流程自動(dòng)化、B2B電子商務(wù)和電子政務(wù)。?

服務(wù)集成平臺(tái)結(jié)構(gòu)有兩部分組成;服務(wù)集成平臺(tái)和后臺(tái)服務(wù)系統(tǒng)。?

后臺(tái)服務(wù)系統(tǒng)由服務(wù)運(yùn)營(yíng)商提供各種功能組件,以完成各種具體邏輯操作,該組件以服務(wù)形式對(duì)外發(fā)布,在注冊(cè)庫(kù)中注冊(cè)其服務(wù)描述文檔,以供平臺(tái)系統(tǒng)動(dòng)態(tài)調(diào)用。它對(duì)應(yīng)圖1中Web服務(wù)器和實(shí)現(xiàn)具體功能的Java對(duì)象。?

服務(wù)集成平臺(tái)主要完成服務(wù)的集成,它主要實(shí)現(xiàn)圖1中SOAP客戶(hù)機(jī)的作用,該平臺(tái)主要包括兩大子系統(tǒng):業(yè)務(wù)服務(wù)支撐系統(tǒng)" title="支撐系統(tǒng)">支撐系統(tǒng)和業(yè)務(wù)服務(wù)集成系統(tǒng)。?

應(yīng)用集成層(Application Integration Layer,簡(jiǎn)稱(chēng)AIL)是服務(wù)集成系統(tǒng)中的核心模塊,它動(dòng)態(tài)的加載在注冊(cè)庫(kù)(Register&Repository,簡(jiǎn)稱(chēng)RR)中注冊(cè)的各個(gè)服務(wù)的說(shuō)明及描述文檔以及各服務(wù)之間的業(yè)務(wù)關(guān)系、常用規(guī)范(即工作流文檔),來(lái)完成流程的建立,信息的協(xié)調(diào)和數(shù)據(jù)的傳輸,動(dòng)態(tài)的協(xié)同各個(gè)獨(dú)立的服務(wù)等服務(wù)集成的主要工作。?

業(yè)務(wù)服務(wù)支撐系統(tǒng)是提供一個(gè)業(yè)務(wù)服務(wù)的集成和運(yùn)行環(huán)境,它主要包括由客戶(hù)端" title="客戶(hù)端">客戶(hù)端環(huán)境(Client Environment)和服務(wù)器環(huán)境(Server Environment)共同建立的業(yè)務(wù)服務(wù)運(yùn)行環(huán)境。業(yè)務(wù)服務(wù)運(yùn)行環(huán)境的主要功能如下:?

(1)?????? 業(yè)務(wù)服務(wù)管理;包括服務(wù)的注冊(cè)、注銷(xiāo),服務(wù)的擴(kuò)展接口以及服務(wù)文件的傳送。?

(2)?????? 界面管理;包括平臺(tái)系統(tǒng)界面和業(yè)務(wù)服務(wù)界面的管理。?

(3)?????? 數(shù)據(jù)資源管理;主要是本地?cái)?shù)據(jù)和業(yè)務(wù)服務(wù)數(shù)據(jù)的存儲(chǔ)、傳輸管理。?

(4)?????? 通信管理;負(fù)責(zé)完成終端與服務(wù)器的數(shù)據(jù)通信。?

(5)?????? 安全管理;負(fù)責(zé)通信過(guò)程中的數(shù)據(jù)安全,以及平臺(tái)各終端的身份認(rèn)證。?

(6)?????? 在較復(fù)雜的業(yè)務(wù)服務(wù)平臺(tái)中,還可能有對(duì)終端硬件的管理,如卡類(lèi)服務(wù)所需的插卡機(jī)。?

系統(tǒng)內(nèi)部各模塊間,以及與后臺(tái)服務(wù)間均采用XML做為數(shù)據(jù)交換,平臺(tái)系統(tǒng)與后臺(tái)服務(wù)間以SOAP做為底層通信協(xié)議,XML和SOAP的結(jié)合使得整個(gè)服務(wù)平臺(tái)具有松耦合、跨平臺(tái)、語(yǔ)言無(wú)關(guān)、與特定服務(wù)無(wú)關(guān)的特點(diǎn)。業(yè)務(wù)服務(wù)極易升級(jí)及擴(kuò)展。?

4、服務(wù)集成平臺(tái)實(shí)例?

電子化城市服務(wù)亭系統(tǒng)就是建立在圖2結(jié)構(gòu)上的一個(gè)服務(wù)集成平臺(tái)。它是上海市社會(huì)保障中心重點(diǎn)科研項(xiàng)目,它通過(guò)分布在社區(qū)和各種公眾場(chǎng)所的終端向公眾提供一系列與之生活相關(guān)的各類(lèi)服務(wù),例如,天氣信息、卡類(lèi)信息等查詢(xún)服務(wù);繳納水費(fèi)、電費(fèi)的各種繳費(fèi)服務(wù);訂票、旅游、購(gòu)車(chē)等消費(fèi)服務(wù);以及申請(qǐng)失業(yè)保障、就業(yè)培訓(xùn)等申請(qǐng)服務(wù)。?

下面將以一個(gè)汽車(chē)消費(fèi)服務(wù)為例來(lái)講述其在此平臺(tái)上的實(shí)現(xiàn)。這里將汽車(chē)消費(fèi)服務(wù)簡(jiǎn)化為只包括汽車(chē)消費(fèi)申請(qǐng)和車(chē)牌申請(qǐng)兩個(gè)子服務(wù)的一個(gè)簡(jiǎn)單流程服務(wù)。這里將不涉及到電子交易。汽車(chē)消費(fèi)服務(wù)的實(shí)現(xiàn)流程圖如圖3所示。?

?

???????????? ?

1.發(fā)起請(qǐng)求;用戶(hù)通過(guò)客戶(hù)端環(huán)境的平臺(tái)界面和汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù)界面向服務(wù)器環(huán)境發(fā)起請(qǐng)求,請(qǐng)求消息包括用戶(hù)的基本信息及所希望購(gòu)買(mǎi)的汽車(chē)信息??蛻?hù)端環(huán)境將請(qǐng)求信息和業(yè)務(wù)服務(wù)支撐系統(tǒng)運(yùn)行時(shí)的必要信息(如業(yè)務(wù)服務(wù)綁定名)一起封裝成XML文檔,傳給服務(wù)器環(huán)境,其XML文檔如下:?

…?

?

??????? ?

??????? …?

?

?

??????? ?

??????? …?

?

?

…?

2.查詢(xún)業(yè)務(wù)服務(wù)描述信息;服務(wù)器環(huán)境根據(jù)業(yè)務(wù)服務(wù)綁定名新建一個(gè)業(yè)務(wù)服務(wù)實(shí)例,代碼如:BusinessService carsalling = new BusinessService(“car”);?

接著向注冊(cè)庫(kù)查詢(xún)汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù)描述信息。業(yè)務(wù)服務(wù)描述信息包括業(yè)務(wù)服務(wù)的應(yīng)用程序包,啟動(dòng)主類(lèi)程序以及端口消息類(lèi)型等調(diào)用信息。其代碼如:carsalling.find(“car”);?

3.啟動(dòng)業(yè)務(wù)服務(wù);服務(wù)器環(huán)境通過(guò)注冊(cè)庫(kù)的汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù)的描述信息自動(dòng)加載業(yè)務(wù)服務(wù)程序包,啟動(dòng)汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù),并將用戶(hù)請(qǐng)求信息傳遞給該業(yè)務(wù)服務(wù)。其代碼如:?

carsalling.load(“car”,userXMLinformation);?

4.查詢(xún)子服務(wù)描述信息;汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù)AIL向注冊(cè)庫(kù)查詢(xún)汽車(chē)消費(fèi)申請(qǐng)和車(chē)牌申請(qǐng)兩個(gè)子服務(wù)的描述信息。AIL將根據(jù)汽車(chē)銷(xiāo)售業(yè)務(wù)邏輯及注冊(cè)庫(kù)中各服務(wù)之間的業(yè)務(wù)關(guān)系、常用規(guī)范及服務(wù)流程,來(lái)完成具體操作。汽車(chē)銷(xiāo)售業(yè)務(wù)服務(wù)只是簡(jiǎn)單的順序執(zhí)行兩個(gè)子服務(wù)。?

5.完成汽車(chē)申請(qǐng)服務(wù); AIL根據(jù)汽車(chē)申請(qǐng)服務(wù)的描述信息來(lái)生成SOAP請(qǐng)求調(diào)用該服務(wù),從而完成用戶(hù)請(qǐng)求信息在汽車(chē)銷(xiāo)售商處的具體操作。其主要Java代碼如下:?

…?

Call call = new Call();?

Vector vctParamers = new Vector();?

Response response;?

Try{?

??????? call.setTargetObjectURI(“urn:carApply”);? //設(shè)定服務(wù)名?

??????? call.setMethodName(“carApply”);??????? //設(shè)定方法名?

??????? call.setEncodingStyleURI(Constants.NS-URI-SOAP-ENC);?

??????? vctParamers.addElement(new Parameter?

(“inputXML”,Element.class,elementInput,Constant.NS-URI-LITERAL-XML));?

??????? call.setParamers(vctParameters);???????? //設(shè)定需提交的參數(shù)?

??????? response = call.invoke(url,””)????????????? //調(diào)用汽車(chē)申請(qǐng)服務(wù)?

}catch{}?

…?

6.完成車(chē)牌申請(qǐng)服務(wù);AIL根據(jù)車(chē)牌申請(qǐng)服務(wù)的描述信息來(lái)生成SOAP請(qǐng)求調(diào)用該服務(wù),從而完成用戶(hù)請(qǐng)求信息在交通管理部門(mén)的具體操作,其Java代碼與5中基本相似。?

7.服務(wù)返回信息整合;AIL將服務(wù)調(diào)用的返回信息進(jìn)行整合,形成返回消息。并將此消息傳遞給平臺(tái)服務(wù)器環(huán)境。該返回消息包括汽車(chē)申請(qǐng)的成功與否及車(chē)牌申請(qǐng)的成功與否等具體信息。?

8.返回用戶(hù)信息;服務(wù)器環(huán)境將AIL的返回信息進(jìn)行XML封裝,同樣加上支撐系統(tǒng)的運(yùn)行信息一起返回給客戶(hù)端環(huán)境,客戶(hù)端環(huán)境將用戶(hù)所需的信息解析出后通過(guò)服務(wù)界面最終返回給用戶(hù)。?

5、結(jié)束語(yǔ)?

服務(wù)平臺(tái)是一種世界潮流,它在城域網(wǎng)內(nèi)實(shí)現(xiàn)公眾所需的各種業(yè)務(wù)服務(wù),它將是作為城市信息化的重要組成部分,對(duì)城市的信息化建設(shè)起推動(dòng)作用,并且有利于電子商務(wù)的推廣。本文提出基于SOAP的服務(wù)集成平臺(tái)結(jié)構(gòu)。并在此結(jié)構(gòu)上給出了一個(gè)汽車(chē)銷(xiāo)售服務(wù)的Java實(shí)現(xiàn)。Java和SOAP都具有與平臺(tái)無(wú)關(guān)的優(yōu)良特性,這使得此服務(wù)集成平臺(tái)具有了良好的通用性,各個(gè)功能模塊間的松散耦合又使得此平臺(tái)具有了良好的擴(kuò)展性。

參考文獻(xiàn)?

[1] 施明輝,用基于XML的SOAP機(jī)制構(gòu)建應(yīng)用系統(tǒng),計(jì)算機(jī)應(yīng)用,2002.4?

[2] Bilal Siddiqui ,Developing Web services, Part 3: SOAP interoperability,http://www-106.ibm.com/developerworks/webservices/library/ws-intwsdl3.html,2002.9?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。