專利名稱:用于在服務(wù)器端程序中處理外部事件的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件領(lǐng)域,而更特別地,本發(fā)明涉及服務(wù)器中的事件處理。
背景技術(shù):
Web服務(wù)器提供者識別針對響應(yīng)用戶交互的Web頁或者動態(tài)內(nèi)容的需求。這種用戶交互可包括客戶機端和服務(wù)器端的處理。客戶機端的處理能夠用于允許小程序,例如小應(yīng)用程序(applet),在用戶機器的用戶瀏覽器中執(zhí)行。但是,服務(wù)器端程序,通常需要用于比較復(fù)雜的任務(wù),例如數(shù)據(jù)庫查找。為了執(zhí)行這些服務(wù)器端的任務(wù),Web服務(wù)器能夠用作一個在通常為瀏覽器的客戶機程序與例如數(shù)據(jù)庫等的服務(wù)器程序之間的接口。
一種用于執(zhí)行服務(wù)器端的處理的方法包括虛擬機的應(yīng)用。虛擬機可以是一種在被編譯的程序執(zhí)行代碼與特定的硬件平臺之間的接口。因此,虛擬機可以允許建立能夠運行在任意硬件平臺上的應(yīng)用程序,而不必由程序員相對于每一單獨的平臺重寫或重新編譯。一個這樣的虛擬機就是Java虛擬機,其中可以包括作為兼容的服務(wù)器端程序的小服務(wù)程序(servlet)。
小服務(wù)程序是一個與服務(wù)器端的部件無關(guān)的協(xié)議和平臺,它能夠應(yīng)用請求-響應(yīng)程序執(zhí)行模式。由小服務(wù)程序處理的每個用戶請求能夠?qū)е略诜?wù)器的處理器中的單個線程的應(yīng)用。因此,與采用公共網(wǎng)關(guān)接口(CGI)的實現(xiàn)相比,小服務(wù)程序的處理開銷是很小的,其中,對于CGI響應(yīng)的每個用戶請求,CGI將初始化一個新的進程。特別地,小服務(wù)程序能夠以同步方式處理客戶機請求,使得當(dāng)客戶機發(fā)布一請求時,該客戶機必須等待直到小服務(wù)程序完成該請求為止。不幸的是,在完成之前,該客戶機不能中斷或者修改小服務(wù)程序中的進程的執(zhí)行。
例如,客戶機能夠提交一導(dǎo)致服務(wù)器處理大的話音XML(VoiceExtensible Markup Language,即話音擴展標記語言)文本的請求。該服務(wù)器能夠接收所述客戶機請求并且能夠利用一小服務(wù)程序產(chǎn)生響應(yīng)。但是,在該小服務(wù)程序已被啟動后,一“掛起”事件發(fā)生,使得所述響應(yīng)懸而未決。在沒有外部事件處理能力的情況下,即使該“掛起”事件向原請求客戶機提出所述響應(yīng)是無意義的,該服務(wù)器也將完成所述已啟動的話音XML處理。即,該客戶機可能必須等待該小服務(wù)程序中的一超時事件發(fā)生,并且不能外部觸發(fā)這種事件。因此,能夠造成處理時間和服務(wù)器資源的不必要的浪費。
發(fā)明內(nèi)容
這里公開的本發(fā)明提供了一種用于在虛擬機中的服務(wù)器端程序處理外部事件的系統(tǒng)和方法。目前,許多虛擬機采用請求-響應(yīng)范例執(zhí)行同步請求處理而沒有外部事件處理。本發(fā)明能夠添加事件處理器,事件分配器和事件監(jiān)視器至虛擬機中,以便擴展該虛擬機的能力而使其包括外部事件處理。更特別地,事件處理器能夠被配置成檢測外部事件并且相應(yīng)地觸發(fā)事件分配器。一旦被觸發(fā),事件分配器就能夠廣播可由事件監(jiān)視器自服務(wù)器端程序范圍內(nèi)檢測的虛擬機事件。然后,響應(yīng)在每個事件監(jiān)視器中的每一檢測,一規(guī)定的動作能夠被觸發(fā)。
本發(fā)明的一個方面能夠包括一種用于在運行于虛擬機的服務(wù)器端程序中處理外部事件的方法。該方法能夠包括在所述服務(wù)器端程序中開始第一進程。在一個實施例中,第一進程能夠由第一線程執(zhí)行。該方法還能啟動第一事件監(jiān)視器,以響應(yīng)所述第一進程。在包括第一線程的一個實施例中,事件監(jiān)視器能夠被鏈接到第一線程。然后,一虛擬機事件能夠被廣播,以響應(yīng)一在該虛擬機外部發(fā)生的外部事件。該虛擬機事件能夠被第一事件監(jiān)視器檢測,從而產(chǎn)生第一程序響應(yīng)。
例如,在一特定實施例中,HTTP(超文本傳輸協(xié)議)客戶機能夠提交一外部事件至Web服務(wù)器。在該Web服務(wù)器中的一虛擬機能夠執(zhí)行一服務(wù)器端程序,例如一Java小服務(wù)程序。響應(yīng)該外部事件,一例如線程終止事件等的內(nèi)部事件能夠被廣播。該線程終止事件能夠被第一事件監(jiān)視器檢測,從而導(dǎo)致第一線程終止。一旦該線程已經(jīng)終止,則第一事件監(jiān)視器能夠被終止。在另一實施例中,第一線程能夠根據(jù)完成其被分配的任務(wù)而終止。其后,第一事件監(jiān)視器也能被終止。
在一個實施例中,在第一進程仍在執(zhí)行的同時,在所述服務(wù)器端程序中能夠開始第二進程。被與第一進程類似的方式,該第二進程能夠引起第二事件監(jiān)視器的啟動,該第二事件監(jiān)視器能夠檢測一個或多個虛擬機事件并且產(chǎn)生第二程序響應(yīng)。該第二進程能夠由第二線程執(zhí)行。特別地,第一事件監(jiān)視器和第二事件監(jiān)視器都能夠檢測單個的虛擬機事件。雖然如此,第一程序響應(yīng)也能夠不同于第二程序響應(yīng)。而且,特定的虛擬機事件可以由第一事件監(jiān)視器檢測并且不由第二事件監(jiān)視器檢測。
本發(fā)明的另一方面能夠包括一種用于在虛擬機中配置外部事件處理器的方法。該方法能夠調(diào)用一服務(wù)器端程序,例示一被配置成廣播至少一個虛擬機事件的事件分配器,并且在服務(wù)器端程序中啟動至少一個進程。另外,對于啟動的每個進程,一事件監(jiān)視器能夠被啟動。該事件監(jiān)視器能夠被配置成檢測至少一個虛擬機事件。在一個實施例中,該方法能夠接收一個外部事件,并且觸發(fā)所述事件分配器,使其廣播至少一個虛擬機事件,以響應(yīng)所述外部事件。例如,在一特定實施例中,所述外部事件可以是一程序中斷,該中斷引起一虛擬機事件的廣播,從而導(dǎo)致運行在所述服務(wù)器端程序中的每個進程的終止以及所述服務(wù)器端程序的終止。特別地,不是所有的事件監(jiān)視器能夠檢測的虛擬機事件都必須是由事件分配器廣播的虛擬機事件。
本發(fā)明的再一個方面能夠包括一種用于在服務(wù)器端程序中處理外部事件的系統(tǒng)。該系統(tǒng)能夠包括一安排在服務(wù)器中的虛擬機,以及一安排在所述虛擬機中的事件處理器,該事件處理器被配置成接收至少一個外部事件。在一個實施例中,該服務(wù)器可以是一個能夠響應(yīng)HTTP(超文本傳輸協(xié)議)客戶機的Web服務(wù)器。該系統(tǒng)還能包括一安排在所述虛擬機中的服務(wù)器端程序,該服務(wù)器端程序被配置成處理至少一個客戶機請求。特別地,所述服務(wù)器端程序的多個實例能夠在所述虛擬機中同時操作。在一具體實施例中,所述服務(wù)器端程序可以是一個小服務(wù)程序。
該系統(tǒng)還能包括一安排在所述服務(wù)器端程序中的事件分配器,該事件分配器被配置成廣播至少一個虛擬機事件,以響應(yīng)由所述事件處理器啟動的廣播觸發(fā)器。而且,該系統(tǒng)能夠包括至少一個虛擬機事件監(jiān)視器,其中每個虛擬機事件監(jiān)視器能夠被鏈接至一根據(jù)客戶機請求產(chǎn)生的規(guī)定的進程。每個虛擬機事件監(jiān)視器能夠檢測至少一個虛擬機事件并且相應(yīng)地對其被鏈接到的進程起作用。在一個實施例中,所述服務(wù)器端程序能夠采用面向?qū)ο蟮姆椒?gòu)成。在這樣的實施例中,一包容器對象能夠包含服務(wù)器端程序?qū)ο笠约笆录峙淦鲗ο?。該事件分配器對象能夠包含多個方法,這些方法包括添加虛擬機事件監(jiān)視器方法,刪除虛擬機事件監(jiān)視器方法和廣播虛擬機事件方法。
在附圖中給出了一些實施例,這些實施例當(dāng)然是優(yōu)選的,但是,應(yīng)該理解的是,本發(fā)明不限于圖中示出的確切的裝置和手段。
圖1是一示意圖,描述了根據(jù)這里公開的本發(fā)明裝置的一示例性的服務(wù)器端程序。
圖2是一流程圖,描述了根據(jù)這里公開的本發(fā)明裝置的在服務(wù)器端程序?qū)嵗刑幚硗獠渴录姆椒ā?br>
具體實施例方式
這里公開的本發(fā)明提供了一種用于虛擬機(VM)中的服務(wù)器端程序處理外部事件的系統(tǒng)和方法。許多常規(guī)的服務(wù)器端程序,例如小服務(wù)程序等,只能同步處理客戶機請求,因此,在采取進一步的動作之前,需要所述請求的客戶機等待一響應(yīng)。本發(fā)明提供了一種方法,其中一另外的同步的服務(wù)器端程序能夠響應(yīng)外部事件。更具體地,一外部事件能夠由VM接收。響應(yīng)該外部事件,一內(nèi)部事件(VM事件)能夠在VM中被廣播。該VM事件能夠被正在執(zhí)行的服務(wù)器端程序檢測,從而產(chǎn)生在所述正在執(zhí)行的服務(wù)器端程序中的規(guī)定的動作。
圖1是一示意圖,描述了一用于根據(jù)這里公開的本發(fā)明裝置的一示例性的服務(wù)器端程序的系統(tǒng)100。系統(tǒng)100可以包括服務(wù)器135,虛擬機140,事件處理器150,程序?qū)嵗?55,以及事件分配器160。服務(wù)器135可以是一被配置成接收和完成來自客戶機程序的請求的計算設(shè)備。例如,在一個實施例中,服務(wù)器135可以是一Web服務(wù)器,該Web服務(wù)器通過網(wǎng)絡(luò)130,向例如客戶機105和110等請求客戶機提供Web頁。
虛擬機140可以是一在編譯的程序執(zhí)行代碼與特定硬件平臺之間的接口,該虛擬機被配置成用作邏輯定義的處理器。因此,虛擬機140可以允許建立能夠運行在任意硬件平臺上的應(yīng)用程序,而不必由程序員相對于每一單獨的平臺重寫或重新編譯。在一個實施例中,虛擬機140可以是Java虛擬機,該Java虛擬機規(guī)定了一指令集,一組寄存器,一堆棧,一廢料堆(garbage heap)和一方法區(qū)。
程序?qū)嵗?55可以是一配置成在虛擬機140中操作的服務(wù)器端程序的例示。一旦被加載和例示,程序?qū)嵗?55就能夠處理多個請求。在一個實施例中,由程序?qū)嵗?55處理的每個請求可以是能夠執(zhí)行規(guī)定任務(wù)的單獨的線程。在一其中的服務(wù)器端程序是Java小服務(wù)程序的特定實施例中,程序?qū)嵗?55可以是一小服務(wù)程序?qū)嵗?。程序?qū)嵗?55可以包括線程165和170,事件監(jiān)視器175和180,以及事件分配器160。特別地,在特定實施例中,用于單個程序的多個程序?qū)嵗梢栽谔摂M機140中同時運行。另外,在其它的實施例中,各個不同的程序及其一個或多個實例可以在虛擬機140中同時運行。
線程165和170可以是能夠并行操作的執(zhí)行流。通過在程序?qū)嵗?55中應(yīng)用線程165和170而不是單獨的進程實例,可以獲得許多優(yōu)勢。例如,比較線程和單獨的進程,線程可以要求實質(zhì)上較低的負載,可以執(zhí)行得更快,并且可以利用多個中央處理器(CPU)。在一個實施例中,可以建立線程池,其中每個任務(wù)可以利用一可獲得的線程。然后,根據(jù)任務(wù)的完成,線程能夠被返回到一“空閑”池中。這樣的實施例能夠減小與線程的建立和終止相關(guān)的開銷。在另一實施例中,能夠根據(jù)需要來建立和終止線程。
事件監(jiān)視器175和180能夠檢測在虛擬機140中產(chǎn)生的已定義的事件并且對其起反應(yīng)。這些VM事件將不同于事件監(jiān)視器175和180不能檢測的外部事件。在一特定實施例中,只要一監(jiān)視的事件被檢測到,事件監(jiān)視器175和180就能夠觸發(fā)開發(fā)者規(guī)定的動作。另外,事件監(jiān)視器175和180可以是嵌入到虛擬機140本身中的邏輯部件。因此,開發(fā)者可以利用這些預(yù)先建立的事件監(jiān)視器而沒有大范圍的開發(fā)支出。例如,在一個實施例中,事件監(jiān)視器175和180可以是Java收聽站(listener),該收聽站被配置成檢測Java虛擬機中的事件,例如超時事件,建立事件,初始化事件和撤消事件,以及屬性的增加、刪除和修改。在另一實施例中,事件監(jiān)視器175和180可以分別被鏈接至特定的線程,例如線程165和170。
事件分配器160可以包含用于添加和刪除事件監(jiān)視器的方法,該事件監(jiān)視器包括事件監(jiān)視器175和180,還可以包含用于廣播VM事件至一個或多個事件監(jiān)視器的方法。例如,在一個實施例中,事件分配器160可以廣播一VM事件,其中事件監(jiān)視器175被配置成檢測該VM事件。在檢測所述被監(jiān)視的VM事件時,事件監(jiān)視器175可以終止線程165的執(zhí)行,其中事件監(jiān)視器175被鏈接至線程165。在另一實施例中,事件分配器160可以廣播一VM事件,其中事件監(jiān)視器175和事件監(jiān)視器180都被配置成檢測該VM事件。特別地,事件處理器150可以接收一外部事件,并且相應(yīng)地觸發(fā)事件分配器160以便廣播一個或多個VM事件。
在一個實施例中,事件處理器150可以保持一外部對內(nèi)部數(shù)據(jù)事件的相互對照列表以便于其操作。應(yīng)該強調(diào)的是,單個外部事件能夠?qū)е露鄠€VM事件的廣播,或者可選擇的是,導(dǎo)致非VM事件的廣播。例如,在一特定實施例中,具有運行在程序?qū)嵗?55中的多個進程的客戶機115能夠發(fā)送一外部請求以便終止所有的進程。因此,事件處理器150可以觸發(fā)一用于每個進程的將被廣播的VM事件,其中所述每個進程運行在由所述客戶機啟動的程序?qū)嵗?55中。類似地,在另一實施例中,事件分配器160可以保持執(zhí)行VM事件與相關(guān)事件監(jiān)視器的相互對照列表,以便保持VM事件和事件監(jiān)視器之間的適當(dāng)?shù)年P(guān)系。
特別地,在一個實施例中,包括事件監(jiān)視器175和180在內(nèi)的每一事件監(jiān)視器,能夠檢測多個事件并且可以包含只要任一指定的事件發(fā)生就觸發(fā)的可執(zhí)行代碼。另外,有些可由事件監(jiān)視器檢測的事件可以是不由事件分配器160廣播的事件。例如,在一特定實施例中,事件監(jiān)視器175可以包含一進程狀態(tài)方法,其中只要一進程VM事件被廣播,該方法就被觸發(fā)。
在利用線程池的另一實施例中,只要一線程位于空閑線程區(qū)內(nèi),一事件監(jiān)視器就可以被無效。因此,只要線程165完成處理并返回線程池,事件監(jiān)視器175就可以檢測任務(wù)完成,并且觸發(fā)一使其自身無效的事件監(jiān)視器方法。應(yīng)該注意的是,由事件監(jiān)視器175檢測的線程完成事件不是被廣播的VM事件。
在操作中,客戶機105可以經(jīng)由網(wǎng)絡(luò)130傳送一外部請求115至服務(wù)器135。然后,服務(wù)器135可以轉(zhuǎn)發(fā)請求115至虛擬機140。響應(yīng)該請求,一服務(wù)器端程序可以被虛擬機140加載并且被例示為程序?qū)嵗?55。當(dāng)程序?qū)嵗?55被初始化時,一相應(yīng)的事件分配器160也可以被例示。其后,可以產(chǎn)生線程165以響應(yīng)請求115。而且,事件監(jiān)視器175能夠被例示并鏈接至新建立的線程165。然后,客戶機110可以經(jīng)由網(wǎng)絡(luò)130傳送外部請求125至服務(wù)器135。通過與上面剛剛提及的相似的步驟,一個新的線程,與事件監(jiān)視器180相關(guān)聯(lián)的線程170能夠在程序?qū)嵗?55中被建立。
這里,客戶機105可以經(jīng)由網(wǎng)絡(luò)130傳送外部事件120至服務(wù)器135。然后,事件處理器150能夠檢測外部事件120,并且相應(yīng)地觸發(fā)事件分配器160以廣播一VM事件。然后,事件分配器160可以廣播事件監(jiān)視器175和180能夠檢測的指定的VM事件。最后,響應(yīng)被檢測的事件,事件監(jiān)視器175和180可以執(zhí)行預(yù)先規(guī)定的動作。
應(yīng)該注意的是,前述的例子示出了一種利用外部事件中斷的可能的實施例。本發(fā)明考慮了許多其它的應(yīng)用。例如,在另一實施例中,本發(fā)明能夠與例如一話音識別服務(wù)器等的遠程服務(wù)器資源一起被應(yīng)用,其中的遠程服務(wù)器資源被配置成執(zhí)行復(fù)雜任務(wù)。由于包括話音識別任務(wù)在內(nèi)的這些任務(wù)中的每一個要花費大量執(zhí)行時間,因此,在每個話音識別任務(wù)由遠程服務(wù)器資源處理時,能夠有利于提高服務(wù)器135的空閑程度。因此,每個話音識別任務(wù)能夠被異步地返回到服務(wù)器135。從而,話音識別任務(wù)的完成可以觸發(fā)一能夠由服務(wù)器135處理的話音識別完成事件。
圖2是一流程圖,描述了根據(jù)這里公開的本發(fā)明裝置的在服務(wù)器端程序?qū)嵗刑幚硗獠恐袛嗟姆椒?00。方法200能夠在客戶機/服務(wù)器體系結(jié)構(gòu)的環(huán)境中被執(zhí)行,其中相對于接收和完成的每一任務(wù),線程都被建立和終止。該方法可以開始于步驟202,在該步驟中,服務(wù)器能夠接收一來自客戶機的請求。例如,在一個實施例中,客戶機能夠通過Web瀏覽器提交一請求至Web服務(wù)器。在步驟204中,該服務(wù)器能夠接收該請求并且將其轉(zhuǎn)發(fā)至一安排在該服務(wù)器內(nèi)部的虛擬機。
在步驟206中,一程序?qū)嵗軌虮焕?,以用于處理所述請求。如果該程序?qū)嵗?dāng)前沒有被加載在存貯器中,則在例示之前可以出現(xiàn)加載操作。特別地,在步驟208中,此時一事件分配器也能被例示。在步驟210,在用于處理所述請求的程序?qū)嵗?,一線程可以被初始化。特別地,線程可以是一能夠與其它線程并行操作的執(zhí)行流。
在步驟212中,對于所述線程,可以添加一事件監(jiān)視器。該事件監(jiān)視器能夠檢測在虛擬機中出現(xiàn)的已定義的事件并且對其起反應(yīng)。事件監(jiān)視器能夠檢測的事件包括但不限于初始化,撤消,屬性修改,屬性添加,無效和超時。例如,事件監(jiān)視器能夠為了線程終止事件而監(jiān)視線程。特別地,在一個其中的程序?qū)嵗秊樾》?wù)程序?qū)嵗膶嵤├校录O(jiān)視器可以是一個收聽站對象。在步驟214中,在事件監(jiān)視器已經(jīng)添加到線程中后,該線程可以開始執(zhí)行其被分配的任務(wù)。
在步驟216中,方法200能夠搜索要求處理的其它請求。如果存在其它的請求,則該方法能夠進行到步驟218,在步驟218中服務(wù)器能夠接收來自所述客戶機的另一個請求。然后,該方法能夠進行到步驟210、212和214,在這些步驟中,對于所述新的請求,一新的線程和事件監(jiān)視器能夠在程序?qū)嵗斜粏?,并且該新的線程能夠開始執(zhí)行。特別地,一給定的程序?qū)嵗軌蛲瑫r執(zhí)行多個線程,而其中的每個線程能夠?qū)?yīng)一個請求。
如果沒有另外的請求,則該方法能夠進行到步驟220,在步驟220中,該方法能夠檢測線程的終止。如果一線程已經(jīng)終止,則步驟222能夠被執(zhí)行并且其事件監(jiān)視器能夠被刪除。明顯地,線程能夠根據(jù)任務(wù)的完成而被終止。一旦事件監(jiān)視器被刪除,該方法就能進行到步驟224。
如果沒有線程終止,則所述方法能夠進行到步驟224。在步驟224中,該方法能夠檢測外部事件。特別地,外部事件可以涉及當(dāng)前處理的請求。例如,外部事件可以是一終止用戶先前請求的數(shù)據(jù)庫搜索的請求。如果外部事件被檢測,則該方法能夠進行到步驟226,否則該方法可以進行到步驟228。
在步驟226中,外部事件能夠由一事件處理器解釋。該事件處理器能夠使得事件分配器廣播一事件,以響應(yīng)該外部事件。例如,在一個實施例中,外部事件可以是一進入Web主頁的客戶機請求。假定同一客戶機當(dāng)前處于等待周期直到一先前的請求被滿足為止,則該事件處理器能夠確定終止所述先前的客戶機請求是合適的。因此,該事件處理器能夠使得該事件分配器廣播一線程終止事件至所述程序?qū)嵗?。在另一實施例中,該事件處理器能夠保持一將外部事件關(guān)聯(lián)到內(nèi)部事件的列表。該列表能夠用于所述虛擬機中,以便跟蹤和保持適當(dāng)?shù)年P(guān)系。
特別地,與線程相關(guān)聯(lián)的并且被安排在所述程序?qū)嵗械母鱾€事件監(jiān)視器能夠檢測廣播的事件。而且,所述事件分配器能夠保持一在事件監(jiān)視器與相應(yīng)的線程之間的關(guān)聯(lián)的列表。另外,事件監(jiān)視器能夠被配置成根據(jù)一被監(jiān)視事件的檢測而采取指定的動作。而且,在特定實施例中,例如其中的事件監(jiān)視器被實現(xiàn)為面向?qū)ο蟮念惖哪承嵤├?,這些指定的動作能夠被編程并且存儲在每個事件監(jiān)視器中。在一個實施例中,所述指定的動作可以是終止一當(dāng)前操作的線程。本領(lǐng)域的普通技術(shù)人員可以理解的是,由于按另外的方式,每個線程在被終止之前將不必完成執(zhí)行,因此,通過方法200,服務(wù)器資源和客戶機響應(yīng)時間方面的性能都能夠被增強。根據(jù)完成步驟226,所述方法能夠進行到步驟228。
在步驟228中,所述方法能夠確定在所述程序?qū)嵗惺欠襁€有任何線程正在處理。如果還有線程正在處理,則該方法跳轉(zhuǎn)至步驟216并且重復(fù)前面詳述的步驟。但是,如果沒有線程還在處理,則該方法能夠進行到其中所述程序?qū)嵗梢员唤K止的步驟230。應(yīng)該注意的是,雖然方法200描述本發(fā)明為一系列的步驟,但是,本發(fā)明能夠是并且經(jīng)常是一種事件驅(qū)動的解決方案,其中,當(dāng)內(nèi)部和外部事件產(chǎn)生時,該解決方案響應(yīng)這些事件。
本發(fā)明能夠以硬件,軟件或者硬件與軟件組合的方式實現(xiàn)。本發(fā)明能夠以集中的方式在一個計算機系統(tǒng)中實現(xiàn),或者以分布的方式實現(xiàn),在該分布的方式中,不同部件被散布在幾個互聯(lián)的計算機系統(tǒng)中。適于實現(xiàn)這里描述的方法的任意一種計算機系統(tǒng)和其它裝置是合適的。硬件與軟件的一種典型組合可以是具有計算機程序的通用計算機系統(tǒng),當(dāng)該計算機程序被加載和執(zhí)行時,該計算機程序控制計算機系統(tǒng),使得實現(xiàn)這里描述的方法。
本發(fā)明還能夠被嵌入到一計算機程序產(chǎn)品中,該產(chǎn)品包括允許實現(xiàn)這里描述的方法的所有功能,并且,當(dāng)被加載到計算機系統(tǒng)中時,該產(chǎn)品能夠?qū)崿F(xiàn)這些方法。在當(dāng)前的上下文中的計算機程序意味著以任何語言,代碼或符號形式的一組指令的任何表達,所述的一組指令想要使得具有信息處理能力的系統(tǒng)直接地,或者在下列兩種情況之后,或者在下列兩種情況的任一種之后執(zhí)行特定的功能a)轉(zhuǎn)換至另一種語言,代碼或符號;b)以不同的物質(zhì)形式再現(xiàn)。
在不脫離本發(fā)明的精神或其實質(zhì)特征的情況下,本發(fā)明能夠以其它形式實施。因此,當(dāng)指示本發(fā)明的范圍時,應(yīng)當(dāng)參考后面的權(quán)利要求,而不是前述的說明書。
權(quán)利要求
1.一種用于在運行于虛擬機的服務(wù)器端程序中處理外部事件的方法,包括步驟在所述服務(wù)器端程序中,開始第一進程;啟動第一事件監(jiān)視器,以響應(yīng)所述開始步驟;廣播一虛擬機事件,以響應(yīng)一外部事件,其中所述外部事件是一發(fā)生在所述虛擬機外部的事件;利用所述第一事件監(jiān)視器檢測所述虛擬機事件;以及調(diào)用第一程序響應(yīng),以響應(yīng)所述檢測步驟。
2.如權(quán)利要求1的方法,其中所述開始步驟還包括初始化第一線程的步驟,其中所述第一進程由所述第一線程執(zhí)行,并且其中,所述啟動步驟還包括鏈接所述第一事件監(jiān)視器至所述第一線程的步驟,以及其中,在所述調(diào)用步驟中的所述第一程序響應(yīng)對所述第一線程起作用。
3.如權(quán)利要求2的方法,還包括步驟完成所述第一線程的執(zhí)行;響應(yīng)所述完成步驟,釋放所述第一線程;以及響應(yīng)所述釋放步驟,撤消所述第一事件監(jiān)視器。
4. 如權(quán)利要求1的方法,還包括步驟在所述服務(wù)器端程序中,開始第二進程;啟動第二事件監(jiān)視器,以響應(yīng)開始所述第二進程的所述開始步驟;利用所述第二事件監(jiān)視器檢測所述虛擬機事件;以及調(diào)用第二程序響應(yīng),以響應(yīng)利用所述第二事件監(jiān)視器的所述檢測步驟。
5.如權(quán)利要求4的方法,其中所述第一程序響應(yīng)不同于所述第二程序響應(yīng)。
6.如權(quán)利要求4的方法,其中開始所述第二進程的所述開始步驟還包括初始化第二線程的步驟,其中所述第二進程由所述第二線程執(zhí)行,并且其中,啟動所述第二事件監(jiān)視器的所述啟動步驟還包括鏈接所述第二事件監(jiān)視器至所述第二線程的步驟,以及其中,在所述調(diào)用步驟中的所述第二程序響應(yīng)對所述第二線程起作用。
7.如權(quán)利要求6的方法,其中所述虛擬機事件由所述第一事件監(jiān)視器檢測,并且其中,所述虛擬機事件由所述第二事件監(jiān)視器檢測。
8.如權(quán)利要求6的方法,其中所述虛擬機事件由所述第一事件監(jiān)視器檢測,并且其中,所述虛擬機事件不由所述第二事件監(jiān)視器檢測。
9.如權(quán)利要求1的方法,其中所述虛擬機被安排在一Web服務(wù)器中,并且至少一個利用所述服務(wù)器端程序的客戶機是超文本傳輸協(xié)議的客戶機。
10.如權(quán)利要求1的方法,其中所述服務(wù)器端程序是小服務(wù)程序。
11.一種用于在虛擬機中配置外部事件處理器的方法,包括步驟調(diào)用一服務(wù)器端程序;在所述服務(wù)器端程序中例示一事件分配器,該事件分配器被配置成廣播至少一個虛擬機事件;在所述服務(wù)器端程序中啟動至少一個進程;以及對于所述至少一個進程中的每一個進程,啟動一事件監(jiān)視器,該事件監(jiān)視器被配置成檢測至少一個虛擬機事件并且相應(yīng)地對所述進程起作用,其中所述進程觸發(fā)了啟動所述事件監(jiān)視器的所述啟動步驟。
12.如權(quán)利要求11的方法,其中所述至少一個虛擬機事件中的至少一部分不被所述事件分配器廣播,其中每個所述事件監(jiān)視器被配置成檢測所述至少一個虛擬機事件。
13.如權(quán)利要求11的方法,還包括步驟接收一個外部事件;以及觸發(fā)所述事件分配器,使其廣播至少一個虛擬機事件,以響應(yīng)所述外部事件。
14.如權(quán)利要求13的方法,其中所述外部事件是一程序中斷事件,其中所述方法還包括步驟終止運行在所述服務(wù)器端程序中的所述至少一個進程中的每一個進程;以及終止所述服務(wù)器端程序。
15.一種用于在服務(wù)器端程序中處理外部事件的系統(tǒng),包括一安排在服務(wù)器中的虛擬機;一安排在所述虛擬機中的事件處理器,該事件處理器被配置成接受至少一個外部事件;一安排在所述虛擬機中的服務(wù)器端程序,該服務(wù)器端程序被配置成處理至少一個客戶機請求;一安排在所述服務(wù)器端程序中的事件分配器,該事件分配器被配置成廣播至少一個虛擬機事件,以響應(yīng)由所述事件處理器啟動的廣播觸發(fā)器;以及至少一個虛擬機事件監(jiān)視器,其中每個虛擬機事件監(jiān)視器被鏈接至一根據(jù)所述至少一個客戶機請求中的一個請求產(chǎn)生的指定的進程,并且其中每個虛擬機事件監(jiān)視器能夠檢測至少一個虛擬機事件并且相應(yīng)地對所述指定的進程起作用。
16.如權(quán)利要求15的系統(tǒng),其中所述服務(wù)器是一Web服務(wù)器,并且所述至少一個客戶機請求包括到至少一個超文本傳輸協(xié)議的請求。
17.如權(quán)利要求15的系統(tǒng),其中所述服務(wù)器端程序的多個實例能夠在所述虛擬機中同時操作。
18.如權(quán)利要求15的系統(tǒng),其中所述服務(wù)器端程序能夠采用面向?qū)ο蟮姆椒?gòu)成,其中包括一包容器對象,該包容器對象包含服務(wù)器端程序?qū)ο蠛褪录峙淦鲗ο蟆?br>
19.如權(quán)利要求18的系統(tǒng),其中所述該事件分配器包括一個或多個方法,所述方法包括添加虛擬機事件監(jiān)視器方法;刪除虛擬機事件監(jiān)視器方法;以及廣播虛擬機事件方法。
20.如權(quán)利要求15的系統(tǒng),其中所述服務(wù)器端程序是小服務(wù)程序。
21.一種機器可讀的存儲器,其上存儲有一計算機程序,該程序具有多個代碼段,可由一機器執(zhí)行的所述代碼段用于使得該機器執(zhí)行下列步驟在所述服務(wù)器端程序中,開始第一進程;啟動第一事件監(jiān)視器,以響應(yīng)所述開始步驟;廣播一虛擬機事件,以響應(yīng)一外部事件,該外部事件是一發(fā)生在所述虛擬機外部的事件;利用所述第一事件監(jiān)視器檢測所述虛擬機事件;以及調(diào)用第一程序響應(yīng),以響應(yīng)所述檢測步驟。
22.如權(quán)利要求21的機器可讀的存儲器,其中所述開始步驟還包括初始化第一線程的步驟,其中所述第一進程由所述第一線程執(zhí)行,并且其中,所述啟動步驟還包括鏈接所述第一事件監(jiān)視器至所述第一線程的步驟,以及其中,在所述調(diào)用步驟中的所述第一程序響應(yīng)對所述第一線程起作用。
23.如權(quán)利要求22的機器可讀的存儲器,還包括步驟完成所述第一線程的執(zhí)行;響應(yīng)所述完成步驟,釋放所述第一線程;以及響應(yīng)所述釋放步驟,撤消所述第一事件監(jiān)視器。
24.如權(quán)利要求21的機器可讀的存儲器,還包括步驟在所述服務(wù)器端程序中,開始第二進程;啟動第二事件監(jiān)視器,以響應(yīng)開始所述第二進程的所述開始步驟;利用所述第二事件監(jiān)視器檢測所述虛擬機事件;以及調(diào)用第二程序響應(yīng),以響應(yīng)利用所述第二事件監(jiān)視器的所述檢測步驟。
25.如權(quán)利要求24的機器可讀的存儲器,其中所述第一程序響應(yīng)不同于所述第二程序響應(yīng)。
26.如權(quán)利要求24的機器可讀的存儲器,其中開始所述第二進程的所述開始步驟還包括初始化第二線程的步驟,其中所述第二進程由所述第二線程執(zhí)行,并且其中,啟動所述第二事件監(jiān)視器的所述啟動步驟還包括鏈接所述第二事件監(jiān)視器至所述第二線程的步驟,以及其中,在所述調(diào)用步驟中的所述第二程序響應(yīng)對所述第二線程起作用。
27.如權(quán)利要求26的機器可讀的存儲器,其中所述虛擬機事件由所述第一事件監(jiān)視器檢測,并且其中,所述虛擬機事件由所述第二事件監(jiān)視器檢測。
28.如權(quán)利要求26的機器可讀的存儲器,其中所述虛擬機事件由所述第一事件監(jiān)視器檢測,并且其中,所述虛擬機事件不由所述第二事件監(jiān)視器檢測。
29.如權(quán)利要求21的機器可讀的存儲器,其中所述虛擬機被安排在一Web服務(wù)器中,并且至少一個利用所述服務(wù)器端程序的客戶機是超文本傳輸協(xié)議的客戶機。
30.如權(quán)利要求21的機器可讀的存儲器,其中所述服務(wù)器端程序是小服務(wù)程序。
31.一種機器可讀的存儲器,其上存儲有一計算機程序,該程序具有多個代碼段,可由一機器執(zhí)行的所述代碼段用于使得該機器執(zhí)行下列步驟調(diào)用一服務(wù)器端程序;在所述服務(wù)器端程序中例示一事件分配器,該事件分配器被配置成廣播至少一個虛擬機事件;在所述服務(wù)器端程序中啟動至少一個進程;以及對于所述至少一個進程中的每一個進程,啟動一事件監(jiān)視器,該事件監(jiān)視器被配置成檢測至少一個虛擬機事件并且相應(yīng)地對所述進程起作用,其中所述進程觸發(fā)了啟動所述事件監(jiān)視器的所述啟動步驟。
32.如權(quán)利要求31的機器可讀的存儲器,其中所述至少一個虛擬機事件中的至少一部分不被所述事件分配器廣播,其中每個所述事件監(jiān)視器被配置成檢測所述至少一個虛擬機事件。
33.如權(quán)利要求31的機器可讀的存儲器,還包括步驟接收一外部事件;以及觸發(fā)所述事件分配器,使其廣播至少一個虛擬機事件,以響應(yīng)所述外部事件。
34.如權(quán)利要求33的機器可讀的存儲器,其中所述外部事件是一程序中斷事件,其中所述方法還包括步驟終止運行在所述服務(wù)器端程序中的所述至少一個進程中的每一個進程;以及終止所述服務(wù)器端程序。
全文摘要
一種用于在運行于虛擬機的服務(wù)器端程序中處理外部事件的方法,可以包括在該服務(wù)器端程序中開始第一進程和相應(yīng)地啟動第一事件監(jiān)視器。該方法能夠廣播一虛擬機事件,以響應(yīng)一外部事件,該外部事件是一發(fā)生在所述虛擬機外部的事件。所述第一事件監(jiān)視器能夠檢測所述虛擬機事件并且調(diào)用第一程序響應(yīng)。
文檔編號G06F9/46GK1506810SQ20031011697
公開日2004年6月23日 申請日期2003年12月3日 優(yōu)先權(quán)日2002年12月9日
發(fā)明者V·S·穆爾, W·L·努斯比克爾, V S 穆爾, 努斯比克爾 申請人:國際商業(yè)機器公司