專利名稱:用于事件服務聲明、注冊、以及通知的方法和設備的制作方法
技術領域:
本發(fā)明涉及事件服務,并尤其涉及在一個客戶機服務器環(huán)境中的事件的聲明,注冊以及通知。
背景技術:
移動通信和互聯(lián)網(wǎng)在相當大程度上增強了信息對公眾的可用性。利用一臺連接到互聯(lián)網(wǎng)的個人電腦或一個支持環(huán)球網(wǎng)(Web)的移動電話,人們幾乎可以立即獲得信息,從剛發(fā)生的新聞到實時股票報價,到運動事件的得分。
這種對跟蹤事件(例如運動得分,股票價格,等等)的能力導致使用單目標接入?yún)f(xié)議(SOAP)以及超文本傳輸協(xié)議(HTTP)的“環(huán)球網(wǎng)服務”的發(fā)展。HTTP是一種由環(huán)球網(wǎng)服務器和客戶機瀏覽器用于在因特網(wǎng)上(以電子形式)移動文檔的著名協(xié)議。SOAP是用于在一種操作系統(tǒng)(例如Windows 2000)中運行的程序與在相同或另一種操作系統(tǒng)(例如Linux)中運行的程序之間通過使用HTTP通話的一種途徑,并且其可擴展標識言語(XML)作為信息交換的機制。因為環(huán)球網(wǎng)協(xié)議被安裝并且可用于所有主要操作系統(tǒng)平臺,因此HTTP和XML對于在一個網(wǎng)絡中不同的操作系統(tǒng)下運行的程序之間如何互相通話的問題提供了一個現(xiàn)成的解決方案。SOAP確切規(guī)定如何將HTTP報頭和XML文件編碼,所以在某一計算機中的一個程序可以訪問在另一計算機中的一個程序并且傳輸其信息。它也指定被訪問的程序可以如何返回一個響應。這一切是本領域所公知的技術。
隨著當前用于環(huán)球網(wǎng)服務的設計的主要問題之一是它們僅僅是“輪詢”。這意味著如果在SOAP和HTTP上通信的兩個系統(tǒng)需要能交換數(shù)據(jù),接著如果請求該數(shù)據(jù)的系統(tǒng)(客戶機)需要從提供該數(shù)據(jù)的系統(tǒng)(服務器)上獲取最近的數(shù)據(jù)拷貝,則唯一的途徑就是該客戶機周期性地發(fā)送消息到請求該數(shù)據(jù)的一個新版本的服務器。在運動得分的例子中,例如,從提供該得分的服務器請求運動得分的客戶機將要周期性地把一個請求發(fā)送到該服務器,大體上說“把最近完成的一局比賽的得分發(fā)送給我”(用一個棒球的例子),并且該服務器將效勞。如果自從最近的請求發(fā)出以后,該局沒有改變,則返回相同的得分;一旦該局結(jié)束,新的得分會在接收到下一個請求之后發(fā)送。這被稱為“輪詢”,其在雙方系統(tǒng)中浪費資源并且產(chǎn)生大量不必要的雙倍網(wǎng)絡通信量。
一種普通的備選方案用于使該服務器與客戶機在一種異步協(xié)議上通信,如與IBM的WebSphere MQ,TIBCO的Active Enterprise相接的Java消息服務器(JMS),或其他類似的消息導向中間件(MOM),所以無論何時,當在該服務器中發(fā)生客戶機感興趣的事情(例如,一局的結(jié)束),該服務器將“公布”一個消息到一個客戶機訪問的JMS標題或隊列(如需關于標準Java JMS規(guī)范的附加信息,請創(chuàng)建http//iava.sun.com/products/ims/,其被包含于此作為參考)。
關于這個備選方案的一個問題是,雖然它提供了所希望得到的異步通知,但是它要求前提MOM軟件以支持JMS可用于雙方系統(tǒng),而且雙方系統(tǒng)可以利用MOM的特點通信。因為需要更多的軟件,這個方案可能是昂貴的,并且也可能在安裝了防火墻的情況下遇到問題,因為MOM軟件為用于內(nèi)部網(wǎng)通信而開發(fā)的,并不是計劃工作在更開放并且安全性低的互聯(lián)網(wǎng)環(huán)境中的。
因而,所需要的是一種用于環(huán)球網(wǎng)服務以達到異步通信的途徑,例如,在一種標準通信協(xié)議,如HTTP,上提供異步事件通知,并不需要客戶機和服務器使用同樣的前提軟件。
發(fā)明內(nèi)容
本發(fā)明提出一種使無關的和“不協(xié)調(diào)的”系統(tǒng)(即沒有計劃通過使用同樣的前提軟件進一步共同工作的系統(tǒng))能鏈接在一起以促進事件通知的新穎的“事件注冊服務”。本發(fā)明的事件注冊服務鏈接這些無關系統(tǒng)(例如,有被公開事件的系統(tǒng)與已注冊對這些事件感興趣的系統(tǒng))以促進無關系統(tǒng)之間的事件通知。
該事件注冊系統(tǒng)通過結(jié)合環(huán)球網(wǎng)服務檢驗語言(WSIL)和XML模板(XSLT)的功能起作用。依照本發(fā)明,WSIL層被建立以提出事件聲明和事件注冊。XSLT作為一個適配器,從一個API(例如,被表現(xiàn)為一個SOAP消息)轉(zhuǎn)換到另一個(例如,另一個代表一種不同的數(shù)據(jù)結(jié)構(gòu)的SOAP消息,例如來自一個COBOL譯本的SOAP消息)。
圖1是一個說明可以使用本發(fā)明的系統(tǒng)的各種原理的結(jié)構(gòu)圖;圖2是說明與本發(fā)明的聲明步驟有關的基本步驟的流程圖;圖2A是一個WSIL根文檔的示意圖;圖2B是一個改良形態(tài)中的WSIL根文檔的示意圖;圖3是說明一個與依照本發(fā)明的事件注冊有關的基本步驟的流程圖;圖3A說明一個第二WSIL結(jié)構(gòu);以及圖4是說明被執(zhí)行用于事件通知的步驟的一個例子的流程圖。
具體實施例方式
所有事件系統(tǒng),包括使用先有技術的系統(tǒng),要求(a)一個事件被公布;(b)注冊對一個被公布的事件的興趣;以及(c)發(fā)生該事件發(fā)生的通知。圖1是一個說明可以使用本發(fā)明的系統(tǒng)的各種原理的結(jié)構(gòu)圖。參見圖1,一個事件服務器102通過一個網(wǎng)絡連接(例如,一個局域網(wǎng)、廣域網(wǎng)、或互聯(lián)網(wǎng))連接到一個或多個客戶機。在圖1的例子中,示出了三個這樣的客戶機106、108、和110。
圖1的系統(tǒng)作為一個事件系統(tǒng)的基本操作如下。服務器102對該網(wǎng)絡作出一個聲明,即,在收到請求時,它具有一個或更多事件可用于傳送??蛻魴C106、108、和110可能向服務器102注冊這些事件中的一個或多個事件,即它們向服務器102表明它們想要的某種事件信息被發(fā)送給它們。在出現(xiàn)所注冊的事件之后,事件服務器102對適當?shù)目蛻魴C發(fā)送適當?shù)氖录畔ⅰ?br>
如上所述,為了使先有技術的系統(tǒng)適當?shù)仄鹱饔?,在一種異步的方式中,服務器102和客戶機106、108、和110必須有某種消息導向中間件,即必須有關系到允許異步地釋放該事件的預先計劃的某些級別。本發(fā)明避免對這樣的預先計劃的需要。
僅僅為了舉例,結(jié)合涉及運動提供者信息網(wǎng)絡(SPIN)的一個假設的情況描述本發(fā)明的操作,這是一個實時提供棒球和籃球的運動得分的服務。他們已決定為了消除“環(huán)球網(wǎng)風暴”(不可預料的,對一個環(huán)球網(wǎng)站點的網(wǎng)絡流量的猛增)將提供帶比賽得分的事件注冊服務,它們隨著一節(jié)(籃球)或局(棒球)的結(jié)束而產(chǎn)生。任何一個希望收到由SPIN提供的事件的實時運動得分的人可以請求通知。
圖2是說明跟本發(fā)明的聲明步驟有關的基本步驟的流程圖。參見圖2,在步驟202,事件聲明過程隨著事件的產(chǎn)生而開始,由程序的開發(fā)者做出該通知,例如,該事件服務器,對于一個定義一個WSDL(環(huán)球網(wǎng)服務定義語言)端口類型的WSDL文檔, 其包含一個或多個“通知”操作。該WSDL文檔包含用于客戶機程序以發(fā)現(xiàn)什么服務開始被提供的所需信息,例如,在該通知中傳遞的信息的詳細結(jié)構(gòu)。如WSDL規(guī)范(http//www.w3.org/TR/wsdl)中定義的,一個通知操作(見WSDL規(guī)范2.4.4節(jié))是僅僅包含一個輸出部分-它可用代表一個SOAP(單目標接入?yún)f(xié)議-見http//www.w3.org/TR/SOAP/)消息或其他格式的消息,其代表外發(fā)信息而沒有任何輸入信息。
同樣地,能夠產(chǎn)生與這個已被描述的輸出相應的SOAP消息的軟件必須由服務器軟件的開發(fā)者創(chuàng)建。例如,如果一個事件系統(tǒng)將把曲棍球得分傳送給訂購用戶,該開發(fā)者必須建立一個WSDL文檔,這個文檔描述該得分自身的格式,接著建立服務器軟件,該軟件把該得分從一個通訊社、數(shù)據(jù)庫、或其他環(huán)球網(wǎng)站點取得以產(chǎn)生該得分。
用于SPIN例子的一個樣本W(wǎng)SDL文檔如下所示
<pre listing-type="program-listing"> <?xml version="1.0"?> ?。糳efinitions name="SPIN-RealtimeInfo-interface" targetNamespace="SPIN-RealtimeInfo-interface" xmlnsspin="SPIN-RealtimeInfo-interface" xmlnsxsd="http//www.w3.org/1999/XMLSchema" xmlnssoap="http//schemas.xmlsoap.org/wsdl/soap/" xmlns="http//schemas.xmlsoap.org/wsdl/"> <types> <xsdschema targetNamespace="SPIN-RealtimeInfo-interface"> <xsdcomplexType name="InningScoreInformation"> <sequence> ?。紉sdelement minOccurs="1"maxOccurs="1"name="inning"type="xsdstring"/> <xsdelement minOccurs="1"maxOccurs="1"name="homeTeam"type="xsdstring"/> ?。紉sdelement minOccurs="1"maxOccurs="1"name="homeScore"type="xsdint"/> ?。紉sdelement minOccurs="1"maxOccurs="1"name="awayTeam"type="xsdstring"/> <xsdelement minOccurs="1"maxOccurs="1"name="awayScore"type="xsdint"/> ?。紉sdelement minOccurs="1"maxOccurs="1"name="stats"type="xsdstring"/> ?。紉sdelement minOccurs="1"maxOccurs="1"name="commentary"type="xsdstring"/> ?。?sequence> ?。?xsdcomplexType><dp n="d5"/> </types> ?。糾essage name="EndOfInningEvent"> ?。紁art name="EndOfInningPart″type="spinInningScoreInformation"/> </message> <portType name="EventsPort"> ?。紀peration name="EndOfInningEvent"> <output message="spinEndOfInningEvent"/> </operation> ?。?portType></pre>在以上例子中,每個部件執(zhí)行一個特殊功能。在該“types”標簽之間的信息定義被提供在該通知中的信息的結(jié)構(gòu)。在該“message”標簽之間的信息描述該信息如何結(jié)合到一個消息(一個消息可以有多個主題或“parts”;在這個例子中只有一個)。在該“portType”標簽之間的信息描述消息如何結(jié)合到一個“type”,其可以提供先前引用的WSDL規(guī)范中所述的幾種不同形式的信息,例如,一局的結(jié)束事件和比賽的結(jié)束事件。
在步驟204,該WSDL文檔被插入定義一個標題URI和操作的一個WSIL文檔。事件由兩條信息描述。該標題URI代表一個開始產(chǎn)生的事件的類型的概述;例如,在廣播體育得分的服務中,該標題URI將描述正在發(fā)布的得分的類型,例如"/sports/professional/baseball"或"/sports/college/basketball"。該URI代表可能發(fā)生的事件標題的一個樹形結(jié)構(gòu)。每個新事件將適合于這個樹形結(jié)構(gòu)的某個部分。這個樹形結(jié)構(gòu)由客戶機程序使用(事件通知的接收器)以在其登記收到一個事件通知時確定哪個事件可用。
該插入通過使用一個WSIL可擴展部件而完成(見WSIL規(guī)范,2.1.1節(jié))這提供在由該標題URI定義的事件層中定位WSDL文檔的能力。
例如,假設圖2A所示的層已經(jīng)被定義。該層的根將是一個包含引用各個標題文檔的鏈接部件的WSIL文檔。該處理在最復雜的情況開始,在此不存在用于一個特別標題的事件聲明(在圖2A的例子中,這將是/sports/professional/baseball)。在新部件的插入之前,該WSIL根文檔將是這樣的<pre listing-type="program-listing"> ???xml version="1.0"?> ?。糹nspectionxmlns="http//schemas.xmlsoap.org/ws/2001/10/inspection" xmlnswsevent="http//tempuri.org/ws/2002/2/event/"> ?。糽inkreferencedNamespace="http//schemas.xmlsoap.org/ws/2001/10/inspection"location="http//example.com/sports/professional/basketball.WSIL"/> <wseventeventReferencetopic="/sports/professional/basketball"/> ?。?link> </inspection></pre>因為這是一個新標題,一個包含事件參考部件的鏈接部件被創(chuàng)建。在插入該新部件以后(以下以粗體字表示),該根文檔將像以下所示<pre listing-type="program-listing"> <?xml version="1.0"?> ?。糹nspectionxmlns="http//schemas.xmlsoap.org/ws/2001/10/inspection" xmlnswsevent="http//tempuri.org/ws/2002/2/event/"> <linkreferencedNamespace="http//schemas.xmlsoap.org/ws/2001/10/inspection"<dp n="d7"/>location="http//example.com/sports/professional/basketball.WSIL"/> <wseventeventReferencetopic="/sports/professional/basketball"/> ?。?link> <linkreferencedNamespace="http//schemas.xmlsoap.org/ws/2001/10/inspection"location="http//example.com/sports/professional/baseball.WSIL"/> <wseventeventReferencetopic="/sports/professional/baseball"/> </link> ?。?inspection></pre>該新鏈接引用一個附加的WSIL文檔,該文檔包含客戶機程序可能預定的新事件操作的聲明。該文檔將如下所示;<pre listing-type="program-listing"> <?xml version="1.0"?> ?。糹nspectionxmlns="http//schemas.xmlsoap.org/ws/2001/10/inspection/"xmlnswsevent="http//tempuri.org/ws/2002/2/event/"> <service> <descriptionreferencedNamespace="http//schemas.xmlsoap.org/wsdl/"location="http//example.com/sports/professional/baseball/baseball.wsdl"> <wseventeventDeclaration operation="EndOfInningEvent"/><dp n="d8"/> </description> </service> ?。?inspection></pre>在這個步驟完成的時候,該最終層將如圖2B所示。利用這個被修正的層,現(xiàn)在存在一個WSIL文檔,于是客戶機能夠遍歷以確定什么標題是可用的,什么可能被事件操作注冊,以及詳該事件消息的詳細結(jié)構(gòu)是什么。
一旦該事件被公布,下一個步驟是事件注冊。圖3是說明一個與依照本發(fā)明的事件注冊有關的基本步驟的流程圖。參見圖3,在步驟302,該事件注冊過程開始于一個客戶機程序(即當一個事件發(fā)生,將通過環(huán)球網(wǎng)服務被通知的程序)獲得該根WSIL文檔。該文檔可能被從任何用于獲得WSIL文檔的已知機制獲取,例如從一個環(huán)球網(wǎng)服務器,從來自于存儲在一個數(shù)據(jù)庫中的信息的應用程序產(chǎn)生,或從共享硬盤驅(qū)動器讀取。
其次,在步驟304,該客戶機程序按步通過該根WSIL文檔尋找與所希望得到通知的事件相匹配的特殊事件層。它通過比較事件參考(eventReference)標簽中的標題URI"s和一個預先知道的事件層描述,識別該層而識別該層。例如,如果該客戶機程序要注冊以獲得棒球職業(yè)比賽的得分,它將搜索一個事件參考標簽,該標簽有一個標題與"/sports/professional/baseball"匹配。這個步驟有可能是與一個用戶交互作用的,即,可在這個文檔中獲得的事件參考目錄可以顯示給該用戶并且該用戶可以選擇一個感興趣的特殊事件參考。這個導航可能通過共用的API"s例如WSIL4J完成。
再次,該客戶機程序?qū)㈦S著事件參考標簽中的"location"參考尋找與該標題URL相應的WSIL文檔。注意這個子步驟可能遞歸-這可能導致一個包含其他WSIL鏈接標簽的文檔,每個鏈接標簽包含到另一個WSIL文檔的另一個事件參考。在該客戶機找到該感興趣的事件樹上的最低文檔的點上,該遞歸參考將結(jié)束并且該客戶機程序?qū)@得一個WSIL文檔,這在WSIL描述標簽中包含一個或多個事件聲明標簽。
在這點,步驟304完成。該客戶機程序已識別一個特殊標題URI并且唯一對應于包含用于該操作的事件聲明標簽的WSIL聲明標簽所引用的WSDL文檔中的一個操作。該WSDL文檔和該操作名將在步驟306中被使用。
依靠該SOAP消息的形式,步驟306是一個可選步驟。在步驟306,做出一個關于來自于該事件服務器的SOAP消息是否與該客戶機相兼容。在多數(shù)情況中,該客戶機程序計劃接收的SOAP消息將不與該SOAP消息的格式匹配,則WSDL中的操作在步驟304中被識別。假設這個不匹配,一個轉(zhuǎn)換必須出現(xiàn)在該事件服務器上,使得該客戶機接收的SOAP消息與所期望接收的相匹配(在形式上)。因而,該客戶機程序?qū)a(chǎn)生一個XSLT文檔(步驟308)以允許該服務器將該輸出XML文檔(該輸出SOAP消息)轉(zhuǎn)換為成另一個XML文檔(該客戶機期望接收的形式的SOAP消息)。
如果來自于服務器的SOAP消息與該客戶機相兼容,該客戶機程序不產(chǎn)生該XSLT文檔,并且假定該客戶機接收的SOAP消息將嚴格地匹配對應于步驟304中引用的WSDL中定義的操作的SOAP消息的結(jié)構(gòu)。
在步驟310,該客戶機程序通過存儲在該事件服務器上的事件注冊服務進行注冊。為了完成這個操作,該客戶機程序?qū)υ撌录苑仗峁┤缦滦畔?.一個描述該客戶機程序?qū)ⅰ奥犎 币粋€單向環(huán)球網(wǎng)服務調(diào)用的準確位置的WSDL文檔。這個WSDL文檔必須包含一個服務,該服務包含一個上行到SOAP的端口,該端口引用一個被定義為WSDL單向(解釋見WSDL規(guī)范2.4.1節(jié))操作的特殊WSDL操作。這被稱為服務/端口/操作三聯(lián)體。這種文檔的一個實例如下所示;2.包含在該WSDL文檔中的該服務/端口/操作三聯(lián)體的名字,該WSDL文檔唯一定義該客戶機程序所期望接收的特殊消息結(jié)構(gòu);3.該客戶機希望當相應的事件發(fā)生的時候被通告的該標題URI的名字和該操作的名字;
4.(可選地)一個過濾串,其由一組詢問部件而構(gòu)成(例如可以使用在http//www.w3.org/TR/xquery/中描述的X詢問(Xquery),或任何其他詢問語言(例如ANSI SQL-92標準的派生語言)所定義)這允許基于已知結(jié)構(gòu)數(shù)據(jù)來表達詢問。這個過濾串將描述一個該客戶機程序選擇接收的SOAP消息的子集。例如,在上述的WSDL文檔中,該數(shù)據(jù)部件之一是字段"homeTeam"。這種類型的詢問可能是如"homeTeam=Cardinals"這樣的短語。這將意味著,這個客戶機希望接收的僅僅是由St.Louis Cardinals參加的比賽的得分通知;以及5.(可選地)(上文參照步驟308所述的類型的)一個XSLT文檔,其允許從由WSDL描述的輸出SOAP格式轉(zhuǎn)換到由在步驟310的部分1中的WSDL文檔所提供的輸入SOAP格式。如果輸入SOAP形式。如果沒有提供這樣的文檔,則假定該通知操作的SOAP形式和由該兩個WSDL文檔描述的單向操作準確地匹配。
在步驟310完成時,該客戶機程序?qū)⒔又却撌录l(fā)生的通知(步驟312)。
以下是一個客戶機程序WSDL文檔的例子,依照步驟310建立,定義一個單向操作<pre listing-type="program-listing"> ?。迹縳ml version="1.0"?> ?。糳efinitions name="InstantMessage" targetNamespace="http//example.com/instantmessage.wsdl" xmlnstns="http//example.com/instantmessage.wsdl" xmlnsxsd1="http//example.com/instantmessage.xsd" xmlnssoap="http//schemas.xmlsoap.org/wsdl/soap/" xmlns="http//schemas.xmlsoap.org/wsdl/"> <types> <schematargetNamespace="http//example.com/instantmessage.xsd"<dp n="d11"/> xmlns="http//www.w3.org/2000/10/XMLSchema"> <element name="InstantMessageData"> ?。糲omplexType> <all> <elementname="message"type="string"/> </all> </complexType> ?。?element> </schema> ?。?types> <message name="InstantMessageReceived"> ?。紁art name="body"element="xsd1InstantMessageData"/> ?。?message> <portType name="InstantMessagePortType"> <operation name="ReceiveInstantMessage"> ?。糹nput message="tnsInstantMessageReceived"/> </operation> </portType> ?。糱indingname="InstantMessageSoapBinding"type="tnsInstantMessagePortType"> <soapbinding style="document"transport="http//schemas.xmlsoap.org/soap/http"/> <operation name="ReceiveInstanteMessage"> <soapoperation<dp n="d12"/>soapAction="http//example.com/InstantMessageReceived"/> ?。糹nput> <soapbody use="literal"/> ?。?input> ?。?operation> ?。?binding> ?。約ervice name="InstantMessageService"> <portname="InstantMessagePort"binding="tnsInstantMessageBinding"> <soapaddresslocation="http//example.com/instantmessage"/> </port> ?。?service> ?。?definitions></pre>在步驟314,該事件注冊服務增加一個新入口到表現(xiàn)這個客戶機程序的第二WSIL結(jié)構(gòu)。通過為一個特殊客戶機在一個描述標簽中添加一個事件標簽而完成該操作。例如,考慮如下WSIL文檔<pre listing-type="program-listing"> ?。迹縳ml version="1.0"?> <inspectionxmlns="http//schemas.xmlsoap.org/ws/2001/10/inspection/"xmlnswsevent="http//tempuri.org/ws/2002/2/event/"> ?。約ervice> <descriptionreferencedNamespace="http//schemas.xmlsoap.org/wsdl/"<dp n="d13"/>location="http//subscriber1.com/instantmessenger.wsdl"> <wseventeventxmlnsmsg="http//subscriber1.com/InstantMessage/"serviceName="msgInstantMessageService" portName="msgInstantMessagePort"outboundOperation="ReceiveInstantMessage" topicURI="/sports/professional/baseball"inboundOperation="GetEndOfInningScore"transform="http//subscriber1.com/BaseballService.xsl" filter="[filter string]" /> </description> </service> ?。?inspection></pre>這個文檔規(guī)定由該服務名、端口名和在本地找到的WSDL文檔中定義的操作的組合唯一指定的客戶機應當接收用于該標題URI和所指定的出站操作的通知。該服務器使用在變換中指定的URL處找到的XSLT文檔以從它的SOAP消息格式改變?yōu)橛煞彰?、端口名、入站操作三?lián)體指定的格式。此外,由"filter"指定的串被用于對每個外發(fā)的SOAP消息評估以確定其是否將被發(fā)送到這個客戶機。該第二WSIL的結(jié)構(gòu)如圖3A所示。
如圖3A所示,每個WSDL文檔表現(xiàn)該客戶機所希望得到的接口連同其他信息被置入一個WSDL層,該信息包括標題URI和出站操作、XSLT文檔參考、過濾串、以及唯一識別將被事件通知調(diào)用的該客戶機WSDL中操作的入站服務名、端口名和入站操作三聯(lián)體。從而,在該事件通知階段(下文)中該事件服務器將擁有所有必要信息以在事件發(fā)生的基礎上以該客戶機優(yōu)選的形式通報該客戶機。這所有的信息被存儲在由該標題URI從其他標題URI層更高的WSIL文檔以一個WSDL擴展標簽的形態(tài)查詢的一個WSDL文檔中。在本例中,這個擴展標簽被命名為"event"。
參考圖4描述作為最后部件的事件通知,該圖示出為事件通知執(zhí)行的步驟的一個例子的流程圖。參見圖4,該事件通知處理由一個事件發(fā)生在服務器上為開始(步驟402)。該事件可能是通過一個用戶的動作,通過一個消息或通知的接收,通過一個計時器的動作,或通過任何其他在該服務器上調(diào)用一個方法的手段觸發(fā)的。該服務器被配置以基于這個內(nèi)部事件觸發(fā)一個外部通知。
在步驟404,該事件服務器把該事件與一個特殊標題URI和操作相匹配。在一個最簡單的情形中,該信息可以被傳遞到觸發(fā)該事件的方法,例如以下方法觸發(fā)事件(String標題URI,String操作名,[其他參數(shù)])該“其他參數(shù)”可能包括,例如,在該外發(fā)SOAP通知消息中,將被傳遞到外部客戶機程序的參數(shù);在該SPIN的例子中,這樣的信息可能包括主隊名、客隊名和球賽的最終得分。
在步驟406,該事件通知服務器產(chǎn)生一個與先前已注冊的WSDL描述匹配的外發(fā)SOAP消息用于該事件聲明過程中的這個標題URI和操作名。這個SOAP消息最后將以“原始”形態(tài)或被改變以符合該客戶機的形態(tài)發(fā)送給該客戶機。
在步驟408,該事件通知服務器遍歷該第二WSIL結(jié)構(gòu)(描述于圖3的步驟314中)并且使用于在步驟404中被調(diào)用的事件方法的標題URI與用于等待該事件的通知的客戶機程序并且包含該事件聽眾注冊(該事件標簽)的一個WSIL文檔相匹配。該事件通知服務器同樣通過這個WSIL文檔(通過該事件標簽搜索)中已注冊的客戶機程序表遍歷以建立一個希望得到這個標題URI和出站操作通知的署名用戶表。
在步驟410,該事件通知服務器對任何用于這個署名用戶的過濾詢問求值并確定署名用戶是否希望就基于包含在步驟406中被建立的SOAP消息中的信息的特殊事件被通告。
在步驟412,如果對該過濾詢問求值的結(jié)果顯示這個署名用戶希望就此事件被通告(或者沒有過濾串被指定)那么該服務器為該署名用戶進行到步驟414。如果對該過濾詢問求值的結(jié)果顯示這個署名用戶不希望被通知該事件,則該過程完成對此署名用戶的處理并且轉(zhuǎn)到步驟408以開始對下一個署名用戶的評估。
在步驟414,如果有一個XSLT文檔被指定用于此署名用戶(例如,在圖3的步驟314中,對此署名用戶的注冊階段中,提供一個XSLT文檔被提供),該處理為此署名用戶進行到步驟416。否則,該處理直接進行到步驟418。
在步驟416,該外發(fā)SOAP消息被利用在步驟414引用的XSLT文檔轉(zhuǎn)換,因此產(chǎn)生一個新的SOAP消息。在步驟418,SOAP消息(該原始的或在步驟416中新產(chǎn)生的)被傳輸?shù)皆谠揥SDL端口部件中指定的客戶機位置,用于圖3的步驟314中指定的署名用戶。
在步驟420,如果有任何署名用戶遺留在該表中,該處理轉(zhuǎn)到步驟408以處理剩余的署名用戶。否則(即,如果不再有署名用戶要被處理),該事件通知過程終止。
利用以上描述的發(fā)明,可以達到很多好處。這些好處包括,但不局限于(1)用于聲明的事件的WSIL的使用允許客戶機程序用支持XML的任何語言編寫,以發(fā)現(xiàn)可用于注冊的事件;(2)用于將外發(fā)事件通知轉(zhuǎn)換成一個客戶機指定形態(tài)的XSLT的使用允許客戶機從若干不同的來源聽取事件-例如,一個即時通知的客戶機可以從兩個不同的站點聽取運動得分和證券報價信息;(3)代表署名用戶樹的WSIL的使用允許事件通知服務器和產(chǎn)生事件的各個代碼塊要用兩種不同的語言編寫-例如,接受通知的服務器的部分由Java語言編寫,并且產(chǎn)生該事件和發(fā)出通知的部分可以由Visual Basic或C++編寫。
這將可以理解,示意圖的每個部件和示意圖中部件的組合,可以由執(zhí)行指定的功能或步驟的通用和/或?qū)S玫挠布到y(tǒng)來實現(xiàn),和/或由通用和/或?qū)S玫挠布陀嬎銠C指令的組合來實現(xiàn)。
這些程序指令可以被提供給一個處理器以生產(chǎn)一種機器,這樣在處理器上執(zhí)行的指令產(chǎn)生用于實現(xiàn)示意圖中指定功能的裝置。該計算機程序指令可能由一個處理器執(zhí)行以使得一系列操作步驟由該處理器執(zhí)行以產(chǎn)生一個由計算機實現(xiàn)的處理,這樣執(zhí)行在該處理器上的指令提供用于實現(xiàn)示意圖中指定功能的步驟。因此圖1-4支持用于完成所指定功能的手段的結(jié)合、用于完成所指定功能的步驟的結(jié)合、以及用于完成所指定功能的程序指令手段。
以上所描述的步驟可以利用標準的著名編程技術實現(xiàn)。以上描述的實施例的新穎性不在特殊編程技術中,而是在為達到指定結(jié)果的指定步驟的使用中展現(xiàn)。使本發(fā)明具體化的軟件編程代碼代表性地以某種方式存儲在永久存儲器中,例如該事件服務器中的永久存儲器。在一個客戶機/服務器環(huán)境中,這樣的軟件編程代碼可能以關聯(lián)一個服務器的存儲器存儲。該軟件編程代碼可能在與一個數(shù)據(jù)處理系統(tǒng)連用的任意種類的知名媒體中具體化,如磁盤、或硬盤驅(qū)動器、或CD-ROM。該代碼可以在這樣的媒體上發(fā)布,或可能發(fā)布到用戶,從某種類型的網(wǎng)絡上一個計算機系統(tǒng)的記憶體或存儲器到供其他計算機系統(tǒng)用戶使用的系統(tǒng)。用于在物理媒體上和/或通過網(wǎng)絡發(fā)布的軟件代碼使軟件程序代碼具體化的技術和方法是眾所周知的并將不在此贅述。
盡管本發(fā)明關于一個特殊首選實施例被描述出來,其中多種改變和修改可能提示給熟練的技術人員。例如,在此描述的例子關系到基于環(huán)球網(wǎng)的事件系統(tǒng),諸如實時運動得分、股票價格、等等的提供。然而可以理解本發(fā)明可以用于其他基于環(huán)球網(wǎng)的事件服務,而不基于環(huán)球網(wǎng)的系統(tǒng)也一樣。作為一個例子,本發(fā)明可以用于一個工廠環(huán)境,在此當一個緊急情況發(fā)生的時候,需要關閉工廠樓層上的不同機器。在這個情況中,通過工廠網(wǎng)絡,這些機器將用一個控制工廠操作的工廠控制服務器在一個“關閉”事件上注冊通知。當該工廠控制服務器將提供描述于此的通知功能時,不同的機器由描述于此的客戶機程序控制。在此例中,涉及兩個非人類的相對方。當該工廠控制服務器識別到達一個內(nèi)部限制因素的存在(例如,該工廠完全缺乏某些重要的部分)那么它將外發(fā)該“關閉”事件-所有客戶機器將接收對他們的特殊控制協(xié)議的特制的消息。由一個運送材料的機器人接收的消息可能是“回到基站”,而由一個自動化噴漆機器接收的消息可能是“排漆并進入睡眠狀態(tài)”本發(fā)明有意包含屬于附加權(quán)利要求的范圍的改變和修改。
權(quán)利要求
1.一種在事件系統(tǒng)中用于事件聲明、注冊和通知的方法,包括以下步驟創(chuàng)建定義包含一個或多個通知操作的一個WDSL端口類型的WDSL文檔;將所述WDSL文檔插入定義一個標題URI和操作的一個根WSIL文檔;將所述根WDSL文檔存儲在一個事件服務器上;由一個客戶機獲得所述根WSIL文檔;由所述客戶機識別在所述根WSIL文檔中指定的事件;以及由所述客戶機注冊所述所識別的事件,使得所述事件服務器以預定的時間間隔向所述客戶機傳送與所述所識別事件有關的事件信息。
2.一種在事件系統(tǒng)中用于事件聲明、注冊和通知的系統(tǒng),包括用于創(chuàng)建定義包含一個或多個通知操作的WDSL端口類型的WDSL文檔的裝置;用于將所述WDSL文檔插入定義一個標題URI和操作的一個根WSIL文檔的裝置;用于將所述根WDSL文檔存儲在一個事件服務器上的裝置;用于由一個客戶機獲得所述根WSIL文檔的裝置;用于由所述客戶機識別在所述根WSIL文檔中指定的事件的裝置;以及用于由所述客戶機注冊所述所識別的事件,使得所述事件服務器以預定的時間間隔向所述客戶機發(fā)送與所述所識別事件有關的事件信息的裝置。
3.一個在事件系統(tǒng)中用于事件聲明、注冊和通知的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包括具有體現(xiàn)在該媒體中的計算機可讀程序代碼的計算機可讀存儲媒體,該計算機可讀程序代碼包括創(chuàng)建定義包含一個或多個通知操作的一個WDSL端口類型的WDSL文檔的計算機可讀程序代碼;將所述WDSL文檔插入定義一個標題URI和操作的一個根WSIL文檔中的計算機可讀程序代碼;將所述根WDSL文檔存儲在一個事件服務器上的計算機可讀程序代碼;由一個客戶機獲得所述根WSIL文檔的計算機可讀程序代碼;由所述客戶機識別在所述根WSIL文檔中指定的事件的計算機可讀程序代碼;以及由所述客戶機注冊所述所識別的事件,使得所述事件服務器以預定的時間間隔向所述客戶機傳送與所述所識別事件有關的事件信息的計算機可讀程序代碼。
全文摘要
在此公開一種使無關的和“不協(xié)調(diào)的”系統(tǒng)(即沒有通過使用同樣的前提軟件預先計劃共同工作的系統(tǒng))能鏈接在一起以促進事件通知的“事件注冊服務”。該事件注冊服務鏈接這些無關系統(tǒng)(例如,具有被公開事件的系統(tǒng)與已注冊對這些事件感興趣的系統(tǒng))以促進無關系統(tǒng)之間的事件通知。該事件注冊系統(tǒng)通過結(jié)合環(huán)球網(wǎng)服務檢驗語言(WSIL)和XML模板(XSLT)的功能起作用。依照本發(fā)明,WSIL層被建立以代表事件聲明和事件注冊。XSLT被用作為一個適配器,從一個API(被代表,例如,一個SOAP消息)轉(zhuǎn)換到另一個(例如,另一個代表一種不同的數(shù)據(jù)結(jié)構(gòu)的SOAP消息,例如從一個COBOL副本導出的SOAP消息)。
文檔編號G06F9/46GK1527556SQ20031012330
公開日2004年9月8日 申請日期2003年12月23日 優(yōu)先權(quán)日2002年12月24日
發(fā)明者彼得·J·布里頓翰穆, 凱勒·布朗, 斯蒂芬·格雷漢姆, 馬克·D·韋澤爾, 格雷漢姆, D 韋澤爾, 布朗, 彼得 J 布里頓翰穆 申請人:國際商業(yè)機器公司