宋海沂
(連云港師范高等??茖W(xué)??蒲刑帲K 連云港 222005)
目前,數(shù)字圖書(shū)館應(yīng)用系統(tǒng)的開(kāi)發(fā)普遍采用多層分布式結(jié)構(gòu),并大多以組件技術(shù)(如COM或CORBA)為設(shè)計(jì)基礎(chǔ),創(chuàng)建能夠在應(yīng)用程序之間可重用和共享的組件模塊。但是,由于各自采用的平臺(tái)、協(xié)議、體系結(jié)構(gòu)的差異,使得這種傳統(tǒng)的分布式系統(tǒng)設(shè)計(jì)模式面對(duì)基于異構(gòu)平臺(tái)的Web應(yīng)用系統(tǒng)的實(shí)施與集成的挑戰(zhàn)時(shí),往往顯得力不從心,給數(shù)字圖書(shū)館的資源共享帶來(lái)了很大困難。近年來(lái),隨著以XML(可擴(kuò)展標(biāo)記語(yǔ)言)和Web Services為基礎(chǔ)的新型分布式應(yīng)用系統(tǒng)設(shè)計(jì)模式的崛起和發(fā)展,為解決這一難題提供了新的思路。
國(guó)際權(quán)威組織W3C(Word Wide Web Consortium)給Web Services的定義是:Web Services是被URI(Universal Resource Identifier)確定的一個(gè)軟件應(yīng)用。它的接口和封裝是可以被XML定義描述和發(fā)現(xiàn),并且支持與使用XML消息通過(guò)網(wǎng)絡(luò)協(xié)議的其他應(yīng)用軟件進(jìn)行直接交換。Web Services技術(shù)是建立在XML、SOAP、WSDL(Web Services Description Language)、UDDI(Universal Discovery Description and Integration)基礎(chǔ)之上的分布式應(yīng)用架構(gòu)[1-2]。
Web Services是獨(dú)立的、模塊化的應(yīng)用,能夠通過(guò)因特網(wǎng)來(lái)描述、發(fā)布、定位以及調(diào)用。Web Services面向服務(wù)架構(gòu)SOA(Service Oriented Architecture),包括3個(gè)部分。如圖1所示[3]。
與Web Services有關(guān)的操作主要有以下3種:
①發(fā)布(Publish)。服務(wù)提供者首先需要將服務(wù)進(jìn)行一定描述并發(fā)布到注冊(cè)服務(wù)器上,注冊(cè)自己的功能及訪問(wèn)接口。
②查找(Find)。服務(wù)請(qǐng)求方根據(jù)注冊(cè)服務(wù)器提供的規(guī)范接口發(fā)出查詢請(qǐng)求,通過(guò)Service broker查找以獲取綁定服務(wù)所需的相關(guān)信息。
③綁定(Bind)。服務(wù)請(qǐng)求方通過(guò)分析從注冊(cè)服務(wù)器中得到的服務(wù)綁定信息,包括服務(wù)的訪問(wèn)路徑、服務(wù)調(diào)用的參數(shù)、返回結(jié)果、傳輸協(xié)議、安全要求等,對(duì)自己的系統(tǒng)進(jìn)行相應(yīng)配置,進(jìn)而遠(yuǎn)程調(diào)用服務(wù)提供者所提供的服務(wù)。
①良好的封裝性,調(diào)用時(shí)只考慮Web服務(wù)的功能列表,無(wú)需了解實(shí)現(xiàn)細(xì)節(jié)。②促進(jìn)松耦合的分布式應(yīng)用,只要Web應(yīng)用的界面不變,其他任何變更,甚至遷移到其他平臺(tái),對(duì)于調(diào)用者來(lái)說(shuō)都是透明的。③基于Internet標(biāo)準(zhǔn)協(xié)議的開(kāi)發(fā)和使用,提高了系統(tǒng)的開(kāi)放性、通用性和擴(kuò)展性。④通過(guò)跨平臺(tái)、透明化的動(dòng)態(tài)業(yè)務(wù)集成,降低了系統(tǒng)復(fù)雜性。
美國(guó)著名情報(bào)學(xué)家蘭開(kāi)斯特(F.Wilfrid Lancaster)認(rèn)為,未來(lái)圖書(shū)館應(yīng)該是沒(méi)有圍墻、沒(méi)有門(mén)檻、高度共享和無(wú)紙化的圖書(shū)館。上個(gè)世紀(jì)90年代以來(lái),隨著網(wǎng)絡(luò)技術(shù)和計(jì)算機(jī)技術(shù)的飛速發(fā)展,這一“理念”正逐漸變?yōu)楝F(xiàn)實(shí),但共享卻成為發(fā)展過(guò)程的一個(gè)“瓶頸”[5]。圖書(shū)館數(shù)字化的核心基礎(chǔ)是數(shù)據(jù)庫(kù),但是由于異構(gòu)數(shù)據(jù)庫(kù)間并不兼容,使得信息共享難以實(shí)現(xiàn)?;赬ML的Web服務(wù)在信息服務(wù)機(jī)構(gòu)中可以解決這一難題。因此,兩者的結(jié)合是未來(lái)圖書(shū)館信息共享問(wèn)題的天然解決方式。
在綜合考察現(xiàn)有的分布式數(shù)字圖書(shū)館應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)的基礎(chǔ)上,根據(jù)Web Services開(kāi)發(fā)的基本原理,我們提出了基于XMLWeb服務(wù)構(gòu)架的圖書(shū)館體系結(jié)構(gòu)(如圖2)。
在這個(gè)結(jié)構(gòu)中,單個(gè)圖書(shū)館既可以通過(guò)注冊(cè)機(jī)構(gòu)(簡(jiǎn)稱UDDI)來(lái)查找其他圖書(shū)館或信息源發(fā)布的Web服務(wù),然后對(duì)其進(jìn)行捆綁應(yīng)用,直接提供給客戶使用,也可以針對(duì)自己的特色館藏創(chuàng)建Web服務(wù),然后通過(guò)注冊(cè)機(jī)構(gòu)進(jìn)行對(duì)外發(fā)布,以供其他圖書(shū)館引用。
下面通過(guò)建立一個(gè)簡(jiǎn)單的XMLWeb服務(wù)來(lái)介紹如何將Web服務(wù)應(yīng)用到圖書(shū)館建設(shè)中。開(kāi)發(fā)一個(gè)基于XMLWeb服務(wù)的數(shù)字圖書(shū)館主要有以下幾個(gè)步驟:①評(píng)估安全選項(xiàng);②創(chuàng)建并測(cè)試基于XML的Web服務(wù);③創(chuàng)建一個(gè)使用該Web服務(wù)的Web應(yīng)用項(xiàng)目。
2.2.1 安全性選項(xiàng)
目前國(guó)內(nèi)的一些數(shù)字圖書(shū)館(如:中國(guó)知網(wǎng)、萬(wàn)方)在檢索全文信息時(shí)通常要求用戶是注冊(cè)(付費(fèi))用戶,這就需要對(duì)用戶進(jìn)行身份認(rèn)證。關(guān)于XMLWeb服務(wù)的安全保證有兩套選擇方案[6]。第一種是由內(nèi)置的IIS安全選項(xiàng)組成。這些選項(xiàng)的好處是不需要額外的用戶數(shù)據(jù)庫(kù),但對(duì)Internet應(yīng)用來(lái)說(shuō),為每一個(gè)顧客創(chuàng)建一個(gè)域用戶記錄可能并不是最好的方案。第二種方案是提供自定義驗(yàn)證。目前,Web服務(wù)安全采用的是已有的Internet和WWW的一些安全策略,例如數(shù)字簽名、XML加密技術(shù)和標(biāo)準(zhǔn)、訪問(wèn)標(biāo)準(zhǔn)技術(shù)等。本示例采用了第二種方案。
2.2.2 創(chuàng)建基于XML的Web服務(wù)
目前,Web服務(wù)的構(gòu)建平臺(tái)主要有IBM的Websphere,Microsoft的Visual Studio.net及Sun的Sun ONE。本系統(tǒng)采用的是SUN的J2EE,因?yàn)镴2EE具有平臺(tái)獨(dú)立性、面向?qū)ο蠹夹g(shù)、多線程、動(dòng)態(tài)性、安全性、健壯性和分布式等優(yōu)點(diǎn)[7],使得Web服務(wù)的開(kāi)發(fā)與應(yīng)用變得非常簡(jiǎn)單和方便。筆者側(cè)重介紹如何實(shí)現(xiàn)一個(gè)Web Service,即基于無(wú)狀態(tài)會(huì)話EJB組件的FindBook Web Service。編程模型采用RPC-StyleWeb Serviced。下面以FindBook Web Service開(kāi)發(fā)為例,說(shuō)明使用java ant工具開(kāi)發(fā)基于Weblogic服務(wù)器的Web Service的實(shí)現(xiàn)方法。
生成FindBook.jar文件:Web Service的生成需要EJB.jar文件,因此,在EJB組件代碼實(shí)現(xiàn)以及部署描述文件ejb-jar.xml和weblogic-ejb-jar.xm l的基礎(chǔ)上,使用JAR命令生成FindBook.jar文件。具體過(guò)程如下:
①創(chuàng)建一個(gè)臨時(shí)目錄temp。
②拷貝已編譯好的FindBook EJB類文件及相關(guān)支持類文件至臨時(shí)目錄。
③在臨時(shí)目錄下創(chuàng)建META-INF子目標(biāo)。
④將EJB的部署文件ejb-jar.xml和weblogic-ejb-jar.xm l拷貝至META-INF子目錄。
⑤利用jar命令創(chuàng)建FindBook.jar文件。
步驟如下:
①創(chuàng)建一個(gè)新目錄。
②將FindBook.jar文件和build.xml文件拷貝至新創(chuàng)建的目錄。
③運(yùn)行ant命令,在本目錄中產(chǎn)生FindBook.ear文件。
部署Web Service:可直接將ear文件拷貝到BEA_HOME/config/domain/applications目錄。其中BEA_HOME指Weblogic的安裝主目錄。
至此,已完成基于Weblogic服務(wù)器的Web Service開(kāi)發(fā)的所有工作,可以接受客戶端對(duì)Web Service的調(diào)用。
2.2.3 使用XMLWeb服務(wù)
可建一個(gè)新的項(xiàng)目來(lái)使用這個(gè)Web服務(wù)。下面以一個(gè)簡(jiǎn)單的應(yīng)用程序來(lái)展示如何調(diào)用XMLWeb服務(wù)。在J2EE框架中,JAX-RPC將客戶端調(diào)用轉(zhuǎn)換成一個(gè)基于HTTP請(qǐng)求的SOAP消息發(fā)送給服務(wù)器,服務(wù)器收到客戶請(qǐng)求,把SOAP消息轉(zhuǎn)換成方法調(diào)用服務(wù)器的Web Services方法,再通過(guò)JAX-RPC將結(jié)果包裝成SOAP消息形式返回給客戶。用JAX-RPC開(kāi)發(fā)Web Services非常容易。一個(gè)Web Services有兩個(gè)文件:一個(gè)是接口,用來(lái)定義Web Services的遠(yuǎn)端可以調(diào)用的方法;另外一個(gè)是實(shí)現(xiàn)了這個(gè)接口方法的類。以下是相關(guān)的部分代碼:
定義的Web Services方法的接口
import java.rm.iRemote;
import java.rm.iRemote Exception;
public interface Book extends Remote{
public Book id []get BookList( )//Web Services方法
throws Remote Exception;
public String orderBook(String bookName,int num)//Web Services方法
Throws Remote Exception;}
實(shí)現(xiàn)了上述接口的類如:
Public classBookImp1 implements Book{
Public Bookid[]get BookList()throws Remote Exception{
…}
Public String orderBook(String bookName,int num)throws Remote Exception{
…}}
綜上所述,如果采用Web服務(wù)來(lái)構(gòu)架數(shù)字圖書(shū)館,就可以從真正意義上做到數(shù)字圖書(shū)館的共建共享。因?yàn)橛辛薟eb服務(wù),我們就可以不必去關(guān)心某一數(shù)字圖書(shū)館采用的是什么操作系統(tǒng)以及何種開(kāi)發(fā)工具,我們只需要去關(guān)心它發(fā)布的Web服務(wù),然后進(jìn)行具體應(yīng)用即可。因此,基于XMLWeb服務(wù)的理念和技術(shù)的出現(xiàn),將給未來(lái)圖書(shū)館的建設(shè)帶來(lái)新的思路。
XML的出現(xiàn)解決了在不同平臺(tái)/系統(tǒng)之間的數(shù)據(jù)結(jié)構(gòu)/模式的差異,使得數(shù)據(jù)層在XML技術(shù)的支持下統(tǒng)一起來(lái),XML成為了互聯(lián)網(wǎng)上的通用語(yǔ)。Web服務(wù)完全基于XML獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn),是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。Web服務(wù)的目的就是實(shí)現(xiàn)語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、協(xié)議無(wú)關(guān)的互操作。
Web服務(wù)不僅是一些協(xié)議的集合、獨(dú)立應(yīng)用實(shí)體的集合,還是一個(gè)集應(yīng)用邏輯、商務(wù)智能、網(wǎng)絡(luò)技術(shù)、工作流管理、知識(shí)表示、邏輯推理、安全保密和信息集成等技術(shù)為一體的新興應(yīng)用模式?;赬ML的Web Services構(gòu)建的數(shù)字圖書(shū)館是采用XML、SOAP、WSDL、UDDI、J2EE等多種開(kāi)放標(biāo)準(zhǔn)而開(kāi)發(fā)的,可以預(yù)期在不久的將來(lái)基于XML的Web Services將得到廣泛的應(yīng)用,并為解決長(zhǎng)期困擾用戶內(nèi)部,尤其用戶之間的信息系統(tǒng)集成問(wèn)題開(kāi)辟有效途徑。
[1] Catalog of OMG Specifications.[2007-09-30.]http://www.omg.org/technology/documents/spec_catalog.htm.
[2] Web Services Architecture.2002-06-04[2007-09-30].http://www.w3.org/2002/ws/arch/2/08/wd-wsa-arch-20020821.html.
[3] 葉小陽(yáng).基于Web Services的分布式數(shù)字圖書(shū)館解決方案.圖書(shū)情報(bào)知識(shí),2005(2):87-89.
[4] Hongbing Wang est..Web services:problems and future directions.Web Semantics:Science,Services and Agents on theWorld WideWeb,2004(1):309-320.
[5] 王本年等.Web智能研究現(xiàn)狀與發(fā)展趨勢(shì).計(jì)算機(jī)研究與發(fā)展,2005(5):721-727.
[6] Paul Kearney.Message level security for web services.Information Security Technical Report,2005(10):41-50.
[7]Stephen Asbury,Scott R.Weiner著.王強(qiáng)等譯.Java企業(yè)極應(yīng)用開(kāi)發(fā)指南.北京:機(jī)械工業(yè)出版社,2004:13-25.