專利名稱:用于與多重調(diào)度池進(jìn)行消息接發(fā)的應(yīng)用服務(wù)器的系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例總的涉及應(yīng)用和事務(wù)服務(wù)器,特別涉及用于支持消息排隊(duì)和具有多重調(diào)度池(dispatch pool)的線程的系統(tǒng)。
交叉引用本申請(qǐng)涉及2001年10月5日提交的申請(qǐng)?zhí)枮?0/327,530、發(fā)明人為AdamMessinger和Don Ferguson的臨時(shí)專利申請(qǐng)“SYSTEM FOR APPLICATIONSERVER MESSAGING WITH ASYNCHRONOUS QUEUES(用于與異步隊(duì)列進(jìn)行消息接發(fā)的應(yīng)用服務(wù)器的系統(tǒng))”和2002年10月3日提交的申請(qǐng)?zhí)枮椋撸撸撸?、發(fā)明人為Adam Messinger、Sam Pullara和Dave Brown的實(shí)用新型專利申請(qǐng)“SYSTEM FOR INTEGRATING JAVA SERVLETS WITHASYNCHRONOUS MESSAGES(用于使Java小服務(wù)程序與異步消息結(jié)合的系統(tǒng))”,通過(guò)引用將這兩個(gè)申請(qǐng)都合并于此。
背景技術(shù):
Sun MicroSystem公司與整個(gè)企業(yè)軟件界的領(lǐng)導(dǎo)者們合作開(kāi)發(fā)的Java 2平臺(tái)企業(yè)版(J2EE)規(guī)范定義了一種用于開(kāi)發(fā)多層企業(yè)應(yīng)用程序的現(xiàn)行標(biāo)準(zhǔn)。J2EE提供了一種設(shè)計(jì)、開(kāi)發(fā)、組裝以及調(diào)配(deployment)企業(yè)應(yīng)用程序的、基于組件的方法,其既減小了成本,又允許集中設(shè)計(jì)和實(shí)現(xiàn)。J2EE平臺(tái)為開(kāi)發(fā)者提供了多層分布式應(yīng)用模型、重新使用組件的能力、統(tǒng)一的安全模型以及靈活的事務(wù)控制。其不但可以提供能比以前更快地進(jìn)行銷售的革新的用戶解決方案,而且所得到的獨(dú)立于平臺(tái)的J2EE基于組件的解決方案并不受任何一個(gè)廠商的產(chǎn)品和應(yīng)用程序接口(API)的約束。
J2EE規(guī)范定義了下述種類的組件應(yīng)用客戶機(jī)組件;企業(yè)Java豆(EJB,Enterprise JavaBean);小服務(wù)程序(servlet)和Java服務(wù)器頁(yè)面(JSP)(也稱為網(wǎng)絡(luò)組件);以及小程序(applet)。多層分布式應(yīng)用模型意味著根據(jù)功能將應(yīng)用邏輯劃分為多個(gè)組件,而多個(gè)不同的應(yīng)用組件可以組成同一個(gè)或不同服務(wù)器上的J2EE應(yīng)用程序。應(yīng)用組件實(shí)際安裝在哪里取決于該應(yīng)用組件屬于多層J2EE環(huán)境中的哪一層。圖1中描繪了這些層。如其中所示,應(yīng)用服務(wù)器層104用于開(kāi)發(fā)EJB容器和/或諸如servlet、JSP、以及html頁(yè)面的顯示(presentation)容器114。而這些又用作客戶機(jī)層102與后端層106之間的接口,其中在客戶機(jī)層102調(diào)配客戶機(jī)108和客戶機(jī)應(yīng)用程序,而后斷層106用于容納諸如企業(yè)資源計(jì)劃(ERP)系統(tǒng)的企業(yè)或遺留(legacy)應(yīng)用程序。
客戶機(jī)層——其可以是瀏覽器、基于Java的程序或其它客戶機(jī)層內(nèi)運(yùn)行的網(wǎng)絡(luò)激活編程環(huán)境,既可在公司防火墻之內(nèi)也可在公司防火墻之外。
應(yīng)用服務(wù)器層——通常這一層容納顯示邏輯和業(yè)務(wù)邏輯的組合,以支持客戶機(jī)請(qǐng)求。顯示邏輯通過(guò)JSP頁(yè)面和顯示HTML頁(yè)面的servlet支持,而業(yè)務(wù)邏輯通過(guò)遠(yuǎn)程方法調(diào)用(RMI)對(duì)象和EJB 112支持。EJB依賴于事務(wù)、生命周期、狀態(tài)管理、資源共享、安全性等的容器環(huán)境,其一起組成豆(bean)執(zhí)行的運(yùn)行時(shí)間環(huán)境。
后端層——這一般是現(xiàn)有應(yīng)用程序和數(shù)據(jù)存儲(chǔ)的組合。由于其可能包括諸如企業(yè)資源計(jì)劃(ERP)、主機(jī)事務(wù)處理、數(shù)據(jù)庫(kù)系統(tǒng)以及其它遺留信息系統(tǒng)的系統(tǒng),所以其也被稱為企業(yè)信息系統(tǒng)(EIS)層。
由于J2EE應(yīng)用程序的組件分離地、并且經(jīng)常在不同的器件上運(yùn)行,所以需要有客戶機(jī)和應(yīng)用服務(wù)器層代碼查找并引用其它代碼和資源的方式。客戶機(jī)和應(yīng)用程序代碼可以例如使用Java命名和目錄接口(JNDI)116來(lái)查找用戶定義的諸如企業(yè)豆的對(duì)象,以及諸如Java數(shù)據(jù)庫(kù)連接器(JDBC)數(shù)據(jù)資源對(duì)象的位置和消息連接的環(huán)境條目,而所述位置又用于查找后端層中的資源。
可以在調(diào)配時(shí)間在網(wǎng)絡(luò)和企業(yè)豆組件上配置諸如安全性和事務(wù)管理的應(yīng)用程序行為。這一調(diào)配時(shí)間特征使應(yīng)用邏輯與可能隨組裝而改變的配置設(shè)置分離開(kāi)來(lái)。J2EE安全模型讓開(kāi)發(fā)者配置網(wǎng)絡(luò)或企業(yè)豆組件,使得僅由授權(quán)用戶訪問(wèn)系統(tǒng)資源。例如,網(wǎng)絡(luò)組件可以配置為提示輸入用戶名和密碼。企業(yè)豆組件可以配置為只有特定組中的人員才可以調(diào)用其方法中的某些種類?;蛘撸瑂ervlet組件可以配置為其一些方法可以被每個(gè)人訪問(wèn),而一些方法僅被一個(gè)組織中某些有特權(quán)的人訪問(wèn)。相同的servlet組件可以對(duì)另一個(gè)環(huán)境配置為所有方法都可以被每個(gè)人訪問(wèn),或者所有方法都只能被選定的少數(shù)人訪問(wèn)。
一些應(yīng)用服務(wù)器,例如BEA系統(tǒng)公司,San Jose,Califomia的WebLogic服務(wù)器產(chǎn)品,使用訪問(wèn)控制表(ACL)機(jī)制,其允許對(duì)服務(wù)器上運(yùn)行的組件的利用進(jìn)行精細(xì)控制。利用ACL,開(kāi)發(fā)者可以在Java方法級(jí)定義哪個(gè)用戶或哪組用戶可以或不可以執(zhí)行什么。這一ACL機(jī)制覆蓋了在應(yīng)用服務(wù)器上運(yùn)行的任何內(nèi)容,除了在EJB規(guī)范中定義了其自身的訪問(wèn)控制機(jī)制的EJB之外。安全領(lǐng)域允許管理員從現(xiàn)有授權(quán)或授權(quán)系統(tǒng)中引入信息到ACL。
Java Servletservlet是擴(kuò)展網(wǎng)絡(luò)服務(wù)器的功能性的程序。servlet接收來(lái)自客戶機(jī)的請(qǐng)求,動(dòng)態(tài)產(chǎn)生響應(yīng)(可能查詢數(shù)據(jù)庫(kù)以滿足該請(qǐng)求),然后向客戶機(jī)發(fā)送包含HTML或XML文件的響應(yīng)。servlet與CGI類似,但是因?yàn)閟ervlet使用Java類和流,所以通常更容易編寫。因?yàn)閟ervlet被編譯為Java字節(jié)代碼,并且在運(yùn)行時(shí)間servlet實(shí)例保持在存儲(chǔ)器中,所以其執(zhí)行更快,每個(gè)客戶機(jī)請(qǐng)求產(chǎn)生一個(gè)新線程。servlet使得以動(dòng)態(tài)方式產(chǎn)生數(shù)據(jù)給HTTP響應(yīng)流更加容易。每個(gè)客戶機(jī)請(qǐng)求作為新連接執(zhí)行,因此請(qǐng)求之間的流控制并不容易。為此,會(huì)話管理維持特定客戶機(jī)在請(qǐng)求間的狀態(tài)。在一些應(yīng)用服務(wù)器中,servlet使用HTTP會(huì)話對(duì)象來(lái)保存其在方法請(qǐng)求之間的狀態(tài)。為了排除故障,這一對(duì)象可以在集群的環(huán)境中復(fù)制。
Java服務(wù)器頁(yè)面JSP頁(yè)面是基于文本的、用于開(kāi)發(fā)servlet的顯示中心(presentation-centric)方式。JSP頁(yè)面提供servlet的所有優(yōu)點(diǎn),當(dāng)其與JavaBean類合并時(shí),提供一種使內(nèi)容和顯示邏輯保持分離的容易的方式。JSP頁(yè)面和servlet都比公共網(wǎng)關(guān)接口(CGI)更理想,這是因?yàn)槠涫仟?dú)立于平臺(tái)的,并且使用較少的開(kāi)銷。JSP頁(yè)面可以與JavaBean類一同使用,來(lái)定義用于建立由具有相似外觀和感覺(jué)的頁(yè)面組成的網(wǎng)站的網(wǎng)絡(luò)模板。JavaBean類執(zhí)行數(shù)據(jù)呈現(xiàn)(rendering),因此模板中沒(méi)有Java代碼。這意味著模板可以由HTML編輯器維持。使用JSP頁(yè)面的、簡(jiǎn)單的基于網(wǎng)絡(luò)的應(yīng)用程序可以用于使用自定義標(biāo)記或小腳本(scriptlet)取代JavaBean類來(lái)將內(nèi)容綁定到應(yīng)用邏輯上。自定義標(biāo)記被插入標(biāo)記庫(kù)中,而標(biāo)記庫(kù)被引入到JSP頁(yè)面中。scriptlet是直接嵌入JSP頁(yè)面的小Java代碼段。
數(shù)據(jù)庫(kù)訪問(wèn)服務(wù)(JDBC)JDBC充當(dāng)通向相關(guān)數(shù)據(jù)庫(kù)的橋梁,并且按ODBC(開(kāi)放式數(shù)據(jù)庫(kù)互連)規(guī)范建模。其通過(guò)使用驅(qū)動(dòng)器,將數(shù)據(jù)庫(kù)與程序代碼分離開(kāi)來(lái)。JDBC的一些實(shí)現(xiàn)支持高級(jí)數(shù)據(jù)類型,并且還支持可滾動(dòng)結(jié)果集和成批更新的功能。
Java消息接發(fā)服務(wù)(JMS)JMS是用于支持Java程序之間的消息交換的J2EE機(jī)制。即Java如何支持異步通信,其中發(fā)送者和接收者不需要彼此了解,因此可以獨(dú)立操作。JMS當(dāng)前支持兩種消息接發(fā)模型點(diǎn)對(duì)點(diǎn)——其基于消息隊(duì)列。在這種模型中,消息產(chǎn)生者將消息發(fā)送到隊(duì)列中。消息用戶可以將其自身附在隊(duì)列上以傾聽(tīng)消息。當(dāng)消息到達(dá)隊(duì)列時(shí),用戶將其從隊(duì)列中取出,并對(duì)其響應(yīng)。消息可以僅發(fā)送到一個(gè)隊(duì)列,并僅由一個(gè)用戶使用。用戶具有過(guò)濾消息以指定其想要的確切消息類型的選項(xiàng)。
出版和定購(gòu)——其允許產(chǎn)生者向一個(gè)主題、并向該主題的所有注冊(cè)用戶發(fā)送消息,以檢索這些消息。在這種情況下,許多消費(fèi)者可以接收相同的消息。
Java IDL和多線程服務(wù)器在CORBA領(lǐng)域,已嘗試允許CORBA對(duì)象使用接口定義語(yǔ)言(IDL)來(lái)指定協(xié)議,即其如何與其它對(duì)象交互。利用Java IDL,可以在Java領(lǐng)域和CORBA領(lǐng)域之間定義協(xié)議。從Sun的Java開(kāi)發(fā)工具包(JDK)1.2版開(kāi)始,對(duì)象請(qǐng)求代理程序(ORB)允許Java應(yīng)用程序經(jīng)由因特網(wǎng)交互ORB(IIOP,Intemet interORB)協(xié)議來(lái)調(diào)用遠(yuǎn)程CORBA對(duì)象。在多線程CORBA服務(wù)器中,事件隊(duì)列提供一種實(shí)現(xiàn)該CORBA服務(wù)器上的穿線策略的方法。在實(shí)踐中,事件隊(duì)列支持CORBA請(qǐng)求的期望穿線策略,并在穿線策略內(nèi)集成非CORBA事件的處理。諸如來(lái)自lona軟件的Orbix服務(wù)器的多線程CORBA服務(wù)器,可以例如實(shí)現(xiàn)確定創(chuàng)建多少線程、何時(shí)創(chuàng)建這些線程、以及由哪些線程來(lái)處理哪些請(qǐng)求的策略。實(shí)現(xiàn)特定的策略通常包括創(chuàng)建多個(gè)隊(duì)列和工作線程,并對(duì)邏輯編程以確定哪個(gè)隊(duì)列用于每個(gè)到來(lái)事件。
因此,多線程CORBA服務(wù)器可以同時(shí)處理幾個(gè)CORBA請(qǐng)求。這樣做的一個(gè)主要優(yōu)點(diǎn)是增加總吞吐量。可以對(duì)不同的需要,根據(jù)處理請(qǐng)求的工作應(yīng)當(dāng)如何在其間共享來(lái)自定義穿線策略。這些選項(xiàng)包括下述內(nèi)容每個(gè)操作一個(gè)線程在這種場(chǎng)景下,創(chuàng)建新線程來(lái)處理每個(gè)到來(lái)請(qǐng)求。這一選項(xiàng)提供最大的并行性,但是有時(shí)如果服務(wù)器以最大負(fù)荷接收大量同時(shí)發(fā)生的請(qǐng)求,則創(chuàng)建太多線程。
線程池的使用在這種場(chǎng)景下,將請(qǐng)求排隊(duì),并由線程池中的第一個(gè)可用線程來(lái)處理。通過(guò)限定池的大小,限制線程的最大數(shù),并因此限制服務(wù)器的負(fù)荷。
每個(gè)對(duì)象一個(gè)線程按照這一選項(xiàng),為每個(gè)對(duì)象維護(hù)一個(gè)或多個(gè)請(qǐng)求隊(duì)列。這一選項(xiàng)提供對(duì)象間的完全并行性,但是使得對(duì)每個(gè)單獨(dú)對(duì)象的訪問(wèn)串行化。
每個(gè)客戶機(jī)一個(gè)線程為每個(gè)客戶機(jī)維護(hù)一個(gè)請(qǐng)求隊(duì)列。這一選項(xiàng)通過(guò)控制分配給每個(gè)客戶機(jī)的線程資源數(shù)確保了客戶機(jī)的平等待遇。
J2EE服務(wù)器中的線程處理當(dāng)前在基于J2EE的事務(wù)和應(yīng)用服務(wù)器中使用的穿線策略的一個(gè)問(wèn)題是請(qǐng)求的概念或優(yōu)先級(jí)設(shè)定。盡管可以為了最大吞吐量而按照請(qǐng)求管理設(shè)計(jì)穿線策略,但是按照請(qǐng)求設(shè)定優(yōu)先級(jí)的選項(xiàng)很少。許多當(dāng)前的服務(wù)器產(chǎn)品使用線程池來(lái)從網(wǎng)絡(luò)的客戶機(jī)讀取請(qǐng)求。一旦將完整的請(qǐng)求讀入隊(duì)列中,就必須在服務(wù)器中調(diào)度執(zhí)行。但是很少允許開(kāi)發(fā)者在調(diào)度之前給完整的請(qǐng)求設(shè)定優(yōu)先級(jí)。
給請(qǐng)求設(shè)定優(yōu)先級(jí)是普遍期望的特征,但是很難實(shí)現(xiàn),因?yàn)閾?dān)心其增加了基礎(chǔ)服務(wù)器代碼的復(fù)雜性和其產(chǎn)生的諸如優(yōu)先級(jí)反轉(zhuǎn)的新問(wèn)題。多個(gè)隊(duì)列的增加將給軟件管理員或開(kāi)發(fā)者提供優(yōu)先級(jí)機(jī)制,其比真實(shí)的優(yōu)先級(jí)方案更好地處理這些擔(dān)心。
請(qǐng)求的節(jié)流是應(yīng)用服務(wù)器用戶普遍請(qǐng)求的另一個(gè)特征。這一般在部分工作量需要大量存儲(chǔ)器、CPU時(shí)間或其它資源的情況下請(qǐng)求。系統(tǒng)不能同時(shí)處理大量這樣的請(qǐng)求。
許多應(yīng)用服務(wù)器提供這樣的調(diào)度選項(xiàng),即允許在讀取請(qǐng)求的同一個(gè)線程中執(zhí)行該請(qǐng)求或?qū)⒃撜?qǐng)求列入饋送工作線程池的隊(duì)列中。利用這一配置,可以控制請(qǐng)求的服務(wù)參數(shù)的不同質(zhì)量。例如,可以通過(guò)在讀取請(qǐng)求的線程中直接執(zhí)行該請(qǐng)求從而跳過(guò)隊(duì)列,而使請(qǐng)求加速。或者,可以通過(guò)將一些請(qǐng)求分配給僅由有限數(shù)量的線程管理的隊(duì)列來(lái)對(duì)該請(qǐng)求進(jìn)行節(jié)流。
發(fā)明內(nèi)容
為了滿足上述要求,本發(fā)明的實(shí)施例提供了一種應(yīng)用服務(wù)器使用的系統(tǒng)或機(jī)制,其增強(qiáng)了服務(wù)器穿線模型,即分配線程以執(zhí)行工作請(qǐng)求的策略。本發(fā)明的實(shí)施例可以用于較寬范圍的應(yīng)用服務(wù)器,包括例如BEA系統(tǒng)公司,SanJose,California的WbeLogic服務(wù)器產(chǎn)品。設(shè)計(jì)為使用本發(fā)明實(shí)施例的應(yīng)用服務(wù)器或任何服務(wù)器采用一個(gè)使用多重線程池——包括異步池(有時(shí)稱為讀取線程)和同步池(有時(shí)稱為執(zhí)行線程)——的穿線模型。這種池的組合允許系統(tǒng)給請(qǐng)求設(shè)定優(yōu)先級(jí)。這一設(shè)計(jì)也成功地容許執(zhí)行阻塞操作的用戶代碼。
在本發(fā)明的一個(gè)實(shí)施例中,異步線程池在異步輸入機(jī)制(這里稱為多路復(fù)用器或復(fù)用器)上等待異步讀取結(jié)果變得可用。一旦有結(jié)果可用,來(lái)自池中的線程查看消息,并通過(guò)進(jìn)行適當(dāng)?shù)幕亟衼?lái)調(diào)度該消息。調(diào)度回叫通常對(duì)要求由同步線程池進(jìn)行后面的處理的請(qǐng)求進(jìn)行排隊(duì)。然而,某些非阻塞的有優(yōu)先級(jí)的請(qǐng)求在回叫中被直接服務(wù)。通過(guò)積極地接受輸入,在低優(yōu)先級(jí)的請(qǐng)求運(yùn)行的同時(shí),高優(yōu)先級(jí)的請(qǐng)求不等待被讀取。
同步線程池等待請(qǐng)求隊(duì)列。一旦有請(qǐng)求可用,來(lái)自同步池中的線程從隊(duì)列中取出該請(qǐng)求,對(duì)其進(jìn)行處理,并發(fā)出結(jié)果。在處理該請(qǐng)求的同時(shí),線程可以執(zhí)行代碼,例如發(fā)出結(jié)果,這導(dǎo)致線程阻塞。
異步輸出和異步響應(yīng)的加入減輕了一些進(jìn)行線程處理調(diào)節(jié)的需要,而這是傳統(tǒng)系統(tǒng)中的共同任務(wù)。此外,本發(fā)明的實(shí)施例還允許配置多重同步線程池,以便提供對(duì)不同請(qǐng)求類型的處理的更精細(xì)控制。
本發(fā)明的實(shí)施例還支持在單個(gè)服務(wù)器上提供多重執(zhí)行隊(duì)列的能力。這些隊(duì)列單獨(dú)地與當(dāng)前執(zhí)行隊(duì)列相似。每個(gè)執(zhí)行隊(duì)列具有分配來(lái)從隊(duì)列中帶動(dòng)工作的工作線程池。根據(jù)本發(fā)明的一個(gè)實(shí)施例,每個(gè)服務(wù)器具有一個(gè)默認(rèn)執(zhí)行隊(duì)列,以及零個(gè)或一個(gè)或多個(gè)自定義執(zhí)行隊(duì)列。多重隊(duì)列的加入提供了一些優(yōu)于傳統(tǒng)系統(tǒng)的優(yōu)點(diǎn),包括支持優(yōu)先級(jí)設(shè)定、節(jié)流請(qǐng)求以及減少隊(duì)列爭(zhēng)用??梢詾楦邇?yōu)先級(jí)和低優(yōu)先級(jí)的請(qǐng)求獨(dú)立地分配隊(duì)列。而系統(tǒng)管理員可以調(diào)節(jié)分配給這些隊(duì)列的線程數(shù),直到達(dá)到每一類工作所需要的吞吐量。
圖1展示了可以利用本發(fā)明實(shí)施例的J2EE兼容服務(wù)器體系結(jié)構(gòu)。
圖2展示了根據(jù)本發(fā)明實(shí)施例的穿線模型。
圖3展示了根據(jù)本發(fā)明實(shí)施例的多重調(diào)度隊(duì)列系統(tǒng)。
圖4展示了根據(jù)本發(fā)明實(shí)施例的多重線程調(diào)度系統(tǒng)。
圖5展示了根據(jù)本發(fā)明實(shí)施例的多重調(diào)度處理的流程圖。
具體實(shí)施例方式
經(jīng)過(guò)廣泛的描述,本發(fā)明的實(shí)施例提供了靈活調(diào)度策略系統(tǒng)的擴(kuò)展,用于事務(wù)、應(yīng)用以及消息接發(fā)服務(wù)器,特別地,用于RMI(遠(yuǎn)程方法調(diào)用)、EJB(企業(yè)Java豆)以及Servlet。并入了本發(fā)明實(shí)施例的應(yīng)用服務(wù)器、事務(wù)服務(wù)器或消息接發(fā)服務(wù)器(下文中都簡(jiǎn)單地統(tǒng)稱為應(yīng)用服務(wù)器)使用線程池來(lái)從網(wǎng)絡(luò)的客戶機(jī)讀取請(qǐng)求。一旦讀取了完整的請(qǐng)求,其必須在服務(wù)器中調(diào)度執(zhí)行。本發(fā)明的實(shí)施例提供了配置這一調(diào)度策略的能力。對(duì)于servlet,這以每個(gè)URL(統(tǒng)一資源定位符)為基礎(chǔ)進(jìn)行配置。對(duì)于RMI和EJB,該調(diào)度策略以每個(gè)方法為基礎(chǔ)進(jìn)行配置。
本發(fā)明的實(shí)施例提供的調(diào)度選項(xiàng)允許請(qǐng)求在和讀取該請(qǐng)求的同一線程中執(zhí)行,或者列入饋送工作線程池的隊(duì)列中。利用這一可變調(diào)度配置,可以控制請(qǐng)求的服務(wù)參數(shù)的不同質(zhì)量。例如,可以通過(guò)在讀取請(qǐng)求的線程中直接執(zhí)行該請(qǐng)求從而跳過(guò)隊(duì)列,來(lái)使請(qǐng)求加速。或者,可以通過(guò)將一些請(qǐng)求分配給僅由有限數(shù)量的線程管理的隊(duì)列來(lái)對(duì)這些請(qǐng)求進(jìn)行節(jié)流。
本發(fā)明的實(shí)施例提供了涉及應(yīng)用服務(wù)器消息接發(fā)的新特征,但是這些新特征可以用于任何需要一種消息接發(fā)的服務(wù)器類型。每個(gè)服務(wù)器設(shè)計(jì)的核心是穿線模型,即分配線程執(zhí)行工作請(qǐng)求的策略。根據(jù)本發(fā)明的實(shí)施例,服務(wù)器采用使用兩個(gè)線程池、即異步池(讀取線程)和同步池(執(zhí)行線程)的穿線模型。調(diào)度選項(xiàng)中池和靈活性的這種組合允許管理員有效地給請(qǐng)求設(shè)定優(yōu)先級(jí),同時(shí)容許執(zhí)行阻塞操作的用戶代碼。
圖2展示了本發(fā)明實(shí)施例提供的線程池206的圖解,其用于將請(qǐng)求發(fā)送到服務(wù)器資源205。服務(wù)器包括每個(gè)資源的配置信息,其確定特定資源使用的調(diào)度策略211。根據(jù)一個(gè)實(shí)施例,異步線程池208在異步輸入機(jī)制202(有時(shí)稱為多路復(fù)用器)上等待異步讀取結(jié)果變得可用。一旦有結(jié)果可用,來(lái)自池中的線程查看消息,并通過(guò)進(jìn)行適當(dāng)?shù)幕亟衼?lái)調(diào)度該消息。調(diào)度回叫通常將要求由同步線程池進(jìn)行后面處理的請(qǐng)求進(jìn)行排隊(duì)。然而,某些非阻塞的有優(yōu)先級(jí)的請(qǐng)求在回叫中被直接服務(wù)。通過(guò)允許異步線程池積極地接受輸入,在低優(yōu)先級(jí)請(qǐng)求216運(yùn)行的同時(shí),高優(yōu)先級(jí)請(qǐng)求212不等待被讀取。由于這些線程應(yīng)該從不阻塞,所以通常其數(shù)量較少,可能每個(gè)CPU只有一個(gè)。本發(fā)明的實(shí)施例額外地提供了異步線程池執(zhí)行網(wǎng)絡(luò)輸出操作的能力。在2001年10月5日提交的申請(qǐng)?zhí)枮?0/327,530、發(fā)明人為Adam Messinger和Don Ferguson的臨時(shí)專利申請(qǐng)“SYSTEM FOR APPLICATION SERVER MESSAGING WITHASYNCHRONOUS QUEUES(用于與異步隊(duì)列進(jìn)行消息接發(fā)的應(yīng)用服務(wù)器的系統(tǒng))”和2002年10月3日提交的申請(qǐng)?zhí)枮椋撸撸撸?、發(fā)明人為AdamMessinger、Sam Pullara和Dave Brown的實(shí)用新型專利申請(qǐng)“SYSTEM FORINTEGRATING JAVA SERVLETS WITH ASYNCHRONOUS MESSAGES(用于使Java小服務(wù)程序與異步消息結(jié)合的系統(tǒng))”中對(duì)這一具體特征進(jìn)行了更詳細(xì)的描述,通過(guò)引用將這兩個(gè)申請(qǐng)都合并于此。
如圖2所示,同步線程池210等待請(qǐng)求隊(duì)列204。一旦有請(qǐng)求可用,來(lái)自池中的線程從隊(duì)列中取出請(qǐng)求,對(duì)其進(jìn)行處理,并發(fā)出結(jié)果216到資源205。在處理請(qǐng)求的同時(shí),線程可以執(zhí)行代碼,例如發(fā)出結(jié)果,這導(dǎo)致線程阻塞。所以,應(yīng)該調(diào)節(jié)線程數(shù),以使得每個(gè)CPU中總有一個(gè)線程處于可運(yùn)行狀態(tài)。由于性能的原因服務(wù)器的適當(dāng)調(diào)節(jié)非常重要。本發(fā)明的實(shí)施例中使用的異步輸出和異步響應(yīng)的加入減輕了一些進(jìn)行這一調(diào)節(jié)的需要。本發(fā)明的實(shí)施例還給管理員提供了配置多重同步線程池的能力,以便提供對(duì)不同請(qǐng)求類型的處理進(jìn)行更精細(xì)的控制。
調(diào)度調(diào)度是取出服務(wù)器請(qǐng)求并將其發(fā)送到要服務(wù)的適當(dāng)?shù)胤降奶幚?。在可以使用本發(fā)明實(shí)施例的應(yīng)用服務(wù)器或服務(wù)器中,通常有兩種類型的調(diào)度,直接調(diào)度和排隊(duì)調(diào)度。服務(wù)器請(qǐng)求可以是來(lái)自服務(wù)器的任何信號(hào),包括例如從網(wǎng)絡(luò)讀取的輸入結(jié)果、時(shí)間觸發(fā)器、或一些其它工作片段的繼續(xù)。
在直接調(diào)度中,產(chǎn)生到來(lái)消息的線程也處理該消息。在調(diào)度線程處理請(qǐng)求時(shí),其不被其它線程所代替,因此要執(zhí)行的工作不會(huì)將調(diào)度線程阻塞任何顯著的時(shí)間量是非常重要的。例如,如果界面(socket)讀取線程是被阻塞的服務(wù)請(qǐng)求,則服務(wù)器將不能處理任何新來(lái)的消息,并對(duì)進(jìn)一步的輸入不做響應(yīng)。類似地,如果時(shí)間觸發(fā)器線程被阻塞,則服務(wù)器中重要的定時(shí)事件將不被遞送。因此,通常通過(guò)內(nèi)部API而使直接調(diào)度可用,并且直接調(diào)度僅用于高優(yōu)先級(jí)的系統(tǒng)級(jí)消息。
圖3展示了傳統(tǒng)的執(zhí)行隊(duì)列機(jī)制。如圖中所示,來(lái)自客戶機(jī)的指向諸如統(tǒng)一資源定位符(URL)或數(shù)據(jù)庫(kù)的特定資源的請(qǐng)求在執(zhí)行隊(duì)列304中排隊(duì)。一個(gè)或多個(gè)工作線程306、308或線程處理的集合從該隊(duì)列中檢索條目310,并面向該資源執(zhí)行該條目,向客戶機(jī)返回結(jié)果。這一機(jī)制的問(wèn)題在于隊(duì)列以先入先出方式操作,而無(wú)法給特定條目設(shè)定優(yōu)先級(jí),以使隊(duì)列中一個(gè)條目在另一個(gè)之前處理。
在排隊(duì)調(diào)度中,調(diào)度線程將到來(lái)消息放在隊(duì)列中,稍后使其從那里移出隊(duì)列,并由工作線程服務(wù)。在一些實(shí)施例中,只有一個(gè)執(zhí)行隊(duì)列,且只有一個(gè)執(zhí)行線程池被分配來(lái)使請(qǐng)求從隊(duì)列中出列,并服務(wù)該請(qǐng)求。其它實(shí)施例可以使用多重執(zhí)行隊(duì)列。盡管隊(duì)列長(zhǎng)度無(wú)限制時(shí)必須小心避免存儲(chǔ)器使用的問(wèn)題,但是隊(duì)列長(zhǎng)度可以有限制或無(wú)限制。通常將所有用戶請(qǐng)求調(diào)度到隊(duì)列中,而不直接指向隊(duì)列。
多重隊(duì)列圖4展示了如何使用本發(fā)明實(shí)施例中提供的多重隊(duì)列來(lái)建立調(diào)度策略。如圖4所示,將來(lái)自客戶機(jī)的請(qǐng)求發(fā)送到從多個(gè)隊(duì)列界面402、404、406中選擇的隊(duì)列界面。這些界面并行操作,允許一個(gè)界面上的條目與另一個(gè)界面上的條目同時(shí)或在其之前執(zhí)行。這一分離和并行的操作允許系統(tǒng)給請(qǐng)求設(shè)定優(yōu)先級(jí)。使用一個(gè)或多個(gè)異步線程412、414、416的集合來(lái)對(duì)該界面請(qǐng)求進(jìn)行服務(wù),并提供訪問(wèn)資源的入口。異步線程組(例如412和414)可以在界面組(例如404和406)之間被共享?;蛘呓缑?02可以具有專用線程416,供該界面內(nèi)特定請(qǐng)求的可靠或高優(yōu)先級(jí)服務(wù)使用。體現(xiàn)或并入了本發(fā)明實(shí)施例的應(yīng)用服務(wù)器支持在單個(gè)服務(wù)器上具有多重執(zhí)行隊(duì)列的能力。通常,每個(gè)執(zhí)行隊(duì)列具有分配來(lái)從隊(duì)列中帶動(dòng)工作的工作線程池。在一個(gè)實(shí)施例中,每個(gè)服務(wù)器具有一個(gè)默認(rèn)執(zhí)行隊(duì)列,零個(gè)或一個(gè)或多個(gè)自定義執(zhí)行隊(duì)列。多重隊(duì)列的加入提供了一些優(yōu)點(diǎn),包括支持優(yōu)先級(jí)設(shè)定、節(jié)流請(qǐng)求以及減少隊(duì)列爭(zhēng)用。
為請(qǐng)求設(shè)定優(yōu)先級(jí)如上所述,為請(qǐng)求設(shè)定優(yōu)先級(jí)是普遍期望的特征。傳統(tǒng)上,這是難于解決的領(lǐng)域,因?yàn)閾?dān)心可能增加基礎(chǔ)代碼的復(fù)雜性和可能產(chǎn)生諸如優(yōu)先級(jí)反轉(zhuǎn)的附加問(wèn)題。如在本發(fā)明實(shí)施例中所使用,多重隊(duì)列的加入提供了比“真實(shí)的”優(yōu)先級(jí)機(jī)制更好地處理這些擔(dān)心的優(yōu)先級(jí)機(jī)制。如果管理員如此期望,則可以獨(dú)立地為高優(yōu)先級(jí)和低優(yōu)先級(jí)請(qǐng)求分配隊(duì)列。然后管理員可以調(diào)節(jié)分配給這些隊(duì)列的線程數(shù),直到達(dá)到每一工作類所需要的吞吐量。
請(qǐng)求節(jié)流請(qǐng)求的節(jié)流是應(yīng)用服務(wù)器用戶普遍請(qǐng)求的特征。在部分工作量需要大量存儲(chǔ)器、CPU時(shí)間或其它資源的那些情況下,節(jié)流是重要的。通常,系統(tǒng)不能同時(shí)處理大量這樣的請(qǐng)求。本發(fā)明的實(shí)施例提供了請(qǐng)求節(jié)流機(jī)制,即,所有這些類型的請(qǐng)求都可以發(fā)送到配置有適當(dāng)數(shù)量的線程的隊(duì)列,以保證節(jié)約系統(tǒng)資源。
隊(duì)列爭(zhēng)用的減少隊(duì)列爭(zhēng)用是服務(wù)多重短請(qǐng)求的重負(fù)荷系統(tǒng)的基準(zhǔn)程序中的問(wèn)題。本發(fā)明的實(shí)施例提供通過(guò)將工作量分?jǐn)偟綆讉€(gè)隊(duì)列上而成功解決這一問(wèn)題的機(jī)制,可以減少隊(duì)列爭(zhēng)用。請(qǐng)求按照使吞吐量最大化的方式跨多個(gè)隊(duì)列分布。
圖5展示了根據(jù)本發(fā)明實(shí)施例的多重隊(duì)列調(diào)度策略的流程圖。如圖中所示,在步驟502,服務(wù)器接收訪問(wèn)特定資源的請(qǐng)求。這可以是訪問(wèn)例如特定服務(wù)器、URL或數(shù)據(jù)庫(kù)的請(qǐng)求。在步驟504,調(diào)度線程將該請(qǐng)求放在多重消息隊(duì)列或界面中的一個(gè)上。在步驟506,提供默認(rèn)執(zhí)行隊(duì)列和多重自定義執(zhí)行隊(duì)列的組合使系統(tǒng)或系統(tǒng)管理員可以通過(guò)指定將該請(qǐng)求放在哪個(gè)界面或隊(duì)列中來(lái)給該請(qǐng)求設(shè)定優(yōu)先權(quán)。在步驟508,工作線程從適當(dāng)?shù)南㈥?duì)列中檢索請(qǐng)求,并在步驟510,在服務(wù)器處理該請(qǐng)求,并將結(jié)果返回客戶機(jī)。
RMI和HTTP實(shí)現(xiàn)根據(jù)本發(fā)明的一個(gè)實(shí)施例,典型的遠(yuǎn)程方法調(diào)用(RMI)實(shí)現(xiàn)適于利用多重隊(duì)列。RMI描述符被一般化為允許設(shè)置每方法排隊(duì)策略。這一功能提供了指定直接或排隊(duì)調(diào)度的機(jī)制。在使用Java虛擬機(jī)(JVM)的一個(gè)實(shí)施例中,將RequestDispatcher(請(qǐng)求調(diào)度器)消息調(diào)度到RJVM級(jí)。然后RJVM查詢其RuntimeDescriptor(運(yùn)行時(shí)間描述符),并確定對(duì)該請(qǐng)求應(yīng)當(dāng)使用哪個(gè)調(diào)度策略。
使servlet實(shí)現(xiàn)適用于利用多重隊(duì)列可以相似地執(zhí)行。在一個(gè)實(shí)施例中,描述調(diào)度策略的元數(shù)據(jù)可以位于servlet的調(diào)度描述符中。請(qǐng)求通常排隊(duì)的點(diǎn)就是確定要調(diào)用的servlet的點(diǎn)。在這一點(diǎn)上,可以確定適當(dāng)?shù)恼{(diào)度策略,并采取適當(dāng)?shù)男袆?dòng)。HTTP隧道機(jī)制也可以修改為使用這一機(jī)制。在一些實(shí)現(xiàn)中,定時(shí)服務(wù)可以適應(yīng)于利用多重隊(duì)列。也可以對(duì)任何API進(jìn)行添加,以允許調(diào)度策略的規(guī)范有特定的定時(shí)器。這可以與當(dāng)前在定時(shí)線程中直接為觸發(fā)器服務(wù)的直接調(diào)度機(jī)制結(jié)合。
在特定的應(yīng)用服務(wù)器中,幾個(gè)內(nèi)部實(shí)現(xiàn)使用排好隊(duì)的調(diào)度來(lái)處理輔助當(dāng)前處理的請(qǐng)求的工作。這經(jīng)常進(jìn)行,以防止鎖定保持得比需要的要長(zhǎng),但是通過(guò)多重隊(duì)列的加入,也可以通過(guò)將該輔助請(qǐng)求排隊(duì)到一不同隊(duì)列中,來(lái)區(qū)分工作優(yōu)先級(jí)。
另外,許多用戶請(qǐng)求執(zhí)行這一相同的排隊(duì)調(diào)度輔助請(qǐng)求的能力。在本發(fā)明的一個(gè)實(shí)施例中,允許用戶在指定的隊(duì)列中排入java.lang.Runnable函數(shù)。然后將該Runnable(可運(yùn)行)包裹在ExecuteRequest中,并放在期望的隊(duì)列中。
配置執(zhí)行隊(duì)列和線程池為了允許執(zhí)行隊(duì)列和線程池的配置,本發(fā)明的實(shí)施例提供了一組命令和語(yǔ)法。下面的部分提供了對(duì)配置servlet、jsp、ejb以及rmi對(duì)象的指導(dǎo),以根據(jù)本發(fā)明的實(shí)施例使用這些池。顯然,本發(fā)明的實(shí)施例不限于下面為了說(shuō)明的目的而描述的特定實(shí)現(xiàn),而是可以用于其它實(shí)現(xiàn)和其它應(yīng)用服務(wù)器或服務(wù)器。
配置執(zhí)行隊(duì)列在服務(wù)器配置(例如config.xml文件)中,開(kāi)發(fā)者可以通過(guò)服務(wù)器配置中的“ExecuteQueues”標(biāo)記來(lái)定義ExecuteQueues集合,例如<ServerName=“myserver”NativeIOEnabled=“true”ListenPort=“7701”ExecuteQueues=“testqueue”>
<ExecuteQueueName=“testqueue”ThreadCount=“4”/>
上面給出的例子將導(dǎo)致產(chǎn)生名為testqueue的執(zhí)行隊(duì)列,其具有四(4)個(gè)執(zhí)行線程的關(guān)聯(lián)池。
配置Servlet以使用ExecuteQueue為了配置servlet,開(kāi)發(fā)者或管理員可以使用servlet初始化(init)參數(shù),例如通過(guò)使用web.xml文件來(lái)配置的系統(tǒng)中的標(biāo)記“wl-dispatch-policy(wl調(diào)度策略)”,來(lái)設(shè)置隊(duì)列名稱。web.xml文件包含init-param(初始化參數(shù))部分,入下面所示的示例<servlet>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>testqueue</param-value>
<description>Queue to use for processing requests to this servlet<description>
</init-param>
</servlet>
配置JSP以使用ExecuteQueue可以象servlet一樣登記JSP。下面的代碼例子給出了登記使用名為“testqueue”的隊(duì)列的JSP<servlet>
<servlet-name>foo</servlet-name>
<jsp-file>/myapp/foo.jsp</jsp-file>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>testqueue</param-value>
</init-param>
</servlet>
配置EJB和RMI以使用ExecuteQueueEJBC和RMIC可以修改為采用dispatchPolicy(調(diào)度策略)標(biāo)記,以允許調(diào)度策略或命令行的配置,即Java weblogic.rmic-dispatchPolicy testqueue...
Java weblogic.ejbc-dispatchPolicy testqueue...
優(yōu)先級(jí)設(shè)定和服務(wù)質(zhì)量本發(fā)明一些實(shí)施例允許設(shè)定特定線程池中線程的優(yōu)先級(jí)。然而,根據(jù)本發(fā)明的一個(gè)實(shí)施例,沒(méi)有提供允許該配置來(lái)設(shè)定池中線程的優(yōu)先級(jí)的機(jī)制。這是有意圖的,因?yàn)榫€程調(diào)度的語(yǔ)義隨平臺(tái)而改變,而且如果所有執(zhí)行線程具有相同的優(yōu)先級(jí),則系統(tǒng)不太可能遇到資源缺乏/優(yōu)先級(jí)反轉(zhuǎn)的問(wèn)題。然而,仍可以將高優(yōu)先級(jí)的通信調(diào)度到較少使用的隊(duì)列,或者調(diào)度到具有大量執(zhí)行線程的隊(duì)列,并實(shí)現(xiàn)在不明顯地使用線程優(yōu)先級(jí)的情況下更快地為高優(yōu)先級(jí)請(qǐng)求進(jìn)行服務(wù)的目的。
與優(yōu)先級(jí)設(shè)定密切相關(guān)的主題是服務(wù)質(zhì)量(QOS)。使用該調(diào)度策略,可以確保一定類型的請(qǐng)求將具有一定數(shù)量的線程。如果有一些類型的請(qǐng)求必須以固定的速率繼續(xù)處理,而不管機(jī)器上的任何其它負(fù)荷,則這將是有用的。
死鎖的避免使用分離的執(zhí)行隊(duì)列的很好原因是避免死鎖條件。當(dāng)對(duì)請(qǐng)求的服務(wù)要求附加的執(zhí)行請(qǐng)求來(lái)完成時(shí),可以為該附加的請(qǐng)求配置分離的隊(duì)列。例如,考慮servlet“a”從JMS隊(duì)列“b”中進(jìn)行讀取的情況。如果所有服務(wù)器的執(zhí)行線程都在執(zhí)行servlet“a”,則將沒(méi)有剩余的執(zhí)行線程來(lái)從隊(duì)列“b”遞送消息,因此不能進(jìn)行任何工作。這一情況可以通過(guò)為servlet“a”定義分離的隊(duì)列而避免。
吞吐量的節(jié)流和優(yōu)化使用分離隊(duì)列的另一個(gè)很好的原因是對(duì)使用一些固定資源池的請(qǐng)求進(jìn)行節(jié)流。例如,如果特定的作業(yè)使用大量存儲(chǔ)器,則將其調(diào)度到具有有限數(shù)量的關(guān)聯(lián)線程的隊(duì)列中可能更好。以這種方式,系統(tǒng)可以限制同時(shí)運(yùn)行的這種類型作業(yè)的最大數(shù)量,并使服務(wù)器耗盡存儲(chǔ)器的任何風(fēng)險(xiǎn)最小化。
相關(guān)使用是將這些來(lái)自一個(gè)特定的池中的需要訪問(wèn)資源的請(qǐng)求與不需要訪問(wèn)的另一個(gè)池中的那些請(qǐng)求分離開(kāi)來(lái)。例如,考慮服務(wù)器為兩個(gè)EJB服務(wù)的情況。EJB“a”使用連接池來(lái)訪問(wèn)數(shù)據(jù)庫(kù),而EJB“b”僅執(zhí)行一些存儲(chǔ)器內(nèi)的工作(或者可能使用不同的池)。如果線程數(shù)大于池中的連接數(shù),則系統(tǒng)可能遭遇一種情況,其中在處理對(duì)“a”的請(qǐng)求時(shí),一些線程嘗試從池中得到連接而被阻塞。同時(shí),隊(duì)列中可能有其它對(duì)“b”的請(qǐng)求,只要有自由的執(zhí)行線程,其就可能繼續(xù)下去。通過(guò)將“a”和“b”請(qǐng)求調(diào)度到不同的隊(duì)列,可以避免這種情況。
性能考慮具有多重執(zhí)行隊(duì)列是非常有用的工具,但是必須小心使用或配置。管理員必須考慮到一些事情,包括資源使用的浪費(fèi)因?yàn)榻o每個(gè)隊(duì)列分配了固定數(shù)量的線程,有可能有許多線程什么也不做,而其它隊(duì)列上的請(qǐng)求處于空閑。線程不是廉價(jià)的資源,因此應(yīng)當(dāng)避免分配超額的線程。
活鎖和優(yōu)先級(jí)反轉(zhuǎn)盡管如上所述,對(duì)分離隊(duì)列的明智使用可以減少死鎖的幾率,但是其還引入一種新的可能的問(wèn)題,而其可能非常難于除去。作為不重要的例子,有可能從同一個(gè)客戶機(jī)向同一個(gè)服務(wù)器發(fā)出兩個(gè)遠(yuǎn)程呼叫,但是這兩個(gè)遠(yuǎn)程呼叫調(diào)度到分離的隊(duì)列,則會(huì)返回與預(yù)期不同的順序。
前面對(duì)本發(fā)明的描述是為了說(shuō)明和描述的目的而提供的。其并不打算窮盡,或?qū)⒈景l(fā)明限定為所公開(kāi)的精確形式。顯然,許多修改和變更對(duì)本領(lǐng)域技術(shù)人員是顯而易見(jiàn)的。選用和描述實(shí)施例是為了最佳地說(shuō)明本發(fā)明的原理及其實(shí)踐應(yīng)用,從而使本領(lǐng)域技術(shù)人員能夠明白本發(fā)明適用于預(yù)想的特定用途的不同的實(shí)施例和各種修改。期望本發(fā)明的范圍由所附權(quán)利要求及其等價(jià)物限定。
權(quán)利要求
1.一種用于接收和處理來(lái)自客戶機(jī)應(yīng)用程序的對(duì)服務(wù)器資源的請(qǐng)求的系統(tǒng),包括服務(wù)器請(qǐng)求接口,用于接收來(lái)自客戶機(jī)的、訪問(wèn)服務(wù)器資源的請(qǐng)求;多個(gè)執(zhí)行隊(duì)列,配置為對(duì)訪問(wèn)服務(wù)器資源的請(qǐng)求排隊(duì);以及調(diào)度策略,以每個(gè)資源為基礎(chǔ)進(jìn)行配置,以在所述隊(duì)列中選定的一個(gè)上排隊(duì)指定請(qǐng)求。
2.如權(quán)利要求1所述的系統(tǒng),其中該請(qǐng)求指定在訪問(wèn)資源時(shí)要提供給客戶機(jī)應(yīng)用程序的服務(wù)質(zhì)量。
3.如權(quán)利要求1所述的系統(tǒng),其中使用線程來(lái)為所述隊(duì)列服務(wù)。
4.如權(quán)利要求1所述的系統(tǒng),其中可以在配置文件中為每個(gè)資源配置多重隊(duì)列。
5.如權(quán)利要求1所述的系統(tǒng),其中所述服務(wù)器通過(guò)調(diào)度策略來(lái)指定是直接調(diào)度還是排隊(duì)調(diào)度。
6.如權(quán)利要求1所述的系統(tǒng),其中所述資源是小服務(wù)程序。
7.如權(quán)利要求1所述的系統(tǒng),其中所述資源是Java小服務(wù)程序頁(yè)面。
8.如權(quán)利要求1所述的系統(tǒng),其中所述資源與特定的隊(duì)列名相關(guān)聯(lián)。
9.如權(quán)利要求1所述的系統(tǒng),其中每個(gè)隊(duì)列具有多個(gè)關(guān)聯(lián)線程,其線程數(shù)可以配置為考慮到與該隊(duì)列關(guān)聯(lián)的請(qǐng)求的優(yōu)先級(jí)。
10.如權(quán)利要求1所述的系統(tǒng),其中所述多個(gè)執(zhí)行隊(duì)列使用異步線程池和同步線程池。
11.一種用于接收和處理來(lái)自客戶機(jī)應(yīng)用程序的對(duì)服務(wù)器資源的請(qǐng)求的方法,包括以下步驟接收來(lái)自客戶機(jī)的、訪問(wèn)服務(wù)器資源的請(qǐng)求;將該請(qǐng)求在多個(gè)可以配置為對(duì)訪問(wèn)服務(wù)器資源的請(qǐng)求進(jìn)行排隊(duì)的執(zhí)行隊(duì)列中的一個(gè)上進(jìn)行排隊(duì),這是根據(jù)可以以每個(gè)資源為基礎(chǔ)進(jìn)行配置以在所述隊(duì)列中選定的一個(gè)上排列指定請(qǐng)求的調(diào)度策略進(jìn)行的。
12.如權(quán)利要求11所述的方法,其中該請(qǐng)求指定在訪問(wèn)資源時(shí)要提供給客戶機(jī)應(yīng)用程序的服務(wù)質(zhì)量。
13.如權(quán)利要求11所述的方法,其中使用線程來(lái)為隊(duì)列服務(wù)。
14.如權(quán)利要求11所述的方法,其中可以在配置文件中為每個(gè)資源配置多重隊(duì)列。
15.如權(quán)利要求11所述的方法,其中客戶機(jī)應(yīng)用程序指定是直接調(diào)度還是排隊(duì)調(diào)度。
16.如權(quán)利要求11所述的方法,其中所述資源是小服務(wù)程序。
17.如權(quán)利要求11所述的方法,其中所述資源是Java小服務(wù)程序頁(yè)面。
18.如權(quán)利要求11所述的方法,其中所述資源與特定的隊(duì)列名相關(guān)聯(lián)。
19.如權(quán)利要求11所述的方法,其中每個(gè)隊(duì)列具有多個(gè)關(guān)聯(lián)線程,其線程數(shù)可以配置為考慮到與該隊(duì)列關(guān)聯(lián)的請(qǐng)求的優(yōu)先級(jí)。
20.如權(quán)利要求11所述的方法,其中多個(gè)執(zhí)行隊(duì)列使用異步線程池和同步線程池。
全文摘要
本發(fā)明的實(shí)施例提供了在應(yīng)用或事務(wù)服務(wù)器中配置調(diào)度策略的能力。對(duì)于servlet和JSP而言,以每個(gè)URL(統(tǒng)一資源定位符)為基礎(chǔ)進(jìn)行配置,對(duì)于RMI和EJB而言,以每個(gè)方法為基礎(chǔ)進(jìn)行配置??捎谜{(diào)度選項(xiàng)包括在讀取請(qǐng)求的同一個(gè)線程中執(zhí)行該請(qǐng)求、或?qū)⑵淞腥腽佀凸ぷ骶€程池的隊(duì)列中的能力。利用這一配置,可以控制請(qǐng)求的服務(wù)參數(shù)的不同質(zhì)量??梢酝ㄟ^(guò)在讀取請(qǐng)求的線程中直接執(zhí)行該請(qǐng)求從而跳過(guò)隊(duì)列,而使請(qǐng)求加速。或者,可以通過(guò)將一些請(qǐng)求分配給僅由有限數(shù)量的線程管理的隊(duì)列來(lái)對(duì)其進(jìn)行節(jié)流。
文檔編號(hào)G06F9/46GK1589442SQ02822872
公開(kāi)日2005年3月2日 申請(qǐng)日期2002年10月4日 優(yōu)先權(quán)日2001年10月5日
發(fā)明者亞當(dāng)·梅辛杰, 唐·弗格森 申請(qǐng)人:Bea系統(tǒng)公司