欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于事件處理的虛擬機(jī)和編程語(yǔ)言的制作方法

文檔序號(hào):6592960閱讀:559來(lái)源:國(guó)知局

專利名稱::用于事件處理的虛擬機(jī)和編程語(yǔ)言的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及計(jì)算機(jī),更具體地說(shuō),涉及用于事件處理(例如,在業(yè)務(wù)監(jiān)視和/或業(yè)務(wù)集成環(huán)境中)的虛擬機(jī)和編程語(yǔ)言。
背景技術(shù)
:事件驅(qū)動(dòng)的應(yīng)用程序在業(yè)務(wù)監(jiān)視和業(yè)務(wù)集成中扮演著越來(lái)越重要的角色。例如,國(guó)際商業(yè)機(jī)器公司(“IBM”)提供的WebSphere業(yè)務(wù)集成平臺(tái)支持用于業(yè)務(wù)環(huán)境的多種不同類型的事件驅(qū)動(dòng)的可執(zhí)行體(executables)。這些類型的可執(zhí)行體包括狀態(tài)機(jī)、用于復(fù)雜事件處理(“CEP”)和事件關(guān)聯(lián)的規(guī)則以及監(jiān)視上下文。(“WebSphere”是IBM在美國(guó)和/或其他國(guó)家/地區(qū)的注冊(cè)商標(biāo)。)在業(yè)務(wù)監(jiān)視和業(yè)務(wù)集成環(huán)境中,通常作為消息傳送事件。消息驅(qū)動(dòng)的可執(zhí)行體包括過(guò)程和調(diào)解(mediation)。
發(fā)明內(nèi)容在第一方面中,本發(fā)明涉及執(zhí)行事件處理的虛擬機(jī)。在一個(gè)實(shí)施例中,此方面包括在計(jì)算機(jī)上使用所述虛擬機(jī)執(zhí)行來(lái)自程序的指令,其中所述指令包括以下指令中的至少一個(gè)事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)??梢詮氖录?qū)動(dòng)的模型規(guī)范和/或消息驅(qū)動(dòng)的模型規(guī)范生成所述指令。可以在所述計(jì)算機(jī)上使用所述虛擬機(jī)執(zhí)行來(lái)自多個(gè)程序的指令,所述多個(gè)程序可從至少兩個(gè)不同的執(zhí)行模型生成。執(zhí)行所述事件指令可以進(jìn)一步包括執(zhí)行所述事件指令以接收特定入站事件;查找與所述事件指令關(guān)聯(lián)的扇出指令;執(zhí)行所找到的扇出指令以便使用與所找到的扇出指令關(guān)聯(lián)的關(guān)聯(lián)謂詞信息判定任何當(dāng)前執(zhí)行上下文對(duì)象是否能夠進(jìn)一步處理所述特定入站事件;以及如果有能力的執(zhí)行上下文對(duì)象存在,將所述特定入站事件導(dǎo)向每個(gè)所確定的有能力的執(zhí)行上下文對(duì)象以便在其中進(jìn)行進(jìn)一步處理。用于接收入站事件的所述事件指令還可以過(guò)濾所述入站事件。使用所述虛擬機(jī)執(zhí)行所述指令可以進(jìn)一步包括在接收到特定入站事件時(shí),在來(lái)自所述程序的多個(gè)事件指令中的每個(gè)事件指令內(nèi)存在類型規(guī)范的情況下,通過(guò)將所述特定入站事件聲明的類型與所述多個(gè)事件指令中的每個(gè)事件指令內(nèi)的類型規(guī)范相比較來(lái)確定要執(zhí)行所述多個(gè)事件指令中的哪個(gè)事件指令。執(zhí)行所述賦值指令可以進(jìn)一步包括對(duì)所述賦值指令的表達(dá)式求值;以及將所述求值的結(jié)果作為值分配給由所述賦值指令標(biāo)識(shí)的目標(biāo)。執(zhí)行所述分支指令可以進(jìn)一步包括對(duì)所述分支指令的條件表達(dá)式求值;以及其中所述有條件的轉(zhuǎn)移可以進(jìn)一步包括當(dāng)所述求值返回“true”結(jié)果時(shí),接下來(lái)執(zhí)行由所述分支指令的屬性標(biāo)識(shí)的另一個(gè)指令,否則,接下來(lái)執(zhí)行所述指令中的下一順序指令。執(zhí)行所述發(fā)送指令可以進(jìn)一步包括將所述出站事件發(fā)送到事件總線。執(zhí)行所述發(fā)送指令可以進(jìn)一步包括對(duì)所述發(fā)送指令中指定的表達(dá)式求值并在所述發(fā)送之前在所述出站事件中反映所述求值的結(jié)果。執(zhí)行所述終止指令可以進(jìn)一步包括終止所述當(dāng)前執(zhí)行上下文對(duì)象。在第二方面中,本發(fā)明涉及用于事件處理的編程語(yǔ)言。在一個(gè)實(shí)施例中,此方面包括存儲(chǔ)以編程語(yǔ)言編寫的源代碼的計(jì)算機(jī)可讀介質(zhì),其中所述編程語(yǔ)言包括事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè),并且其中所述源代碼包括所述編程語(yǔ)言中的多個(gè)所述指令。在另一個(gè)實(shí)施例中,此方面包括一種可存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中以使計(jì)算機(jī)執(zhí)行的指令程序,其中所述指令包括多個(gè)以下指令事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)。所述編程語(yǔ)言可以用于從事件驅(qū)動(dòng)的模型規(guī)范和/或消息驅(qū)動(dòng)的模型規(guī)范生成的程序。本發(fā)明的這些和其他方面的實(shí)施例可以被提供為方法、系統(tǒng)和/或計(jì)算機(jī)程序產(chǎn)品。應(yīng)指出的是,上述內(nèi)容為概要,并且因此必然包含詳細(xì)信息的簡(jiǎn)化、概括和省略;從而,本領(lǐng)域的技術(shù)人員將意識(shí)到所述概要僅為示例性的,并非旨在以任何方式進(jìn)行限制。如所附權(quán)利要求限定的本發(fā)明的其他方面、發(fā)明特性和優(yōu)點(diǎn)將在下面給出的非限制詳細(xì)描述中變得顯而易見(jiàn)?,F(xiàn)在將僅通過(guò)實(shí)例的方式參考附圖描述本發(fā)明的優(yōu)選實(shí)施例,這些附圖是圖1示出了根據(jù)本發(fā)明的一個(gè)方面的通過(guò)單個(gè)虛擬機(jī)支持先前通過(guò)定制引擎支持的應(yīng)用的多個(gè)高級(jí)編程模型的使用;圖2示出了根據(jù)本發(fā)明的一個(gè)方面的入站事件的處理;圖3-6提供了示出根據(jù)本發(fā)明的一個(gè)方面的可用于在虛擬機(jī)內(nèi)處理“Ice”程序的邏輯的流程圖;圖7示出了可由本發(fā)明以及第一和第二相關(guān)申請(qǐng)中披露的發(fā)明的各方面執(zhí)行的處理的高級(jí)視圖;圖8-13分別提供了狀態(tài)機(jī)模型、事件類型規(guī)范、事件、上下文對(duì)象類型規(guī)范、上下文對(duì)象以及用于狀態(tài)機(jī)執(zhí)行的Ice程序的實(shí)例;圖14-17分別提供了監(jiān)視模型、編譯器生成的輸出文件、編譯器生成的交叉引用文件以及示例上下文對(duì)象類型規(guī)范的實(shí)例;圖18(包括圖18A和18B)示出了由第一相關(guān)申請(qǐng)中披露的發(fā)明的一個(gè)方面使用的編譯器算法;圖19提供了用于Ice語(yǔ)言的示例模式;圖20示出了適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng);以及圖21示出了其中可使用本發(fā)明的一個(gè)或多個(gè)實(shí)施例的代表性網(wǎng)絡(luò)環(huán)境。具體實(shí)施例方式在本發(fā)明的一個(gè)方面中,定義了一種編程語(yǔ)言。此編程語(yǔ)言可以被稱為“機(jī)器級(jí)”編程語(yǔ)言。在本發(fā)明的另一個(gè)方面中,披露了一種處理引擎,在此等價(jià)地稱為虛擬機(jī)??梢栽跇I(yè)務(wù)監(jiān)視和業(yè)務(wù)集成中使用兩種不同的通信類型,即遠(yuǎn)程方法調(diào)用(使用遠(yuǎn)程過(guò)程調(diào)用或“RPC”通信)和基于事件的通信。本發(fā)明的各方面涉及基于事件的通信?;谑录耐ㄐ趴梢詡溥x地被稱為事件產(chǎn)生者與事件使用者之間的基于“單向”消息的通信??梢允褂弥苯訉ぶ奉愋突蚴褂冒l(fā)布-訂閱方法交換此類單向消息。業(yè)務(wù)監(jiān)視情況中的通信通常是基于事件的,而業(yè)務(wù)基礎(chǔ)情況中的通信可以使用這兩種類型之一??梢詡溥x地根據(jù)其路由算法描述這些通信類型,注意基于消息的編程和基于事件的編程中使用的路由算法是不同的。用于基于消息的編程的路由算法通常使用有向或“推”模型,而用于基于事件的編程的路由算法通常使用訂閱或“拉”模型。但是,觀察到使用同一組基本步驟或功能來(lái)處理到達(dá)端點(diǎn)的事件或消息。相應(yīng)地,本發(fā)明的各實(shí)施例并不限于與事件驅(qū)動(dòng)的可執(zhí)行體一起使用,諸如過(guò)程和調(diào)解之類的消息驅(qū)動(dòng)的可執(zhí)行體也在本發(fā)明所界定的可執(zhí)行體范圍內(nèi)。用于處理事件或消息的基本步驟通常包括接收事件/消息;過(guò)濾所收到的事件/消息;將所述事件/消息與一個(gè)或多個(gè)執(zhí)行上下文對(duì)象關(guān)聯(lián)(并且取決于高級(jí)編程模型,這些對(duì)象可以表示狀態(tài)機(jī)執(zhí)行上下文、CEP存在時(shí)間、監(jiān)視上下文、過(guò)程執(zhí)行上下文、調(diào)解上下文等);根據(jù)事件/消息內(nèi)容更新目標(biāo)執(zhí)行上下文(多個(gè))的內(nèi)部狀態(tài);評(píng)估條件并執(zhí)行有條件的分支;如有必要發(fā)送出站一個(gè)或多個(gè)事件/消息(例如,狀態(tài)機(jī)模型情況下的狀態(tài)轉(zhuǎn)變事件、CEP規(guī)則情況下的聚合消息、監(jiān)視上下文情況下的警報(bào)、過(guò)程模型情況下的下一活動(dòng)的啟動(dòng)消息,以及調(diào)解情況下的調(diào)解消息);以及創(chuàng)建或終止執(zhí)行上下文對(duì)象。雖然可以使用高級(jí)編程模型(S卩,狀態(tài)機(jī)、CEP、監(jiān)視、過(guò)程、調(diào)解等)以用戶友好的方式定義此類可執(zhí)行體,但是本發(fā)明的一個(gè)方面定義了一種包括相對(duì)簡(jiǎn)單的指令集的編程語(yǔ)言,可以將這些模型作為可執(zhí)行體編譯成此編程語(yǔ)言。然后,可以在此處披露的虛擬機(jī)上執(zhí)行此編譯的可執(zhí)行體。值得注意的是,可以在此同一虛擬機(jī)上執(zhí)行來(lái)自不同高級(jí)編程模型的已編譯可執(zhí)行體(如將在下面參考圖1描述的那樣)。相比之下,現(xiàn)有技術(shù)業(yè)務(wù)集成平臺(tái)通常針對(duì)每個(gè)高級(jí)編程模型使用不同的執(zhí)行環(huán)境,從而針對(duì)平臺(tái)所支持的每種可執(zhí)行體提供“定制引擎”。例如,如果特定平臺(tái)支持狀態(tài)機(jī)、用于復(fù)雜事件處理和事件關(guān)聯(lián)的規(guī)則、監(jiān)視上下文、過(guò)程以及調(diào)解,則管理和維護(hù)此平臺(tái)及其各種引擎或執(zhí)行環(huán)境可能變得非常困難。在此披露的虛擬機(jī)能夠?qū)⒅С值膱?zhí)行環(huán)境的數(shù)量減少到1??梢岳缤ㄟ^(guò)專注于單個(gè)虛擬機(jī)實(shí)施的開(kāi)發(fā)、性能優(yōu)化、管理和操作接口、文檔等實(shí)現(xiàn)成本節(jié)省。在此披露的編程語(yǔ)言能夠使用此單個(gè)虛擬機(jī)支持先前通過(guò)定制引擎支持的應(yīng)用。使用不同的編譯器支持不同的高級(jí)編程模型。參閱圖1,它示出了此方法。如圖中所示,可與監(jiān)視模型110的聲明式程序一起使用的第一編譯器120提供可使用虛擬機(jī)150執(zhí)行的代碼,并且可與狀態(tài)機(jī)模型130—起使用的第二編譯器140提供可使用此同一虛擬機(jī)150執(zhí)行的代碼。此方法提供的抽象還可便于將執(zhí)行環(huán)境移植到不同的硬件平臺(tái)和操作系統(tǒng)。本發(fā)明和相關(guān)發(fā)明的實(shí)施例優(yōu)選地用于其中使用發(fā)布_訂閱通信分發(fā)事件的應(yīng)用環(huán)境中,其中事件訂閱方從一個(gè)或多個(gè)事件源(發(fā)布方)接收事件并處理這些事件。但是,本發(fā)明和相關(guān)發(fā)明的實(shí)施例可以備選地用于基于消息范例的應(yīng)用環(huán)境中,其中只要消息滿足在目標(biāo)處部署的Ice程序的訂閱準(zhǔn)則,消息產(chǎn)生者便會(huì)將這些消息發(fā)送到特定目標(biāo)(即,消息接收方);將在下面更詳細(xì)地討論這些準(zhǔn)則。發(fā)送和接收事件可以遵循“事件總線”范例,由此將入站事件視為從連接事件源與事件接收方的總線(其例如可以實(shí)現(xiàn)為隊(duì)列或其他數(shù)據(jù)存儲(chǔ)和傳輸技術(shù))接收,并且由此將出站事件視為傳送到此總線以便傳輸給感興趣的收聽(tīng)方。在此定義的編程語(yǔ)言使用相對(duì)較少數(shù)量的指令,這些指令設(shè)計(jì)為支持上述基本步驟或功能。借用處理器體系結(jié)構(gòu)領(lǐng)域中的術(shù)語(yǔ),這可以被稱為用于事件處理應(yīng)用(或備選地消息處理應(yīng)用)的“精簡(jiǎn)指令集”或“RISC”方法。要指出的是,此編程語(yǔ)言可以由編譯器生成,并且通常不供編程人員使用。(第一相關(guān)申請(qǐng)中披露了一個(gè)此類編譯器,此編譯器與監(jiān)視上下文模型有關(guān))。在一種方法中,此編程語(yǔ)言中使用的指令包括六個(gè)指令?,F(xiàn)在將描述其中每個(gè)指令?!皁nEvent”指令或語(yǔ)句通常對(duì)應(yīng)于接收單個(gè)入站事件,并指定入站事件“訂閱”(即,針對(duì)訂閱入站事件指定的信息)。優(yōu)選地使用可擴(kuò)展標(biāo)記語(yǔ)言或“XML”,表示法指定入站事件和出站事件,其中包括此類事件的內(nèi)容或“有效負(fù)載”。相應(yīng)地,onEvent指令可以引用入站事件內(nèi)XML文檔(或文檔片段)中的元素和屬性。在一個(gè)優(yōu)選實(shí)施例中,onEvent指令包括“filter(過(guò)濾)”屬性,其布爾條件表示訂閱準(zhǔn)則其內(nèi)容滿足過(guò)濾條件的任何事件均被視為滿足此onEvent語(yǔ)句的訂閱。當(dāng)此類事件到達(dá)虛擬機(jī)時(shí),將由onEvent的從屬語(yǔ)句(多個(gè))進(jìn)行處理,其中這些從屬語(yǔ)句也取自在此披露的指令集?,F(xiàn)在將描述這些從屬語(yǔ)句。提供了“fanOut(扇出)”指令或語(yǔ)句,此指令實(shí)現(xiàn)事件關(guān)聯(lián)和上下文切換。跟在onEvent語(yǔ)句之后的第一fanOut指令在入站事件的上下文中執(zhí)行,并將事件與零個(gè)或多個(gè)變成初始執(zhí)行上下文的上下文對(duì)象關(guān)聯(lián)以處理事件。后續(xù)fanOut語(yǔ)句在當(dāng)前上下文對(duì)象的上下文中執(zhí)行,并將事件與零個(gè)或多個(gè)新上下文對(duì)象關(guān)聯(lián),由此實(shí)現(xiàn)從當(dāng)前上下文對(duì)象到新上下文對(duì)象(多個(gè))的上下文切換;這些新上下文對(duì)象將變成fanOut語(yǔ)句范圍內(nèi)的后續(xù)指令的執(zhí)行上下文?!癮ssign(賦值)”指令或語(yǔ)句通常對(duì)應(yīng)于為當(dāng)前上下文對(duì)象(其可以表示狀態(tài)機(jī)上下文、監(jiān)視上下文、過(guò)程執(zhí)行上下文等)的某個(gè)空位(slot)或出站事件的某個(gè)空位分配值。在一個(gè)優(yōu)選實(shí)施例中,賦值語(yǔ)句的右側(cè)是表達(dá)式,此表達(dá)式取決于1值或當(dāng)前上下文對(duì)象(如果具有建立此類上下文對(duì)象的fanOut)和入站事件(被視為執(zhí)行上下文的一部分)中的空位。“branch(分支)”指令或語(yǔ)句通常對(duì)應(yīng)于控制有條件的轉(zhuǎn)移到程序中的上一或下一步驟,并且可以指定“distance(距離),,屬性以指示當(dāng)執(zhí)行分支時(shí)控制將轉(zhuǎn)移到的指令的相對(duì)偏移。distance屬性的正值指示執(zhí)行順序中的向前跳轉(zhuǎn),負(fù)值指示控制轉(zhuǎn)移到前一指令。在一個(gè)優(yōu)選實(shí)施例中,分支條件是布爾表達(dá)式,針對(duì)其1值應(yīng)用相同的規(guī)則,如上針對(duì)賦值語(yǔ)句的右側(cè)所討論的那樣。如果分支條件的值為true,則采用分支;否則,執(zhí)行繼續(xù)到跟在分支指令之后的語(yǔ)句?!癳mit(發(fā)送)”指令或語(yǔ)句通常對(duì)應(yīng)于指定要發(fā)送出站事件。通常在填充所述出站事件的一個(gè)或多個(gè)空位(例如,通過(guò)執(zhí)行賦值指令)之后使用此指令?!皌erminate(終止)”指令或語(yǔ)句通常對(duì)應(yīng)于指定應(yīng)終止當(dāng)前上下文對(duì)象(其可以表示狀態(tài)機(jī)上下文、監(jiān)視上下文、過(guò)程執(zhí)行上下文等)??蛇x地,還可以支持“macro(宏)”指令或語(yǔ)句。此指令可以用于封裝可重用的指令塊。術(shù)語(yǔ)“Ice”在此用于指此編程語(yǔ)言?!癐ce”源自術(shù)語(yǔ)“中間代碼”,并指示以此語(yǔ)言編寫的程序優(yōu)選地是執(zhí)行的中間步驟,表示派生自采用另一種表示法編寫的源代碼并且然后在此處描述的虛擬機(jī)環(huán)境中執(zhí)行的編譯后輸出。在第一相關(guān)申請(qǐng)中披露了一種用于從監(jiān)視模型派生Ice程序的可能算法。(值得注意的是,在此披露的編程語(yǔ)言優(yōu)選地由編譯器生成,并且通常不由用戶編寫。)通過(guò)將所述編程語(yǔ)言中的指令減少到在此描述的這些指令,可以促進(jìn)移植性,并且可以在單個(gè)運(yùn)行時(shí)環(huán)境的實(shí)施和優(yōu)化方面實(shí)現(xiàn)經(jīng)濟(jì)性。如第一和第二相關(guān)申請(qǐng)中所述,顯示中間代碼的執(zhí)行步驟以及原始源可以為用戶提供在調(diào)試期間查看的有用信息粒度。例如,當(dāng)調(diào)試事件驅(qū)動(dòng)型程序時(shí),允許用戶對(duì)算術(shù)表達(dá)式求值時(shí)涉及的每個(gè)操作或在數(shù)據(jù)庫(kù)中保持值時(shí)涉及的每個(gè)操作進(jìn)行單步調(diào)試并不被認(rèn)為是有用的。實(shí)際上,假設(shè)可以在不出現(xiàn)錯(cuò)誤的情況下執(zhí)行此類型的基本操作。相應(yīng)地,在第一相關(guān)申請(qǐng)中披露的編譯器(其采用在此定義的編程語(yǔ)言生成代碼)的優(yōu)選實(shí)施例不會(huì)針對(duì)此類原始操作生成代碼(并且在第二相關(guān)申請(qǐng)中披露的調(diào)試器不提供對(duì)這些原始操作進(jìn)行單步調(diào)試),而是將此類操作封裝在已編譯代碼根據(jù)需要調(diào)用的低級(jí)例程中,從而為嘗試調(diào)試高級(jí)程序的用戶提供“原子”操作的外表。這預(yù)期不僅使調(diào)試更少地困擾用戶,而且預(yù)期還降低已編譯代碼的復(fù)雜性(這又預(yù)期通常改進(jìn)已生成代碼的編譯過(guò)程和運(yùn)行時(shí)效率)。此方法與業(yè)務(wù)監(jiān)視和業(yè)務(wù)集成中使用的高級(jí)編程模型的公知代碼生成器形成對(duì)照,后者可以采用Java編程語(yǔ)言生成代碼。(Java是SunMicrosystemsInc.的商標(biāo)。)此類代碼生成器通常生成包含許多步驟(例如,方法調(diào)用、內(nèi)部變量的初始化和管理、異常處理等)的代碼,這些步驟可使代碼生成器的邏輯復(fù)雜化。此外,由這些公知代碼生成器生成的代碼可能會(huì)給嘗試調(diào)試原始源程序的用戶增加太多不感興趣的細(xì)節(jié)分析上述高級(jí)編程模型的所需運(yùn)行時(shí)環(huán)境時(shí),可以看到應(yīng)解決三個(gè)方面類型系統(tǒng)、表達(dá)式語(yǔ)言和執(zhí)行邏輯(即,指令排序)。對(duì)于事件處理,本發(fā)明的優(yōu)選實(shí)施例針對(duì)類型系統(tǒng)使用XML模式,針對(duì)表達(dá)式語(yǔ)言使用公知的XPath表示法,并使用在此披露的Ice語(yǔ)言指定執(zhí)行順序以便在接收上下文對(duì)象的領(lǐng)域中處理事件。但是,所述類型系統(tǒng)和表達(dá)式語(yǔ)言是可插入的,并且因此同一Ice語(yǔ)言編程模型可以用于不同的類型系統(tǒng)和不同的表達(dá)式語(yǔ)言。(在此披露的虛擬機(jī)可以將表達(dá)式求值例如委托給插入組件,然后可以通過(guò)重新配置虛擬機(jī)以使用不同的表達(dá)式求值組件來(lái)替代不同的表達(dá)式語(yǔ)言。)現(xiàn)在將描述由本發(fā)明的實(shí)施方式的一個(gè)優(yōu)選實(shí)施例提供的運(yùn)行時(shí)行為。現(xiàn)在將描述優(yōu)選實(shí)施例中使用的執(zhí)行上下文方法??梢栽谔囟ㄉ舷挛闹刑幚砣胝臼录?,所述特定上下文可以使用諸如XML模式之類的類型定義語(yǔ)言建模。相應(yīng)地,可以在包含零個(gè)或多個(gè)上下文對(duì)象的上下文中處理入站事件,所述上下文可以是持久的(即,可跨若干入站事件重用)或暫時(shí)的(即,在處理事件之后終止)。上下文對(duì)象具有與之關(guān)聯(lián)的類型,并且在一種方法中,在虛擬容器(在此等價(jià)地簡(jiǎn)稱為容器)中管理上下文對(duì)象。如果上下文對(duì)象的類型聲明“key(鍵)”屬性,則上下文對(duì)象可以在容器中被多次實(shí)例化,其中每個(gè)實(shí)例具有不同(即,唯一)的鍵值。如果上下文對(duì)象的類型沒(méi)有聲明key屬性,則上下文對(duì)象僅可被實(shí)例化一次,從而在容器中提供單個(gè)“靜態(tài)”實(shí)例。優(yōu)選地,容器管理它所包含的上下文對(duì)象的生命周期和持久性,并根據(jù)它所加載的事件處理程序集處理針對(duì)這些對(duì)象的入站事件?,F(xiàn)在將參考圖2討論此類程序的語(yǔ)義描述。通過(guò)將事件導(dǎo)向訂閱方來(lái)管理事件訂閱。在本發(fā)明的各優(yōu)選實(shí)施例中,容器承擔(dān)事件訂閱方的角色。當(dāng)事件到達(dá)容器時(shí),將根據(jù)可能已由此容器加載的程序中的任何onEvent指令的過(guò)濾器來(lái)測(cè)試事件。在入站事件的上下文中執(zhí)行其過(guò)濾被求值為true的每個(gè)onEvent語(yǔ)句,其中包括處理此onEvent語(yǔ)句的所有嵌套指令(例如,fanOut、assign、branch>emit禾口/或terminate指令)。作為onEvent語(yǔ)句的一個(gè)嵌套指令提供fanOut指令。根據(jù)各優(yōu)選實(shí)施例,fanOut語(yǔ)句指定目標(biāo)對(duì)象類型和關(guān)聯(lián)謂詞,所述關(guān)聯(lián)謂詞用于標(biāo)識(shí)在其上下文中執(zhí)行跟在fanOut之后的指令的目標(biāo)對(duì)象實(shí)例(多個(gè))。圖2示出了onEvent和fanOut的語(yǔ)義。事件201被導(dǎo)向虛擬容器202,虛擬容器202已加載一個(gè)或多個(gè)Ice程序203和關(guān)聯(lián)的類型定義204。在圖2中所示的時(shí)刻,"context1"205a的兩個(gè)實(shí)例和“context2”205b的四個(gè)實(shí)例已在容器中被實(shí)例化。所有已加載的Ice程序203中的onEvent語(yǔ)句表示容器的事件訂閱。根據(jù)每個(gè)訂閱測(cè)試定向到容器202的任意事件201,并且如果事件滿足過(guò)濾條件,則稱事件“通過(guò)過(guò)濾”206。已通過(guò)onEvent語(yǔ)句的過(guò)濾的事件由此onEvent語(yǔ)句的從屬語(yǔ)句處理。fanOut語(yǔ)句將事件與容器中特定上下文對(duì)象類型的零個(gè)或多個(gè)實(shí)例關(guān)聯(lián)。參閱207。然后在此對(duì)象的上下文中處理fanOut語(yǔ)句的從屬語(yǔ)句。其他指令(包括assign、branch、emit和terminate)的語(yǔ)義對(duì)應(yīng)于其他編程語(yǔ)言中的此類指令的公知用法?,F(xiàn)在參考圖3-6,現(xiàn)在將描述根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的在虛擬機(jī)內(nèi)處理Ice程序。圖3提供了示出可用于處理到達(dá)虛擬容器的入站事件的邏輯的流程圖。在各優(yōu)選實(shí)施例中,容器具有事件可以定向到的地址,例如統(tǒng)一資源定位器(“URL”)。針對(duì)此入站事件啟動(dòng)工作單位或事務(wù)(方塊300)。方塊320測(cè)試是否仍根據(jù)此入站事件處理任何onEvent語(yǔ)句。優(yōu)選實(shí)施例按文檔順序?qū)Σ渴鹪诖巳萜魈幍腎ce程序的每個(gè)onEvent語(yǔ)句求值。如果方塊320中的測(cè)試具有否定結(jié)果,則在方塊310,提交所述工作單位(這可以包括發(fā)送出站事件,如在下面參考圖6B所討論的那樣)。然后此事件的處理結(jié)束。但是,當(dāng)剩余至少一個(gè)未處理的onEvent語(yǔ)句時(shí),方塊320處的測(cè)試具有肯定結(jié)果,并且因此處理在方塊330繼續(xù)。方塊330獲取下一onEvent語(yǔ)句。方塊340測(cè)試此onEvent語(yǔ)句的rootElement屬性(如果在其中存在)是否與入站事件的文檔根的完全限定名稱匹配。如果不匹配,則處理返回方塊320以檢查此Ice程序中或此容器中加載的其他Ice程序中的其他onEvent語(yǔ)句。否則,當(dāng)根元素存在匹配時(shí),處理在方塊350繼續(xù)。方塊350根據(jù)入站事件對(duì)此onEvent語(yǔ)句的filter屬性(如果存在)求值。如果過(guò)濾的求值結(jié)果為true(或如果不存在filter屬性),則處理在方塊360繼續(xù);否則,控制返回到方塊320。在方塊360,獲取此onEvent語(yǔ)句的嵌套語(yǔ)句,并且在方塊370處理這些語(yǔ)句,這在圖4中更詳細(xì)地示出。然后控制返回到方塊320。圖4提供了示出可用于處理onEvent語(yǔ)句的嵌套語(yǔ)句的邏輯的流程圖。圖4中的方塊400測(cè)試是否存在下一嵌套語(yǔ)句。如果不存在,則處理從圖4中退出。否則,處理在方塊410繼續(xù),方塊410取回此下一語(yǔ)句。然后方塊420測(cè)試已取回的語(yǔ)句是否為fanOut語(yǔ)句。如果是,則在方塊425處理fanOut語(yǔ)句,此后控制返回到方塊400以檢查另一個(gè)下一語(yǔ)句。在圖5中更詳細(xì)地描述方塊425。當(dāng)方塊420處的測(cè)試具有否定結(jié)果時(shí),處理在方塊430繼續(xù)。方塊430測(cè)試已取回的語(yǔ)句是否為assign語(yǔ)句。如果是,則在方塊435處處理assign語(yǔ)句,此后控制返回到方塊400。在圖6A中更詳細(xì)地描述方塊435。當(dāng)方塊430處的測(cè)試具有否定結(jié)果時(shí),處理在方塊440繼續(xù)。方塊440測(cè)試已取回的語(yǔ)句是否為emit語(yǔ)句。如果是,則在方塊445處理emit語(yǔ)句,此后控制返回到方塊400以檢查另一個(gè)下一語(yǔ)句。在圖6B中更詳細(xì)地描述方塊445。當(dāng)方塊440處的測(cè)試具有否定結(jié)果時(shí),處理在方塊450繼續(xù)。方塊450測(cè)試已取回的語(yǔ)句是否為branch語(yǔ)句。如果是,則在方塊455處理branch語(yǔ)句,此后控制返回到方塊400。在圖6C中更詳細(xì)地描述方塊455。當(dāng)方塊450處的測(cè)試具有否定結(jié)果時(shí),處理在方塊460繼續(xù)。方塊460測(cè)試已取回的語(yǔ)句是否為terminate語(yǔ)句。如果是,則在方塊465處理terminate語(yǔ)句,此后控制返回方塊400。在圖6D中更詳細(xì)地描述方塊465。當(dāng)方塊460處的測(cè)試具有否定結(jié)果時(shí),則處理優(yōu)選地返回方塊400。此外或替代地,可生成錯(cuò)誤條件以指示遇到未知語(yǔ)句。現(xiàn)在參考圖5,提供了示出可用于處理現(xiàn)在將描述的fanOut語(yǔ)句的邏輯的流程圖。在方塊500,針對(duì)其根元素名稱與fanOut語(yǔ)句的“targetRootElement”屬性值匹配的容器中的所有上下文對(duì)象,對(duì)此fanOut語(yǔ)句的關(guān)聯(lián)謂詞求值。(參閱圖13中的1323以了解示例targetRootElement屬性。)如果當(dāng)前求值的fanOut語(yǔ)句中不存在此屬性,則根據(jù)優(yōu)選實(shí)施例,針對(duì)所有已加載的上下文對(duì)象對(duì)關(guān)聯(lián)謂詞求值。方塊510根據(jù)在方塊500處找到多少個(gè)匹配來(lái)確定要使用的處理選項(xiàng)。各優(yōu)選實(shí)施例針對(duì)沒(méi)有匹配、一個(gè)匹配以及多個(gè)匹配提供了處理。因此,fanOut語(yǔ)句可以針對(duì)這些情況中的每一種情況指定屬性,并且這些屬性中適用的一個(gè)屬性的值確定此fansOut語(yǔ)句將如何處理當(dāng)前處理的事件。例如,參考圖13中的編譯器生成的示例可執(zhí)行體1300,1320處的fanOut元素指定如果在其根元素名稱與targetRootElement值匹配的上下文對(duì)象之中沒(méi)有與關(guān)聯(lián)謂詞的匹配,則創(chuàng)建新的上下文對(duì)象(參閱1325,其中在此示例中將屬性值"createNewTarget"指定為“noMatches”屬性的值),如果只有一個(gè)匹配,則將事件傳送到單個(gè)匹配上下文對(duì)象(參閱1326,在此示例中將“deliverToTarget”指定為“oneMatch”屬性值的屬性值),并且如果具有多個(gè)匹配,則存在錯(cuò)誤條件(參閱1327,在此示例中將"signalError"指定為"multipleMatches,,屬性的值)。方塊520-595的邏輯指定由優(yōu)選實(shí)施例實(shí)現(xiàn)的選項(xiàng),用于根據(jù)這些“匹配”相關(guān)的屬性中的一個(gè)相應(yīng)屬性中指定的屬性值處理fanOut語(yǔ)句。根據(jù)各優(yōu)選實(shí)施例,這些處理選項(xiàng)的前四個(gè)(即,由方塊520-555表示)可以用作關(guān)聯(lián)謂詞的三個(gè)匹配相關(guān)的屬性中任何一個(gè)的屬性值;“createNewTarget”選項(xiàng)只能用作“noMatches”屬性的屬性值;“deIiverToTarget,,選項(xiàng)只能用作“oneMatch,,屬性的屬性值;以及這些處理選項(xiàng)的最后兩個(gè)(即,由方塊580-595表示)只能用作“multipleMatches”屬性的屬性值?,F(xiàn)在將描述根據(jù)優(yōu)選實(shí)施例的對(duì)應(yīng)于每個(gè)屬性值的處理。方塊520測(cè)試此fanOut語(yǔ)句是否應(yīng)忽略當(dāng)前處理的事件(即,在方塊510處確定的適用屬性值是否為“ignore”)。如果是,則跳過(guò)此fanOut語(yǔ)句的嵌套語(yǔ)句,并且處理繼續(xù)到跟在此fanOut語(yǔ)句之后的下一語(yǔ)句,如在方塊525處所述,并且因此圖5中的處理退出ο否則,處理在方塊530繼續(xù),方塊530測(cè)試是否應(yīng)發(fā)信號(hào)通知錯(cuò)誤(即,在方塊510處確定的適用屬性值是否為“signalError”)。如果是,則方塊535包括發(fā)送錯(cuò)誤報(bào)告事件。此錯(cuò)誤報(bào)告事件優(yōu)選地包裹當(dāng)前處理的入站事件,并被登臺(tái)以便在提交當(dāng)前事務(wù)時(shí)發(fā)送。將跳過(guò)此fanOut語(yǔ)句嵌套的語(yǔ)句。然后處理繼續(xù)到跟在此fanOut語(yǔ)句之后的下一語(yǔ)句,并且因此圖5中的處理退出。當(dāng)適用的屬性值不是“ignore”或“signalError”時(shí),處理到達(dá)方塊540。然后方塊540測(cè)試適用的屬性值是否為“rollBack”。如果是,則方塊545包括回滾針對(duì)當(dāng)前處理的事件啟動(dòng)的事務(wù),以便撤消此事件對(duì)執(zhí)行上下文的任何影響,并且將不發(fā)送任何待發(fā)送的出站事件。如果本發(fā)明的實(shí)施方式需要,則可以記錄錯(cuò)誤。然后圖5中的處理退出,分支到圖3以從隊(duì)列中取回下一事件(如果有)。方塊550測(cè)試適用的屬性值是否為“rollBackAndRetry”。如果是,則方塊555包括回滾針對(duì)當(dāng)前處理的事件啟動(dòng)的事務(wù),如上參考方塊545所述。但是,并不記錄錯(cuò)誤,而是將當(dāng)前處理的事件放置在重試隊(duì)列中,當(dāng)前處理的事件將從其中出列并再次被求值。(此重試的計(jì)時(shí)以及可以嘗試的重試次數(shù)與實(shí)施方式相關(guān)。)然后圖5中的處理退出,分支到圖3以從隊(duì)列中取回下一事件(如果有)。方塊560測(cè)試方塊510所確定的適用屬性值是否為“creatNewTarget”。如果是,則方塊565包括實(shí)例化新的上下文對(duì)象(并且優(yōu)選地,為其分配默認(rèn)值)并使此對(duì)象成為當(dāng)前執(zhí)行上下文;然后在此新目標(biāo)上下文對(duì)象的上下文中執(zhí)行此fanOut內(nèi)嵌套的語(yǔ)句。要指出的是,如果此fanOut語(yǔ)句內(nèi)嵌套的任何語(yǔ)句指定“currentKey()”函數(shù),則優(yōu)選實(shí)施例將調(diào)用此函數(shù)以返回新的唯一鍵并將此鍵值分配給新上下文對(duì)象的鍵空位。然后圖5中的處理退出。方塊570測(cè)試適用的屬性值是否為“deliverToTarget”。如果是,則方塊575包括將當(dāng)前處理的事件傳送到(單個(gè))匹配執(zhí)行上下文,以便在其中通過(guò)執(zhí)行此fanOut嵌套的語(yǔ)句來(lái)處理事件。然后圖5中的處理退出。方塊580測(cè)試適用的屬性值是否為“deliverToAny”。如果是,則方塊585包括將當(dāng)前處理的事件傳送到任何(單個(gè))匹配執(zhí)行上下文,以便在其中通過(guò)執(zhí)行此fanOut嵌套的語(yǔ)句來(lái)處理事件。用于從一組匹配執(zhí)行上下文選擇此執(zhí)行上下文的方式與實(shí)施方式相關(guān)。然后圖5中的處理退出。最后,方塊590測(cè)試適用的屬性值是否為“deliverToAll”。如果是,則方塊595包括將當(dāng)前處理的事件傳送到所有匹配執(zhí)行上下文,以便在其中通過(guò)執(zhí)行此fanOut嵌套的語(yǔ)句來(lái)處理事件。然后圖5中的處理退出。圖6A-6D提供了示出當(dāng)分別實(shí)施assign、emit、branch和terminate語(yǔ)句時(shí)可以使用的邏輯的流程圖,如現(xiàn)在描述的那樣。接下來(lái)參考圖6A,現(xiàn)在將更詳細(xì)地描述assign語(yǔ)句的處理。在方塊600,通過(guò)對(duì)其“value”表達(dá)式求值并將此求值的結(jié)果分配給“target”表達(dá)式引用的空位來(lái)處理assign語(yǔ)句。例如,參閱圖13中1394處的assign語(yǔ)句的value表達(dá)式1396和target表達(dá)式1395。根據(jù)各優(yōu)選實(shí)施例,對(duì)target表達(dá)式求值以標(biāo)識(shí)定義完善的當(dāng)前上下文對(duì)象空位或要發(fā)送的出站事件的有效負(fù)載空位,并且分配將使用在assign語(yǔ)句的value屬性中指定的表達(dá)式覆蓋此空位的任何先前存在的值。(為了向序列中添加項(xiàng)目,可以將value表達(dá)式指定為現(xiàn)有空位值和要添加的值的并集。)然后圖6A中的處理退出?,F(xiàn)在將參考圖6B更詳細(xì)地描述emit語(yǔ)句的處理。在方塊610,通過(guò)對(duì)其通常導(dǎo)致創(chuàng)建文檔片段(根據(jù)優(yōu)選實(shí)施例,為XML文檔片段)的“event”表達(dá)式求值并將此文檔片段發(fā)送到事件總線(當(dāng)提交當(dāng)前工作單位時(shí),將隨后從該總線發(fā)送此文檔片段)來(lái)處理emit語(yǔ)句。圖13中未示出emit語(yǔ)句。將文檔片段發(fā)送到事件總線之后,圖6B中的處理退出?,F(xiàn)在將參考圖6C更詳細(xì)地描述branch語(yǔ)句的處理。在方塊620,通過(guò)對(duì)其“condition”表達(dá)式求值來(lái)處理branch語(yǔ)句。優(yōu)選地,使用XPath表示法指定此condition表達(dá)式。例如,參閱圖13的1331處的condition屬性。如果條件的求值結(jié)果為false,則執(zhí)行繼續(xù)到跟在branch語(yǔ)句之后的下一語(yǔ)句;否則(包括不存在條件的情況,優(yōu)選實(shí)施例將其視為無(wú)條件的分支),執(zhí)行在由branch語(yǔ)句標(biāo)識(shí)的語(yǔ)句處繼續(xù)。在一種方法中,使用"distance"屬性標(biāo)識(shí)此語(yǔ)句。在另一種方法中,使用“macro”屬性標(biāo)識(shí)此語(yǔ)句。在第三種方法中,既不指定“distance”屬性也不指定“macro”屬性。現(xiàn)在將更詳細(xì)地描述這些方法中的每一種方法。當(dāng)存在distance屬性時(shí),如圖13的1332處所示,執(zhí)行按照指示的語(yǔ)句號(hào)進(jìn)行分支。distance屬性的值可以是正的或負(fù)的。為1的distance值只是在下一順序語(yǔ)句處繼續(xù)執(zhí)行。在各優(yōu)選實(shí)施例中,如果distance屬性的值指示在最近的封閉onEvent或fanOut塊外部的語(yǔ)句,則如同未指定distance或macro屬性那樣執(zhí)行branch語(yǔ)句(如下所述)。當(dāng)存在macro屬性時(shí),如同將由macro屬性(優(yōu)選地引用〈macro〉元素標(biāo)識(shí)符)的值標(biāo)識(shí)的語(yǔ)句插入行中取代branch語(yǔ)句那樣繼續(xù)執(zhí)行。當(dāng)既未指定distance屬性也未指定macro屬性時(shí),如果采用分支,則branch語(yǔ)句離開(kāi)當(dāng)前onEvent或fanOut塊。如果當(dāng)前塊為onEvent語(yǔ)句,則通過(guò)處理此Ice程序中的下一onEvent塊繼續(xù)執(zhí)行。如果當(dāng)前塊為fanOut語(yǔ)句,則通過(guò)以下方式繼續(xù)執(zhí)行在下一目標(biāo)上下文對(duì)象的上下文中重新執(zhí)行fanOut塊內(nèi)的語(yǔ)句,或者當(dāng)沒(méi)有其他匹配目標(biāo)上下文對(duì)象時(shí),處理Ice程序中的下一語(yǔ)句。根據(jù)各優(yōu)選實(shí)施例,同時(shí)指定distance屬性和macro屬性是錯(cuò)誤條件。按如上所述處理branch語(yǔ)句之后,圖6C中的處理然后退出。現(xiàn)在將參考圖6D更詳細(xì)地描述terminate語(yǔ)句的處理。在方塊630,terminate語(yǔ)句的處理包括終止當(dāng)前上下文對(duì)象,由此從此容器中刪除當(dāng)前上下文對(duì)象。處理然后從圖6D中退出。本發(fā)明的各實(shí)施例可以與第一相關(guān)申請(qǐng)和第二相關(guān)申請(qǐng)(以下為“相關(guān)發(fā)明”)中披露的發(fā)明的各實(shí)施例結(jié)合使用。相應(yīng)地,現(xiàn)在將討論相關(guān)發(fā)明以提供有關(guān)此結(jié)合使用的fn息ο現(xiàn)在參考圖7,示出了可由本發(fā)明和相關(guān)發(fā)明的各方面執(zhí)行的處理的高級(jí)視圖。如圖中所示,將監(jiān)視模型700(作為在此描述的高級(jí)編程模型的一個(gè)示例)作為輸入提供給編譯器720。優(yōu)選地,此編譯器720根據(jù)相關(guān)發(fā)明的一個(gè)方面生成代碼,其中所生成的代碼包括采用根據(jù)本發(fā)明的一個(gè)方面在此披露的編程語(yǔ)言的指令。此生成的代碼在圖7中示為“Ice”文件740。出于調(diào)試目的,編譯器720還優(yōu)選地生成將Ice文件740中的語(yǔ)句與監(jiān)視模型700中的源語(yǔ)句關(guān)聯(lián)的交叉引用文件760。根據(jù)相關(guān)發(fā)明的一個(gè)方面,除了監(jiān)視模型700之外,Ice文件740和交叉引用文件760還用作到調(diào)試器780的輸入。(當(dāng)指由編譯器720創(chuàng)建的可執(zhí)行文件740時(shí),術(shù)語(yǔ)“編譯后的輸出,,和“所生成的輸出,,在此可互換地使用)。作為一種備選方案,Ice文件740可以在不提供其調(diào)試的情況下,在此處披露的虛擬機(jī)上執(zhí)行;在此備選執(zhí)行情況中,并不嚴(yán)格需要交叉引用文件760。優(yōu)選地使用XML表示法指定監(jiān)視模型700、Ice文件740和交叉引用文件760。雖然未在圖7中示出,但是用于監(jiān)視模型700的XML模式可以作為額外輸入被提供給編譯器720,由此使相關(guān)發(fā)明的一個(gè)方面的編譯器720能夠在編譯過(guò)程中驗(yàn)證監(jiān)視模型700(即,輸入)的語(yǔ)法結(jié)構(gòu)。此外,編譯器720還可以針對(duì)Ice文件740使用XML模式而針對(duì)交叉引用文件760使用另一模式,其中這些模式(也未在圖7中示出)指定Ice文檔740和交叉引用文件760的允許的語(yǔ)法和結(jié)構(gòu),并且因此可以用于提供編譯器輸出的特定級(jí)別的結(jié)構(gòu)驗(yàn)證。第一相關(guān)申請(qǐng)的圖3-5分別提供了監(jiān)視模型、編譯器輸出文件和交叉引用文件的示例,以描述可如何在監(jiān)視模型編程環(huán)境中使用Ice程序(并且在這些示例中,監(jiān)視模型對(duì)應(yīng)于簡(jiǎn)單的成本聚合器情況)。第一相關(guān)申請(qǐng)的圖4中示出的編譯器輸出文件(由編譯第一相關(guān)申請(qǐng)的圖3中示出的監(jiān)視模型產(chǎn)生)使用在此定義的編程語(yǔ)言并且可以在此處披露的虛擬機(jī)上執(zhí)行。在此重復(fù)對(duì)第一相關(guān)申請(qǐng)中的這些圖的討論,其中這些圖顯示為圖14-16。但是,如上所述,在此披露的虛擬機(jī)可用于從多種類型的高級(jí)語(yǔ)言編程模型編譯的可執(zhí)行體。相應(yīng)地,除了支持第一相關(guān)申請(qǐng)的圖4(在此重復(fù)為圖15)中示出的可執(zhí)行體之外,此虛擬機(jī)還可以支持從其他或不同的編程模型編譯的可執(zhí)行體?,F(xiàn)在將參考本申請(qǐng)的圖8-13描述用于一個(gè)此類備選編程模型的示例可執(zhí)行體。圖8-13分別提供了狀態(tài)機(jī)模型、事件類型規(guī)范、事件、上下文對(duì)象類型規(guī)范、上下文對(duì)象以及用于狀態(tài)機(jī)執(zhí)行的Ice程序的示例。圖13中的Ice程序1300可以由來(lái)自圖8中的模型的編譯器生成。更具體地說(shuō),狀態(tài)機(jī)模型和事件類型規(guī)范包括編譯器輸入,而上下文對(duì)象規(guī)范和Ice程序包括編譯器輸出。(備選地,可以手動(dòng)定義狀態(tài)機(jī)的Ice實(shí)施方式,雖然使用編譯器生成Ice可執(zhí)行體被認(rèn)為是更典型的情況。首先參考圖8,示例模型800定義了用于門的有限狀態(tài)機(jī)。此門具有兩種狀態(tài),已打開(kāi)(參閱810)和已關(guān)閉(參閱830)。0pen_d00r事件(參閱820)導(dǎo)致從已關(guān)閉狀態(tài)轉(zhuǎn)變?yōu)橐汛蜷_(kāi)狀態(tài)。cl0Se_d00r事件(參閱821)導(dǎo)致從已打開(kāi)狀態(tài)轉(zhuǎn)變?yōu)橐殃P(guān)閉狀態(tài)。圖9的模式900中示出的事件類型規(guī)范描述了open_door和close_door事件的類型(即,結(jié)構(gòu))。在此示例中,這兩個(gè)事件具有相同的類型,即“tns:D00rEvent”;參閱920。(擴(kuò)展“tns”的名稱空間定義時(shí),類型為{http://www.example,org/surveillance}DoorEvent;參閱910,其中定義了“tns”名稱空間。)DoorEvent類型定義(參閱930)針對(duì)此類型附帶的事件的有效負(fù)載定義了兩個(gè)屬性,即“id”屬性931和“timestamp”屬性932。id屬性的值標(biāo)識(shí)被打開(kāi)或關(guān)閉的門,timestamp屬性的值指示何時(shí)發(fā)生此事件。圖10中示出的示例open_door事件1000指示標(biāo)識(shí)符為“DoorOOl”(參閱1010)的門在2008-01-01T09:33:41+05:00(參閱1020)時(shí)被打開(kāi)。圖11示出了用于Ice執(zhí)行環(huán)境中表示圖8的狀態(tài)機(jī)800的上下文對(duì)象的示例類型定義1100。雖然此特定示例被手動(dòng)創(chuàng)建,但是備選地可以由圖8的狀態(tài)機(jī)定義800以及圖9的900處示出的事件類型定義中的編譯器生成。在此示例中,用于上下文對(duì)象類型的示例模式1100包括用于使用<xs:include〉語(yǔ)句1110的門事件類型的模式900。參閱“schemaLocation”屬性,它將位置“doorEvent.xsd”處的doorEvent模式定義指定為其值。然后模式1100定義上下文對(duì)象的根元素(參閱1120,其中根元素被指定為具有名稱“stateMachine”),其類型被給定為復(fù)雜類型定義。參閱其中引用此復(fù)雜類型定義的1122以及其中定義此復(fù)雜類型定義的1130。在此示例中,類型定義1130指定此類型的每個(gè)上下文對(duì)象具有以下結(jié)構(gòu)“」Ce_key”元素1131,它將保存對(duì)象的所生成的唯一標(biāo)識(shí)符;“id”元素1132,它將保存其狀態(tài)被此上下文對(duì)象鏡像的門的標(biāo)識(shí)符;“state”元素1133,它保存狀態(tài)機(jī)的當(dāng)前狀態(tài);“l(fā)astEvent”元素1134,它保存由此上下文對(duì)象處理的上一個(gè)事件的時(shí)間戳;以及“tns:0pen_d00r”空位1135和“close—door”空位1136,它們將保存狀態(tài)機(jī)已處理的對(duì)應(yīng)類型的上一個(gè)事件的副本。還指定了狀態(tài)機(jī)模型的可能狀態(tài)(在此示例中,即狀態(tài)“已打開(kāi)”1141和“已關(guān)閉”1142)的枚舉類型1140?,F(xiàn)在參考圖12,其中示出的示例上下文對(duì)象1200是圖11中定義的stateMachine元素的實(shí)例。在此示例中,在1210處示出此對(duì)象的已生成鍵(用作唯一標(biāo)識(shí)符)。此示例上下文對(duì)象1200處理來(lái)自標(biāo)識(shí)符為“DoorOOl”(參閱1220)并且當(dāng)前狀態(tài)為已打開(kāi)(參閱1230)的門的事件,并且在1240處示出的時(shí)間戳表示的時(shí)間處理此上下文對(duì)象的上一個(gè)事件。分別在空位1250和1260中示出所處理的上一個(gè)open_door和close_door事件的副本。圖13示出了實(shí)現(xiàn)圖8的狀態(tài)機(jī)800的Ice程序1300,該程序處理具有圖9的900處定義的類型的事件并且操作具有圖11中定義的類型的上下文對(duì)象?,F(xiàn)在描述根據(jù)該示例Ice程序1300的處理。當(dāng)具有根兀素“{http://www.example,org/surveillance}open_door"(或等價(jià)地為“訪8:叩611_(1001·”)的事件到達(dá),并且具有非空“id”屬性(即,過(guò)濾器屬性1314的值"fn:exists(.Γ'id)”為true)時(shí),則滿足<iceonEvent>語(yǔ)句1310的過(guò)濾準(zhǔn)則。參閱圖13的1312,其中指定所需的rootElement值1313和過(guò)濾器1314。因此,將執(zhí)行onEvent元素1310中的所有從屬語(yǔ)句。(要指出的是,上下文項(xiàng)目表達(dá)式‘.’用于指代當(dāng)前事件的根。相應(yīng)地,語(yǔ)法“fn:eXistS(.Γid)”測(cè)試“id”屬性是否在當(dāng)前事件的根級(jí)別處存在。相比之下,根據(jù)優(yōu)選實(shí)施例,未以‘.,開(kāi)始的相對(duì)路徑表達(dá)式從上下文對(duì)象根開(kāi)始導(dǎo)航。)第一嵌套語(yǔ)句為<ice:fan0ut>1320。此fanOut語(yǔ)句1320標(biāo)識(shí)虛擬機(jī)容器中目標(biāo)上下文對(duì)象的根元素(即,{http//www.example,org/surveillance}stateMachine;參閱1323)并指定關(guān)聯(lián)謂詞1324。關(guān)聯(lián)謂詞1324將入站事件的門標(biāo)識(shí)符(如correlationPredicate屬性左側(cè)處的語(yǔ)法“./"id”所示)與上下文對(duì)象的id(即,‘‘{http://www.example,org/surveillance}id”或等價(jià)地為‘‘tns:id”,如correlationPredicate屬性右側(cè)處所指定的)進(jìn)行比較。no/one/multiplematches屬性1325-1327指示當(dāng)找到與所述關(guān)聯(lián)謂詞匹配的零個(gè)/一個(gè)/許多上下文對(duì)象時(shí)要采取的操作,如上面參考圖5所述。當(dāng)沒(méi)有與所述關(guān)聯(lián)謂詞匹配的現(xiàn)有上下文對(duì)象時(shí),將根據(jù)1325處“noMatches”屬性的“createNewTarget”值創(chuàng)建新的上下文對(duì)象并且該上下文對(duì)象變?yōu)楹罄m(xù)步驟的執(zhí)行上下文。由于新創(chuàng)建的上下文對(duì)象未被初始化(因此不包含鍵),因此不采用在1330處指定的分支。實(shí)際上,將執(zhí)行之后的語(yǔ)句1340,該語(yǔ)句為新的上下文對(duì)象分配鍵。賦值語(yǔ)句1350然后執(zhí)行并設(shè)置所述上下文對(duì)象的“tns:id”或“{http://www.example,org/surveillance}id”值。在該示例中,id值被設(shè)為來(lái)自入站事件的id屬性值(如賦值語(yǔ)句1350的值屬性上的表達(dá)式“.Γid”所指示的)。賦值語(yǔ)句1360然后執(zhí)行并將入站operudoor事件復(fù)制至Ij上下文對(duì)象中的{http://www.example,org/surveillance}open_door空位。賦值語(yǔ)句1370然后將上下文對(duì)象中包含時(shí)間戳(參閱圖12的1240)的{http://www.example,org/surveillance}IastEvent值設(shè)為該當(dāng)前處理的open_door事件上的事件時(shí)間戳的值。最后,賦值語(yǔ)句1380將上下文對(duì)象的當(dāng)前狀態(tài)設(shè)為“Opened”。如果所討論的門的上下文對(duì)象確實(shí)存在,則1324處的關(guān)聯(lián)謂詞針對(duì)此對(duì)象的求值結(jié)果為true,該對(duì)象將變?yōu)閛nEvent指定1310中的所有后續(xù)語(yǔ)句的執(zhí)行上下文,以便根據(jù)1326處的“oneMatch”屬性的“deliverToTarget”值處理該open_door事件。在此情況中,1330處的分支條件的求值結(jié)果為true,因此采用此分支,從而導(dǎo)致跳過(guò)賦值語(yǔ)句1340和1350。語(yǔ)句1360-1380如剛才所述的那樣執(zhí)行。當(dāng)具有根兀素“{http://www.example,org/surveillance}close_door"(或等價(jià)地為“tns:cl0se_d00r”)的事件到達(dá),并且具有非空“id”屬性(即,過(guò)濾器屬性1393的值"fn:exists(./"id)”為true)時(shí),則滿足(第二)<iceonEvent〉語(yǔ)句1390的過(guò)濾準(zhǔn)則。參閱圖13的1391,其中指定所需的rootElement值1392和過(guò)濾器1393。該<iceonEvent〉塊的嵌套語(yǔ)句類似于剛才針對(duì)塊1310描述的嵌套語(yǔ)句。最后一個(gè)賦值語(yǔ)句1394將狀態(tài)機(jī)的狀態(tài)設(shè)為“Closed”。要指出的是,圖8中的狀態(tài)機(jī)800的更復(fù)雜實(shí)現(xiàn)將在進(jìn)行轉(zhuǎn)變之前測(cè)試初始狀態(tài)(即,例如在當(dāng)前狀態(tài)為“Closed”的情況下僅處理operudoor事件)。為了簡(jiǎn)潔,Ice程序1300中省略了這些測(cè)試。圖13的實(shí)例中未示出可能由編譯器生成的若干語(yǔ)句。如先前針對(duì)此處定義的編程語(yǔ)言指令所述的,這些指令包括用于指定要發(fā)送出站事件的<emit>語(yǔ)句,以及用于指定應(yīng)終止當(dāng)前上下文對(duì)象的〈terminate〉指令。在不偏離本發(fā)明范圍的情況下,本發(fā)明的實(shí)現(xiàn)可以支持附加和/或其他指令。如上所述,除了或代替執(zhí)行根據(jù)圖8的狀態(tài)機(jī)模型800編譯的Ice程序,此處所披露的虛擬機(jī)還可用于執(zhí)行根據(jù)其他高級(jí)編程模型編譯的程序。第一相關(guān)申請(qǐng)的圖3-5分別提供了監(jiān)視模型、編譯器輸出文件和交叉引用文件的示例。針對(duì)本發(fā)明作為圖14-16而重復(fù)這些圖并且現(xiàn)在介紹這些圖以說(shuō)明如何使用Ice程序在此處所披露的虛擬機(jī)上執(zhí)行監(jiān)視模型。首先參考圖14,現(xiàn)在描述圖中使用的語(yǔ)法以提供對(duì)該示例監(jiān)視模型1400的理解。<inboundEvent>元素定義實(shí)例化模型的事件入口點(diǎn),并指定要在此入口點(diǎn)處接收的入站事件的詳細(xì)信息。嵌套的〈filter〉元素可以用于指定入站事件必須滿足的特定準(zhǔn)則,不與此指定匹配的事件將被忽略。嵌套的〈correlationPredicate〉元素可以用于將通過(guò)過(guò)濾準(zhǔn)則的每個(gè)入站事件與其中處理所述事件的適當(dāng)監(jiān)視上下文(多個(gè))進(jìn)行關(guān)聯(lián)??梢灾付ㄅc關(guān)聯(lián)謂詞有關(guān)的屬性,從而指示(例如)在未出現(xiàn)任何匹配時(shí)要執(zhí)行何種操作、在僅有一個(gè)匹配時(shí)要執(zhí)行何種操作,以及當(dāng)存在多個(gè)匹配時(shí)要執(zhí)行何種操作。<outboundEvent>元素定義發(fā)出特定事件所經(jīng)過(guò)的事件出口點(diǎn)。嵌套的〈filter〉元素可以用于過(guò)濾出應(yīng)抑制其發(fā)出的事件??梢詫⒁粋€(gè)或多個(gè)鍵值與監(jiān)視上下文一起使用,以實(shí)現(xiàn)從特定監(jiān)視上下文定義實(shí)例化多個(gè)上下文實(shí)例。所述鍵值使能區(qū)分多個(gè)實(shí)例。〈metric〉元素指定監(jiān)視上下文中存在的數(shù)據(jù)值的鍵入空位。它還可以指定用于如何初始化和更新該值的處理指令。(在監(jiān)視模型上下文中,metric(度量)指數(shù)據(jù)值)??梢允褂媒?shù)據(jù)更新模型的映射來(lái)指定度量更新指令(在監(jiān)視模型上下文中,“map(映射)”是在一個(gè)或多個(gè)輸入元素以及一個(gè)或多個(gè)輸出元素之間定義的關(guān)系)??梢栽谄渌囟x中引用度量,從而指示在運(yùn)行時(shí)對(duì)條件求值或更新其他度量中使用該度量的值?!碿ounter〉元素定義要在監(jiān)視上下文中使用的計(jì)數(shù)器。所述計(jì)數(shù)器可以被遞增、遞減、設(shè)為零以及在其他元素定義中引用?!磘rigger〉元素用作當(dāng)滿足特定準(zhǔn)則時(shí)應(yīng)采取的一個(gè)或多個(gè)操作的啟動(dòng)器。在監(jiān)視上下文中滿足這些準(zhǔn)則時(shí),觸發(fā)器被稱為“啟動(dòng)”。這可能會(huì)影響其他觸發(fā)器、映射或模型中的其他實(shí)體。一般而言,監(jiān)視上下文中觸發(fā)器的作用與入站事件的觸發(fā)器的作用相同或相似。因此,可以將其視為用于發(fā)信號(hào)通知監(jiān)視應(yīng)用所發(fā)現(xiàn)的特定條件的“內(nèi)部事件”?!磗topwatch〉元素定義在監(jiān)視上下文中用于表示已過(guò)去的時(shí)間的值。可以開(kāi)始、停止、復(fù)位和在其他元素定義中引用所述st0pWatch(計(jì)時(shí)器)。<map>元素可以是〈metric〉或<outboundEvent>元素的子元素,并且定義具有一個(gè)或多個(gè)輸入空位以及一個(gè)或多個(gè)輸出空位的映射。每個(gè)輸入空位對(duì)應(yīng)于度量或?qū)?yīng)于其他類型的承載數(shù)據(jù)值的實(shí)體。映射的輸出空位還連接到度量或其他類型的可以接收一個(gè)或多個(gè)數(shù)據(jù)值的實(shí)體。映射指定某種使用輸入空位中的值計(jì)算輸出值(多個(gè))以及將輸出值(多個(gè))寫入輸入空位(多個(gè))的算法。<map>元素可以包含指定何時(shí)執(zhí)行映射的〈trigger〉元素以及指定如何設(shè)置輸出空位的值的〈assignment〉元素。監(jiān)視應(yīng)用可以確保如果映射的輸入空位因任何原因而發(fā)生改變,則重新計(jì)算映射并更新輸出空位。(根據(jù)各優(yōu)選實(shí)施例,用于生成此類級(jí)聯(lián)更新的編譯器算法使用遞歸,下面將參考圖18進(jìn)行更詳細(xì)的介紹)。入站事件導(dǎo)致在監(jiān)視應(yīng)用處執(zhí)行一個(gè)或多個(gè)操作。模型內(nèi)部的觸發(fā)器也可以自發(fā)地調(diào)用操作。例如,可以將〈stopwatch〉元素與被定期求值的觸發(fā)條件中的時(shí)限進(jìn)行比較;當(dāng)超過(guò)所述時(shí)限時(shí),將激活觸發(fā)器并調(diào)用操作,這與任何外部事件無(wú)關(guān)??梢皂憫?yīng)于模型的操作而使用值填充出站事件,并將所述出站事件發(fā)送到事件總線(假設(shè)滿足任何過(guò)濾準(zhǔn)則)。實(shí)現(xiàn)可以支持額外和/或其他元素和屬性而不偏離相關(guān)發(fā)明的范圍?,F(xiàn)在返回圖14-16的示例成本聚合器,在該示例中,成本聚合器是監(jiān)聽(tīng)物品成本事件或消息的監(jiān)視器。這些事件帶有訂單編號(hào)、物品編號(hào)以及該物品的成本數(shù)字。(另參閱圖17,該圖提供了可用于描述成本聚合器實(shí)例的數(shù)據(jù)結(jié)構(gòu)的示例模式1700)。由成本聚合器處理的事件可以在填寫訂單時(shí)例如報(bào)告物品的利用率。當(dāng)具有給定訂單編號(hào)的第一物品成本事件到達(dá)時(shí),將創(chuàng)建新的成本聚合器實(shí)例并使用該訂單編號(hào)對(duì)其進(jìn)行初始化。該成本聚合器的運(yùn)輸成本被設(shè)為默認(rèn)值29.75$并且其物品成本(其是單個(gè)物品的成本數(shù)字的合計(jì))被初始化為0。然后將入站事件中報(bào)告的物品成本與所述物品成本相加,并且作為物品成本與運(yùn)輸成本的和來(lái)計(jì)算總成本。同一訂單的后續(xù)事件將被傳送到同一聚合器,并且對(duì)于這些后續(xù)事件,跳過(guò)初始化階段將僅更新物品成本值和總成本值。圖14的示例監(jiān)視模型1400指定一種入站事件作為該成本聚合器感興趣的事件。參閱標(biāo)號(hào)1410處的〈inboimdEvent〉指定。如其中所指定的,該事件的標(biāo)識(shí)符(“id”)為AcostRport。該事件的關(guān)聯(lián)器語(yǔ)法1412指定如果在對(duì)所有現(xiàn)有實(shí)例的關(guān)聯(lián)謂詞求值之后,找不到具有指定rootElement和extensionName的入站事件的任何匹配監(jiān)視上下文,貝Ij創(chuàng)建新的上下文,但是如果有一個(gè)監(jiān)視上下文與該事件匹配,則將該事件發(fā)送到匹配的監(jiān)視上下文;另一方面,如果有多個(gè)監(jiān)視上下文與該事件匹配,則表示存在錯(cuò)誤并生成異常。1414處的correlationPredicate表達(dá)式指定如何判定監(jiān)視上下文是否與該事件匹配,在該示例中,將入站事件中的“orderNumber”值與當(dāng)前活動(dòng)的監(jiān)視上下文的“orderNum”度量進(jìn)行比較。該示例成本聚合器的每個(gè)實(shí)例都具有4個(gè)度量,它們?cè)?420、1430、1440和1450處定義。第一度量1420是“OrderNum”。度量定義1420指定“costR印ort”入站事件1410的擴(kuò)展數(shù)據(jù)部分中的“orderNumber”值用于設(shè)置該OrderNum度量。度量定義1430與“shippingCost”度量有關(guān),在該示例中,該度量定義指定在初始化時(shí)將默認(rèn)值$29.75賦給shippingCost度量。度量定義1440指定使用指定條件邏輯的映射處理成本聚合器的“totalCost”度量。如其中所述,如果當(dāng)前監(jiān)視上下文中存在“itemCost”值,則將該值與運(yùn)輸成本(S卩,shippingCost度量)相加并用于設(shè)置監(jiān)視上下文中的totalCost空位或度量;否則,單獨(dú)使用運(yùn)輸成本設(shè)置totalCost度量。最后,度量定義1450與“itemCost”度量相關(guān)。該定義1450提供映射和默認(rèn)值指定。所述映射指定將itemCost度量遞增“costR印ort”入站事件的擴(kuò)展數(shù)據(jù)部分中的“cost”值,并且結(jié)果用作監(jiān)視上下文中的itemCost空位的輸出值。默認(rèn)值指定itemCost在初始化時(shí)被設(shè)為“0.0”。根據(jù)相關(guān)發(fā)明的一個(gè)方面,生成圖15的編譯器輸出文件1500以作為與圖14的聲明式監(jiān)視模型1400對(duì)應(yīng)的順序排序可執(zhí)行體。在該示例中,生成單個(gè)〈onEvent〉元素1510(其使用名稱空間前綴“ice”,從而在圖15中示為<iceonEvent,并且該元素與圖14的單個(gè)入站事件入口點(diǎn)1410對(duì)應(yīng)。一般情況下,〈onEvent〉元素指定入站事件訂閱,并且可以包括“filter”屬性和/或〈fanOut〉子元素。“filter”屬性捕獲針對(duì)監(jiān)視模型中的該入站事件指定的過(guò)濾準(zhǔn)則(如果有)。針對(duì)圖14中的示例模型生成的過(guò)濾屬性將測(cè)試入站事件的根元素為“cbeCommonBaseEvent”,并且具有值為“IteportItemCost,,的"extensionName”屬性。這些條件對(duì)應(yīng)于<inboundEvent>元素1410中的rootElement禾口extensionName指定。<fan0ut>元素1511提供事件關(guān)聯(lián)、封裝(在該示例中)在與圖14的1412和1414處的關(guān)聯(lián)器語(yǔ)法對(duì)應(yīng)的1512處的語(yǔ)法,以及與處理〈onEvent〉元素1510的入站事件相關(guān)的所有步驟的元素1520-1590?!磃anOut〉元素使能從當(dāng)前上下文對(duì)象(或者,在開(kāi)始處理事件時(shí),沒(méi)有任何上下文對(duì)象)到一個(gè)或多個(gè)目標(biāo)上下文對(duì)象的上下文切換。1512處的關(guān)聯(lián)器語(yǔ)法指示針對(duì)所有活動(dòng)上下文對(duì)象的關(guān)聯(lián)謂詞求值時(shí)發(fā)現(xiàn)的各種匹配應(yīng)執(zhí)行何種操作。1514處的語(yǔ)法與圖14的1414處的關(guān)聯(lián)謂詞對(duì)應(yīng),并且指示將入站事件中的“orderNumer”值與當(dāng)前上下文對(duì)象的“orderNum”空位進(jìn)行比較以判定是否存在匹配(或多個(gè)匹配)。在該示例中,編譯器還將1414中引用的事件字段的簡(jiǎn)化語(yǔ)法“costR印ort/extendedData/orderNumber”轉(zhuǎn)換成訪問(wèn)1514中的該字段所需的實(shí)際XPath。在1520處生成〈branch〉語(yǔ)句,并且測(cè)試對(duì)于匹配的上下文對(duì)象是否已存在鍵值。如果是,則已創(chuàng)建和初始化上下文對(duì)象,并且分支語(yǔ)句指示控制應(yīng)在運(yùn)行時(shí)向前跳5步(距離“5”)。生成分支語(yǔ)句以向前跳5步可以避免執(zhí)行在1530-1560處生成的初始化步驟。否貝U,如果尚不存在鍵值,則在運(yùn)行時(shí)不采用分支并且執(zhí)行下一順序步驟1530。一般情況下,〈branch〉語(yǔ)句提供將控制有條件的轉(zhuǎn)移到程序中的先前的步驟或以后的步驟(并且可以針對(duì)距離屬性使用負(fù)值以將控制轉(zhuǎn)移到先前的步驟)。生成包括1530-1590處的語(yǔ)法的若干〈assign〉語(yǔ)句,所述語(yǔ)句在此可以等價(jià)地稱為“賦值”語(yǔ)句。一般情況下,〈assign〉語(yǔ)句指定對(duì)當(dāng)前監(jiān)視上下文中空位的賦值或?qū)Τ稣臼录馁x值。賦值語(yǔ)句1530初始化當(dāng)前監(jiān)視上下文實(shí)例的鍵值,并且賦值語(yǔ)句1540將該實(shí)例中的shippingCost度量初始化為“29.75”。賦值語(yǔ)句1550將該實(shí)例中的itemCost度量初始化為“0.0”,以及賦值語(yǔ)句1560執(zhí)行上面參考監(jiān)視模型中的度量定義1440的映射中指定的語(yǔ)法介紹的相同的條件處理。這完成了一系列初始化步驟,在采用分支1520的情況下可以跳過(guò)這些步驟。賦值語(yǔ)句1570將orderNum度量設(shè)為入站事件中的orderNumer值,并且與監(jiān)視模型內(nèi)的度量定義1420中的映射對(duì)應(yīng)。賦值語(yǔ)句1580如上面針對(duì)度量定義1450中的映射所述計(jì)算itemCost度量的值,并且賦值語(yǔ)句1590如上面針對(duì)度量定義1440中的映射所述設(shè)置totalCost度量。要指出的是,在該示例中,賦值語(yǔ)句1590與賦值語(yǔ)句1560完全相同。出現(xiàn)這種情況是因?yàn)閠otalCost度量的映射取決于兩個(gè)輸入,即itemCost和shippingCost。編譯器識(shí)別到在初始化期間設(shè)置了這些度量,因此在1560處生成代碼以考慮由這些初始化造成的任何下游效應(yīng)。編譯器還識(shí)別到通過(guò)在1580處執(zhí)行代碼動(dòng)態(tài)地更新itemCost度量,因而生成另一賦值語(yǔ)句1590以考慮動(dòng)態(tài)更新。這示出了相關(guān)發(fā)明的一個(gè)方面的編譯器如何在分析數(shù)據(jù)相關(guān)性之后將監(jiān)視模型的聲明式邏輯轉(zhuǎn)換成一系列正確的賦值語(yǔ)句。通過(guò)將編譯器輸出文件1500與編譯器輸入文件(即,監(jiān)視模型1400)進(jìn)行比較,可以看出這些相關(guān)文件內(nèi)語(yǔ)句的排序非常不同,并且使用傳統(tǒng)調(diào)試器對(duì)編譯器輸出文件1500進(jìn)行單步調(diào)試的用戶可能在嘗試確定某個(gè)時(shí)刻正在執(zhí)行源代碼的哪個(gè)部分時(shí)感到困惑。(此外,如果生成運(yùn)行時(shí)錯(cuò)誤,甚至更難在正常執(zhí)行期間確定錯(cuò)誤源)。因此,相關(guān)發(fā)明的一個(gè)方面提供了交叉引用文件作為附加編譯器輸出并使用該文件作為附加調(diào)試器輸入(如圖7所示和上面所述)。該交叉引用文件的示例版本在圖16的1600處示出,并且現(xiàn)在進(jìn)行介紹。文件1600在圖14的監(jiān)視模型(編譯器輸入)1400與圖15的編譯器輸出文件之間進(jìn)行交叉引用。這些文件1400、1500被識(shí)別為1611(使用mmResource屬性識(shí)別監(jiān)視模型)和1610(使用iceResource屬性識(shí)別編譯器輸出文件)處的交叉引用文件的主題。要指出的是,該交叉引用文件中的關(guān)系可以是一對(duì)多,因?yàn)楸O(jiān)視模型中的單個(gè)元素會(huì)引起編譯器輸出文件中的多個(gè)步驟。針對(duì)輸入監(jiān)視模型中的每個(gè)操作(例如,執(zhí)行映射,停止計(jì)時(shí)器,遞增計(jì)數(shù)器等)在文件1600中生成<mmSt印〉元素。例如,參閱<mmSt印〉元素1620。每個(gè)<mmSt印〉元素都標(biāo)識(shí)來(lái)自源代碼的模型元素以及編譯器輸出文件的相應(yīng)語(yǔ)句(多個(gè))。使用公知的XPath表示法的變型將源代碼中定義操作的模型元素標(biāo)識(shí)為<mmSt印〉元素內(nèi)的mmRef屬性的值。因此,例如,1630處的mmRef屬性標(biāo)識(shí)文件1400的模型元素1410,以及1640處的mmRef屬性標(biāo)識(shí)文件1400的<map>元素1421。通過(guò)這種方式,交叉引用文件遍歷監(jiān)視模型1400的元素。使用類似XPath的表示法在交叉引用文件中將文件1500內(nèi)的Ice語(yǔ)句標(biāo)識(shí)為iceRefs屬性的值。例如,1621處的iceRefs屬性標(biāo)識(shí)編譯器輸出文件1500的語(yǔ)句1510、1511、1520、1530、1540、1550和1560,生成所有這些語(yǔ)句來(lái)描述通過(guò)mmRef屬性1630引用的<inboundEvent>1410的作用,并且1650處的iceRefs屬性標(biāo)識(shí)1590處的〈assign〉語(yǔ)句(即,在圖16中使用基于零的計(jì)數(shù)的序數(shù)“6”標(biāo)識(shí)的嵌套〈fanOut〉內(nèi)生成的第七個(gè)賦值語(yǔ)句)。要指出的是,使用標(biāo)號(hào)1622標(biāo)識(shí)的語(yǔ)法包括單個(gè)<mmSt印〉元素。這是因?yàn)槠渲幸玫姆种дZ(yǔ)句和賦值語(yǔ)句都是作為圖14的1410處定義的入站事件訂閱(該定義繼續(xù)到標(biāo)號(hào)1419)的結(jié)果產(chǎn)生的。圖18示出了由相關(guān)發(fā)明的一個(gè)方面使用的用于針對(duì)監(jiān)視模型生成Ice語(yǔ)言的編譯器算法,現(xiàn)在將詳細(xì)進(jìn)行介紹。所述編譯器算法從模型獲取入站事件定義(事件訂閱)(方塊1800),方塊1805測(cè)試是否找到此類定義。如果找到,則在方塊1810生成onEvent語(yǔ)句(表示事件訂閱,帶有過(guò)濾條件)、fanOut語(yǔ)句(表示關(guān)聯(lián)邏輯),以及上下文初始化語(yǔ)句,從而生成與圖15中的語(yǔ)句1510-1560類似的邏輯。接下來(lái),該編譯器的優(yōu)選實(shí)施例從沒(méi)有觸發(fā)器控制介入的情況下發(fā)生的事件中找到所有下游效應(yīng)(例如,在一個(gè)實(shí)施例中,所有事件驅(qū)動(dòng)型計(jì)時(shí)器和計(jì)數(shù)器命令以及所有直接和間接的度量更新)。可以通過(guò)將某些計(jì)算值分配給表示執(zhí)行上下文(即,監(jiān)視上下文)的對(duì)象中的空位來(lái)實(shí)現(xiàn)所有這些效應(yīng)。相應(yīng)地,方塊1815針對(duì)每個(gè)事件驅(qū)動(dòng)型計(jì)時(shí)器命令和每個(gè)計(jì)數(shù)器命令生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句),并且方塊1820針對(duì)每個(gè)直接或間接的度量更新生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句)。值得注意的是,在考慮依賴性的情況下生成這些賦值語(yǔ)句。例如,如果到metircl的映射依賴于metirc2,并且作為入站事件的結(jié)果更新這兩個(gè)度量,則生成賦值以確保在更新metricl之前更新metric^。由于在監(jiān)視模型中禁止循環(huán)依賴性,因此在確定賦值語(yǔ)句順序中考慮數(shù)據(jù)依賴性不會(huì)導(dǎo)致矛盾(或死鎖)并且生成這些級(jí)聯(lián)更新將在有限數(shù)量的步驟之后結(jié)束。接下來(lái),該編譯器的優(yōu)選實(shí)施例從沒(méi)有觸發(fā)器控制介入的情況下發(fā)生的事件中找到所有下游效應(yīng)(例如,在一個(gè)實(shí)施例中,所有事件驅(qū)動(dòng)型計(jì)時(shí)器和計(jì)數(shù)器命令以及所有直接和間接的度量更新)。可以通過(guò)將某些計(jì)算值分配給表示執(zhí)行上下文(即,監(jiān)視上下文)的對(duì)象中的空位來(lái)實(shí)現(xiàn)所有這些效應(yīng)。相應(yīng)地,方塊1815針對(duì)每個(gè)事件驅(qū)動(dòng)型計(jì)時(shí)器命令和每個(gè)計(jì)數(shù)器命令生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句),并且方塊1820針對(duì)每個(gè)直接或間接的度量更新生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句)。值得注意的是,在考慮依賴性的情況下生成這些賦值語(yǔ)句。例如,如果到metircl的映射依賴于metirc2,并且作為入站事件的結(jié)果更新這兩個(gè)度量,則生成賦值以確保在更新metricl之前更新metric^。由于在監(jiān)視模型中禁止循環(huán)依賴性,因此在確定賦值語(yǔ)句順序中考慮數(shù)據(jù)依賴性不會(huì)導(dǎo)致矛盾(或死鎖)并且生成這些級(jí)聯(lián)更新將在有限數(shù)量的步驟之后結(jié)束。圖18B示出了對(duì)觸發(fā)器的處理,類似于圖18A中的入站事件處理。在圖18B的方塊1850,編譯器算法從模型獲取“待求值”觸發(fā)器的定義。在方塊1855生成測(cè)試觸發(fā)器的開(kāi)啟條件并在得出false結(jié)果之后跳過(guò)后續(xù)語(yǔ)句的分支語(yǔ)句。該編譯器的優(yōu)選實(shí)施例然后找到該觸發(fā)器的所有下游效應(yīng),其中包括可能作為該觸發(fā)器啟動(dòng)的結(jié)果而發(fā)生的所有觸發(fā)器驅(qū)動(dòng)型計(jì)時(shí)器和計(jì)數(shù)器命令(如果輸入模型中具有此類元素)以及所有直接和間接的度量更新??梢酝ㄟ^(guò)將某些計(jì)算值分配給表示執(zhí)行上下文(即,監(jiān)視上下文)的對(duì)象中的空位來(lái)實(shí)現(xiàn)所有這些效應(yīng)。因此,方塊I860針對(duì)每個(gè)觸發(fā)器驅(qū)動(dòng)型計(jì)時(shí)器命令和每個(gè)計(jì)數(shù)器命令生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句),并且方塊1865針對(duì)每個(gè)直接或間接的度量更新生成一個(gè)賦值語(yǔ)句(或相應(yīng)地生成多個(gè)賦值語(yǔ)句)。如上參考方塊1820所述,在考慮依賴性的情況下生成在方塊1865處生成的賦值語(yǔ)句。在方塊1870,生成將啟動(dòng)當(dāng)前待發(fā)出的任何出站事件的代碼。方塊1875生成代碼以對(duì)作為執(zhí)行先前生成的任何語(yǔ)句的結(jié)果而變?yōu)榇笾档娜魏斡|發(fā)器求值,并在需要時(shí)啟動(dòng)這些觸發(fā)器,從而遞歸地調(diào)用圖18B中的邏輯。(此遞歸會(huì)結(jié)束,因?yàn)閮H存在有限數(shù)量的觸發(fā)器定義數(shù)并且它們的依賴性圖沒(méi)有循環(huán))。最后,方塊1880生成將終止當(dāng)前待終止的任何監(jiān)視上下文的代碼。要指出的是,在同時(shí)啟動(dòng)若干觸發(fā)器的情況下,未定義處理觸發(fā)器的運(yùn)行時(shí)順序??梢詫⒋艘暈楦?jìng)爭(zhēng)條件,并且如果同時(shí)接收到若干入站事件,將出現(xiàn)類似競(jìng)爭(zhēng)條件。如果根據(jù)特定模型處理兩個(gè)同時(shí)到達(dá)的事件的結(jié)果取決于處理所述事件的順序,則該模型為有設(shè)計(jì)問(wèn)題的模型。類似地,如果對(duì)兩個(gè)同時(shí)啟動(dòng)的觸發(fā)器執(zhí)行觸發(fā)器處理的結(jié)果取決于執(zhí)行其效應(yīng)的順序,則該模型為有設(shè)計(jì)問(wèn)題的模型。(希望在監(jiān)視模型編輯器中檢測(cè)到此類問(wèn)題并提示用戶相應(yīng)地修改模型)。因此,對(duì)于事件/觸發(fā)器驅(qū)動(dòng)型編程模型而言,可能在方塊1830和1875處出現(xiàn)的明顯“任意性”是自然的,并且實(shí)際上是所期望的。通過(guò)比較圖18A和18B可以看到,生成表示圖18B中觸發(fā)器效應(yīng)的語(yǔ)句時(shí)所遵循的邏輯與圖18A中針對(duì)入站事件示出的邏輯相同針對(duì)觸發(fā)器驅(qū)動(dòng)型計(jì)時(shí)器和計(jì)數(shù)器更新、直接和間接的度量更新、出站事件的發(fā)出、其他觸發(fā)器的求值(如果先前觸發(fā)器或其引起的任何更新導(dǎo)致此類求值)生成語(yǔ)句,最后針對(duì)上下文終止生成語(yǔ)句(如有必要)。如上所述,編譯器B除了產(chǎn)生Ice輸出文件B中的執(zhí)行順序以外,還產(chǎn)生將所生成的編譯器輸出中的每個(gè)步驟與來(lái)自原始監(jiān)視模型指定的入站事件訂閱、映射、計(jì)數(shù)器或計(jì)時(shí)器命令、觸發(fā)器定義或出站事件定義進(jìn)行關(guān)聯(lián)的交叉引用文件。當(dāng)用戶以單步模式執(zhí)行步驟時(shí),這些交叉引用可以由第二相關(guān)申請(qǐng)的調(diào)試器使用,以便亮顯從其產(chǎn)生所生成的編譯器輸出的這些步驟的原始模型結(jié)構(gòu)。相應(yīng)地,在方塊1810-1835和1855-1880中的每個(gè)方塊處,所述編譯器優(yōu)選地將語(yǔ)法寫入交叉引用文件以記錄監(jiān)視模型輸入文件與所生成的編譯器輸出文件之間的關(guān)系。該語(yǔ)法已在圖16中示出并且上面參考該圖以及圖14-15進(jìn)行了介紹。(要指出的是,編譯器針對(duì)圖15所示的輸出文件和圖16所示的交叉引用文件生成了各種“內(nèi)務(wù)處理”型語(yǔ)法,例如名稱空間定義、或“xmlns”,出現(xiàn)在這些文件開(kāi)頭的語(yǔ)句。本領(lǐng)域的技術(shù)人員很容易理解此類語(yǔ)法,并且對(duì)理解本發(fā)明或相關(guān)發(fā)明而言,不認(rèn)為對(duì)此類語(yǔ)法的說(shuō)明是必需的)。圖19提供了根據(jù)本發(fā)明一個(gè)方面的優(yōu)選實(shí)施例的示例模式1900。(此示例模式的提供僅作為說(shuō)明而非限制)。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明的實(shí)施例可以提供為(例如)方法、系統(tǒng)和/或計(jì)算機(jī)程序產(chǎn)品。本發(fā)明可以采取完全硬件實(shí)施例、完全軟件實(shí)施例,或同時(shí)包含硬件和軟件元素的實(shí)施例的形式。在一個(gè)優(yōu)選實(shí)施例中,本發(fā)明以軟件實(shí)現(xiàn),所述軟件包括(但不限于)固件、駐留軟件、微代碼等。在硬件實(shí)施例中,可以提供執(zhí)行此處所述的功能的專用或?qū)iT電路。此外,本發(fā)明可以采取位于其中包含計(jì)算機(jī)可用程序代碼的一個(gè)或多個(gè)計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于盤存儲(chǔ)設(shè)備、CD-ROM、光存儲(chǔ)設(shè)備等)上的計(jì)算機(jī)程序產(chǎn)品的形式,其中所述計(jì)算機(jī)程序產(chǎn)品可以被計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)結(jié)合。出于在此說(shuō)明的目的,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠包含、存儲(chǔ)、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的裝置。所述介質(zhì)可以是電、磁、光、電磁、紅外線或半導(dǎo)體系統(tǒng)(或裝置或設(shè)備)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的示例包括半導(dǎo)體或固態(tài)存儲(chǔ)器、磁帶、可移動(dòng)計(jì)算機(jī)盤、隨機(jī)存取存儲(chǔ)器(_RAM_)、只讀存儲(chǔ)器(_R0M_)、硬磁盤和光盤。光盤的當(dāng)前實(shí)例包括光盤-只讀存儲(chǔ)器(_CD-R0M_)、光盤-讀/寫(_CR-R/W_)和DVD。現(xiàn)在參考圖20,適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)2000包括至少一個(gè)直接或通過(guò)系統(tǒng)總線2014間接連接到存儲(chǔ)器元件的處理器2012。所述存儲(chǔ)器元件可以包括在程序代碼的實(shí)際執(zhí)行期間采用的本地存儲(chǔ)器2028、大容量存儲(chǔ)設(shè)備2030以及提供至少某些程序代碼的臨時(shí)存儲(chǔ)以減少必須在執(zhí)行期間從大容量存儲(chǔ)設(shè)備檢索代碼的次數(shù)的高速緩沖存儲(chǔ)器(未示出)。輸入/輸出(_1/0_)設(shè)備(包括但不限于鍵盤2018、顯示器2024、指點(diǎn)設(shè)備2020,其他接口設(shè)備2022等)可以直接或通過(guò)中間I/O控制器或適配器(2016、2026)與系統(tǒng)相連。網(wǎng)絡(luò)適配器也可以被連接到系統(tǒng)以使所述數(shù)據(jù)處理系統(tǒng)能夠通過(guò)中間專用或公共網(wǎng)絡(luò)(如總體在2032處所示)變得與其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備相連。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器、無(wú)線適配器和以太網(wǎng)卡只是當(dāng)前可用類型的網(wǎng)絡(luò)適配器中的少數(shù)幾種。圖21示出了其中可實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理網(wǎng)絡(luò)環(huán)境2100。數(shù)據(jù)處理網(wǎng)絡(luò)2100可以包括多個(gè)諸如無(wú)線網(wǎng)絡(luò)2142和網(wǎng)絡(luò)2144之類的單獨(dú)網(wǎng)絡(luò)。多個(gè)無(wú)線設(shè)備2110可以通過(guò)無(wú)線網(wǎng)絡(luò)2142進(jìn)行通信,并且在圖中(通過(guò)例示)被示為工作站2111的多個(gè)有線設(shè)備可以通過(guò)網(wǎng)絡(luò)2114進(jìn)行通信。此外,本領(lǐng)域的技術(shù)人員將理解,可以包括一個(gè)或多個(gè)局域網(wǎng)(_LAN_)(未示出),其中局域網(wǎng)可以包括多個(gè)與主機(jī)處理器相連的設(shè)備。仍參考圖21,網(wǎng)絡(luò)2142和2144還可以包括諸如網(wǎng)關(guān)計(jì)算機(jī)2146或應(yīng)用服務(wù)器2147之類的大型計(jì)算機(jī)或服務(wù)器(它們可以訪問(wèn)數(shù)據(jù)存儲(chǔ)庫(kù)2148)。網(wǎng)關(guān)計(jì)算機(jī)2146充當(dāng)進(jìn)入每個(gè)網(wǎng)絡(luò)(例如網(wǎng)絡(luò)2144)的入口點(diǎn)。網(wǎng)關(guān)計(jì)算機(jī)2146可以優(yōu)選地通過(guò)通信鏈路2150a與另一網(wǎng)絡(luò)2142相連。網(wǎng)關(guān)2146還可以使用通信鏈路2150b、2150c與一個(gè)或多個(gè)工作站2111直接相連,以及/或者與此類設(shè)備間接相連。網(wǎng)關(guān)計(jì)算機(jī)2146可以使用IBM的EnterpriseSystemArchitecture/39_computer來(lái)實(shí)現(xiàn)。根據(jù)應(yīng)用的不同,可以采用諸如ApplicationSystem/400_(也稱為AS/400_)、iSeries7、SystemiJ之類的中型計(jì)算機(jī)。(—EnterpriseSystemArchitecture/39_、“ApplicationSystem/400”、“AS/400”以及“iSeries”是IBM在美國(guó)和/或其他國(guó)家/地區(qū)的注冊(cè)商標(biāo),“Systemi”是IBM的商標(biāo))。網(wǎng)關(guān)計(jì)算機(jī)2146還可以與存儲(chǔ)設(shè)備(諸如數(shù)據(jù)存儲(chǔ)庫(kù)2148)相連2149。本領(lǐng)域的技術(shù)人員將理解,網(wǎng)關(guān)計(jì)算機(jī)2146可以位于距離網(wǎng)絡(luò)2142非常遠(yuǎn)的地理位置,并且類似地,無(wú)線設(shè)備2110和/或工作站2111可以分別與網(wǎng)絡(luò)2142和2144具有一段距離。例如,網(wǎng)絡(luò)2142可以位于加利福尼亞州,而網(wǎng)關(guān)2146可以位于德克薩斯州,一個(gè)或多個(gè)工作站2111可以位于佛羅里達(dá)州。無(wú)線設(shè)備2110可以使用諸如傳輸控制協(xié)議/網(wǎng)際協(xié)議(_TCP/IP_)之類的聯(lián)網(wǎng)協(xié)議通過(guò)諸如蜂窩電話、射頻網(wǎng)絡(luò)、衛(wèi)星網(wǎng)絡(luò)之類的多個(gè)備選連接介質(zhì)與無(wú)線網(wǎng)絡(luò)2142相連。無(wú)線網(wǎng)絡(luò)2142優(yōu)選地使用諸如TCP或用戶數(shù)據(jù)報(bào)協(xié)議(_UDP_)之類的網(wǎng)絡(luò)連接2150a通過(guò)IP、X.25、幀中繼、綜合業(yè)務(wù)數(shù)字網(wǎng)(_ISDN_)、公共交換電話網(wǎng)(_PSTN_)等與網(wǎng)關(guān)2146相連。工作站2111可以使用撥號(hào)連接2150b或2150c直接連接到網(wǎng)關(guān)2146。進(jìn)而,無(wú)線網(wǎng)絡(luò)2142和網(wǎng)絡(luò)2144可以使用類似于圖21所示的方式與一個(gè)或多個(gè)其他網(wǎng)絡(luò)(未示出)相連。已參考根據(jù)本發(fā)明的各實(shí)施例的流程圖和/或方塊圖對(duì)本發(fā)明進(jìn)行了描述。應(yīng)該理解,所述流程圖和/或方塊圖中的每個(gè)流程和/或方塊,以及所述流程圖和/或方塊圖中的流程和/或方塊的組合可以通過(guò)計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理器或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生機(jī)器,從而使所述指令在通過(guò)所述計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),能夠創(chuàng)建用于實(shí)現(xiàn)所述流程圖和/或方塊圖中的一個(gè)或多個(gè)流程和/或方塊中指定的功能的裝置。這些計(jì)算機(jī)程序指令還可以存儲(chǔ)在可引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置按照特定方式運(yùn)行的計(jì)算機(jī)可讀存儲(chǔ)器中,以便存儲(chǔ)在所述計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括用于實(shí)現(xiàn)所述流程圖和/或方塊圖中的一個(gè)或多個(gè)流程和/或方塊中指定的功能的指令裝置的制品所述計(jì)算機(jī)程序指令還可以加載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置上以在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行一系列操作步驟以生成計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程,以便在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)所述流程圖和/或方塊圖中的一個(gè)或多個(gè)流程和/或方塊中指定的功能的步驟。盡管已經(jīng)描述了本發(fā)明的各實(shí)施例,但是本領(lǐng)域的技術(shù)人員在了解基本發(fā)明理念之后,將想到這些實(shí)施例的其他變型和修改。因此,所附權(quán)利要求旨在被理解為包括所述的實(shí)施例以及所有此類變型和修改都落入本發(fā)明的精神和范圍之內(nèi)。權(quán)利要求一種用于執(zhí)行虛擬機(jī)的方法,包括在計(jì)算機(jī)上使用所述虛擬機(jī)執(zhí)行來(lái)自程序的指令,其中所述指令包括以下指令中的至少一個(gè)事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)。2.如權(quán)利要求1中所述的方法,其中從事件驅(qū)動(dòng)的模型規(guī)范生成所述指令。3.如權(quán)利要求1中所述的方法,其中從消息驅(qū)動(dòng)的模型規(guī)范生成所述指令。4.如權(quán)利要求1中所述的方法,還包括在所述計(jì)算機(jī)上使用所述虛擬機(jī)執(zhí)行來(lái)自多個(gè)程序的指令,所述多個(gè)程序從至少兩個(gè)不同的執(zhí)行模型生成。5.如權(quán)利要求1中所述的方法,其中執(zhí)行所述事件指令進(jìn)一步包括執(zhí)行所述事件指令以接收特定入站事件;查找與所述事件指令關(guān)聯(lián)的扇出指令;執(zhí)行所找到的扇出指令以便使用與所找到的扇出指令關(guān)聯(lián)的關(guān)聯(lián)謂詞信息判定任何當(dāng)前執(zhí)行上下文對(duì)象是否能夠進(jìn)一步處理所述特定入站事件;以及如果有能力的執(zhí)行上下文對(duì)象存在,將所述特定入站事件導(dǎo)向每個(gè)所確定的有能力的執(zhí)行上下文對(duì)象以便在其中進(jìn)行進(jìn)一步處理。6.如權(quán)利要求1中所述的方法,其中用于接收入站事件的所述事件指令還過(guò)濾所述入站事件。7.如權(quán)利要求1中所述的方法,其中使用所述虛擬機(jī)執(zhí)行所述指令進(jìn)一步包括在接收到特定入站事件時(shí),在來(lái)自所述程序的多個(gè)事件指令中的每個(gè)事件指令內(nèi)存在類型規(guī)范的情況下,通過(guò)將所述特定入站事件聲明的類型與所述多個(gè)事件指令中的每個(gè)事件指令內(nèi)的類型規(guī)范相比較來(lái)確定要執(zhí)行所述多個(gè)事件指令中的哪個(gè)事件指令。8.如權(quán)利要求1中所述的方法,其中執(zhí)行所述賦值指令進(jìn)一步包括對(duì)所述賦值指令的表達(dá)式求值;以及將所述求值的結(jié)果作為值分配給由所述賦值指令標(biāo)識(shí)的目標(biāo)。9.如權(quán)利要求1中所述的方法,其中執(zhí)行所述分支指令進(jìn)一步包括對(duì)所述分支指令的條件表達(dá)式求值;以及其中所述有條件的轉(zhuǎn)移進(jìn)一步包括當(dāng)所述求值返回“true”結(jié)果時(shí),接下來(lái)執(zhí)行由所述分支指令的屬性標(biāo)識(shí)的另一個(gè)指令,否則,接下來(lái)執(zhí)行所述指令中的下一順序指令。10.如權(quán)利要求1中所述的方法,其中執(zhí)行所述發(fā)送指令進(jìn)一步包括將所述出站事件發(fā)送到事件總線。11.如權(quán)利要求10中所述的方法,其中執(zhí)行所述發(fā)送指令進(jìn)一步包括對(duì)所述發(fā)送指令中指定的表達(dá)式求值并在所述發(fā)送之前在所述出站事件中反映所述求值的結(jié)果。12.如權(quán)利要求1中所述的方法,其中執(zhí)行所述終止指令進(jìn)一步包括終止所述當(dāng)前執(zhí)行上下文對(duì)象。13.一種用于執(zhí)行程序的虛擬機(jī),包括指令執(zhí)行器,其用于使用計(jì)算機(jī)執(zhí)行來(lái)自所述程序的指令,其中所述指令包括以下指令中的至少一個(gè)事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)。14.如利權(quán)要求13中所述的虛擬機(jī),其中從事件驅(qū)動(dòng)的模型規(guī)范生成所述指令。15.如利權(quán)要求13中所述的虛擬機(jī),其中從消息驅(qū)動(dòng)的模型規(guī)范生成所述指令。16.如權(quán)利要求13中所述的虛擬機(jī),其中所述虛擬機(jī)可用于執(zhí)行多個(gè)程序,所述多個(gè)程序從至少兩個(gè)不同的執(zhí)行模型生成。17.如權(quán)利要求13中所述的虛擬機(jī),其中執(zhí)行所述事件指令進(jìn)一步包括執(zhí)行所述事件指令以接收特定入站事件;查找與所述事件指令關(guān)聯(lián)的扇出指令;執(zhí)行所找到的扇出指令以便使用與所找到的扇出指令關(guān)聯(lián)的關(guān)聯(lián)謂詞信息判定任何當(dāng)前執(zhí)行上下文對(duì)象是否能夠進(jìn)一步處理所述特定入站事件;以及如果有能力的執(zhí)行上下文對(duì)象存在,將所述特定入站事件導(dǎo)向每個(gè)所確定的有能力的執(zhí)行上下文對(duì)象以便在其中進(jìn)行進(jìn)一步處理。18.如權(quán)利要求13中所述的虛擬機(jī),其中用于接收入站事件的所述事件指令還過(guò)濾所述入站事件。19.如權(quán)利要求13中所述的虛擬機(jī),其中所述虛擬機(jī)的指令執(zhí)行器在接收到特定入站事件時(shí),在來(lái)自所述程序的多個(gè)事件指令中的每個(gè)事件指令內(nèi)存在類型規(guī)范的情況下,通過(guò)將所述特定入站事件聲明的類型與所述多個(gè)事件指令中的每個(gè)事件指令內(nèi)的類型規(guī)范相比較來(lái)確定要執(zhí)行所述多個(gè)事件指令中的哪個(gè)事件指令。20.如權(quán)利要求13中所述的虛擬機(jī),其中執(zhí)行所述賦值指令進(jìn)一步包括對(duì)所述賦值指令的表達(dá)式求值;以及將所述求值的結(jié)果作為值分配給由所述賦值指令標(biāo)識(shí)的目標(biāo)。21.如權(quán)利要求13中所述的虛擬機(jī),其中執(zhí)行所述分支指令進(jìn)一步包括對(duì)所述分支指令的條件表達(dá)式求值;以及其中所述有條件的轉(zhuǎn)移進(jìn)一步包括當(dāng)所述求值返回“true”結(jié)果時(shí),接下來(lái)執(zhí)行由所述分支指令的屬性標(biāo)識(shí)的另一個(gè)指令,否則,接下來(lái)執(zhí)行所述指令中的下一順序指令。22.如權(quán)利要求13中所述的虛擬機(jī),其中執(zhí)行所述發(fā)送指令進(jìn)一步包括將所述出站事件發(fā)送到事件總線。23.如權(quán)利要求22中所述的虛擬機(jī),其中執(zhí)行所述發(fā)送指令進(jìn)一步包括對(duì)所述發(fā)送指令中指定的表達(dá)式求值并在所述發(fā)送之前在所述出站事件中反映所述求值的結(jié)果。24.如權(quán)利要求13中所述的虛擬機(jī),其中執(zhí)行所述終止指令進(jìn)一步包括終止所述當(dāng)前執(zhí)行上下文對(duì)象。25.一種用于執(zhí)行虛擬機(jī)的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)程序產(chǎn)品包含在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中并且包括用于以下操作的計(jì)算機(jī)可讀指令在計(jì)算機(jī)上使用所述虛擬機(jī)執(zhí)行來(lái)自程序的指令,其中所述指令包括以下指令中的至少一個(gè)事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)。26.一種存儲(chǔ)以編程語(yǔ)言編寫的源代碼的計(jì)算機(jī)可讀介質(zhì),其中所述編程語(yǔ)言包括事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè);以及所述源代碼包括所述編程語(yǔ)言中的多個(gè)所述指令。27.如權(quán)利要求26中所述的計(jì)算機(jī)可讀介質(zhì),其中從事件驅(qū)動(dòng)的模型規(guī)范生成所述源代碼。28.如權(quán)利要求26中所述的計(jì)算機(jī)可讀介質(zhì),其中從消息驅(qū)動(dòng)的模型規(guī)范生成所述源代碼。29.—種可存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中以使計(jì)算機(jī)執(zhí)行的指令程序,其中所述指令包括多個(gè)以下指令事件指令,其用于接收入站事件;賦值指令,其用于分配值;分支指令,其用于有條件的轉(zhuǎn)移到另一個(gè)指令;發(fā)送指令,其用于指定要發(fā)送出站事件;終止指令,其用于指定要終止當(dāng)前執(zhí)行上下文對(duì)象;以及扇出指令,其用于指定事件關(guān)聯(lián)和啟用上下文切換中的至少一個(gè)。30.如權(quán)利要求29中所述的指令程序,其中從事件驅(qū)動(dòng)的模型規(guī)范生成所述指令。31.如權(quán)利要求29中所述的指令程序,其中從消息驅(qū)動(dòng)的模型規(guī)范生成所述指令。全文摘要虛擬機(jī)支持編譯器生成的代碼的執(zhí)行,并為可以與若干不同事件驅(qū)動(dòng)或消息驅(qū)動(dòng)的編程模型(例如狀態(tài)機(jī)、用于復(fù)雜事件處理和事件關(guān)聯(lián)的規(guī)則、監(jiān)視上下文、過(guò)程以及調(diào)解)中的任何一個(gè)對(duì)應(yīng)的代碼提供執(zhí)行環(huán)境。所述編程模型可以用在業(yè)務(wù)監(jiān)視和/或業(yè)務(wù)集成環(huán)境中。定義編程語(yǔ)言以便使用所述虛擬機(jī)執(zhí)行,所述編程語(yǔ)言包含相對(duì)較少數(shù)量的指令并且優(yōu)選地由編譯器從高級(jí)的事件驅(qū)動(dòng)或消息驅(qū)動(dòng)的模型生成。文檔編號(hào)G06F9/46GK101960425SQ200980106872公開(kāi)日2011年1月26日申請(qǐng)日期2009年2月26日優(yōu)先權(quán)日2008年2月29日發(fā)明者J·法蘭克,W·賈米森申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
盐源县| 寻乌县| 德昌县| 澄城县| 手游| 马公市| 突泉县| 乡城县| 河间市| 阿坝| 米脂县| 芦山县| 福泉市| 大洼县| 图片| 砚山县| 大城县| 香格里拉县| 武定县| 美姑县| 阜新市| 治多县| 老河口市| 绍兴市| 黑水县| 贡山| 英超| 凉山| 华容县| 湛江市| 保康县| 类乌齐县| 咸宁市| 分宜县| 扶风县| 洞头县| 翁牛特旗| 大港区| 永定县| 柳州市| 连云港市|