專利名稱::用于執(zhí)行動(dòng)態(tài)軟件版本選擇的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明的各方面一般地涉及軟件版本選擇,更具體地說,涉及在版本更改期間,以對(duì)支持的過程或服務(wù)干擾最小或無干擾的方式動(dòng)態(tài)地選擇軟件版本。
背景技術(shù):
:中間件可使一臺(tái)或多臺(tái)機(jī)器上運(yùn)行的多個(gè)進(jìn)程進(jìn)行交互。因此,中間件在支持諸如事務(wù)處理系統(tǒng)與消息傳遞和排隊(duì)系統(tǒng)之類的復(fù)雜分布式應(yīng)用方面非常有用。作為一個(gè)實(shí)例,形式為聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)的中間件經(jīng)常用于支持關(guān)鍵業(yè)務(wù)過程和服務(wù)。例如,聯(lián)機(jī)事務(wù)處理系統(tǒng)可用于便利和管理在訂單錄入系統(tǒng)中捕獲新數(shù)據(jù),更新現(xiàn)有數(shù)據(jù),處理數(shù)據(jù)錄入和檢索等的面向事務(wù)的應(yīng)用。作為另一示例,形式為消息排隊(duì)系統(tǒng)的中間件可用于通過將應(yīng)用特定的消息寫入隊(duì)列以及從隊(duì)列檢索這些消息來便利程序間通信,而不需要通信程序之間具有專門的邏輯連接。包括現(xiàn)代OLTP系統(tǒng)、消息和排隊(duì)系統(tǒng)等的中間件一般支持跨網(wǎng)絡(luò)的事務(wù)并且可以跨由不同實(shí)體控制的一個(gè)或多個(gè)域。因此,諸如OLTP應(yīng)用與消息和排隊(duì)?wèi)?yīng)用之類的中間件應(yīng)用通常使用允許事務(wù)在網(wǎng)絡(luò)內(nèi)的不同計(jì)算機(jī)平臺(tái)上運(yùn)行的客戶機(jī)/服務(wù)器處理和代理操作(brokering)來實(shí)現(xiàn)。因此,對(duì)此類中間件系統(tǒng)的軟件升級(jí)通常需要關(guān)閉應(yīng)用,從而使關(guān)聯(lián)的應(yīng)用脫機(jī)以允許進(jìn)行軟件安裝和必要時(shí)的配置。
發(fā)明內(nèi)容根據(jù)本發(fā)明的方面,動(dòng)態(tài)軟件版本選擇通過將綁定庫與軟件組件進(jìn)行關(guān)聯(lián)來執(zhí)行。所述綁定庫包括加載器組件和綁定組件,其中所述加載器組件充當(dāng)軟件組件和綁定組件之間的中介(intermediary),且所述綁定組件包括軟件組件端邏輯。動(dòng)態(tài)軟件版本選擇進(jìn)一步包括由加載器組件識(shí)別觸發(fā)器,以將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器,以及由加載器組件選擇所需庫版本,其中所需庫版本是從與綁定庫的綁定組件關(guān)聯(lián)的至少兩個(gè)庫版本中選擇的。仍進(jìn)一步地,動(dòng)態(tài)軟件版本選擇包括在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下,將所需庫版本加載到計(jì)算機(jī)處理系統(tǒng)的存儲(chǔ)器。例如,加載器組件所作的加載所需庫版本的判定可以由控制過程所填充的庫版本表或其他源控制。圖1是根據(jù)本發(fā)明的方面用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)的示意圖。圖2是示出根據(jù)本發(fā)明的方面用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的示例性方法的流程圖。圖3是根據(jù)本發(fā)明的方面用于在消息傳遞系統(tǒng)環(huán)境的示例性上下文中實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)的示意圖。圖4是根據(jù)本發(fā)明的方面使用共享庫版本表的用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)的示意圖。圖5是根據(jù)本發(fā)明的方面使用共享庫版本表和共享程序版本表的用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)的示意圖。圖6是具有用于實(shí)現(xiàn)如本文詳細(xì)描述的根據(jù)本發(fā)明的方面的功能的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的計(jì)算機(jī)系統(tǒng)的方塊圖。具體實(shí)施例方式本發(fā)明的各方面提供了能夠在不關(guān)閉軟件系統(tǒng)或不以其他方式中斷服務(wù)的情況下通過新軟件修改軟件系統(tǒng)的技術(shù)。軟件修改包括,例如,實(shí)現(xiàn)軟件升級(jí),恢復(fù)到早期軟件版本,重新加載軟件版本,修復(fù)或修補(bǔ)軟件版本等。因此,提供了能夠在不發(fā)生中斷的情況下通過新軟件升級(jí)的軟件系統(tǒng),所述新軟件例如包含對(duì)已知問題的修復(fù)和/或新功能,并且其部件可使用諸如服務(wù)等級(jí)之類的不同軟件版本等。軟件系統(tǒng)還可以回退到早期版本。此外,還可以通過新軟件修改客戶端系統(tǒng)和服務(wù)器端系統(tǒng)兩者。進(jìn)一步地,此處描述的本發(fā)明的各方面提供了在持續(xù)運(yùn)行的進(jìn)程內(nèi)的應(yīng)用編程接口(API)邊界上管理版本化實(shí)現(xiàn),從而不需要針對(duì)關(guān)聯(lián)的軟件代碼進(jìn)行任何進(jìn)程重新啟動(dòng)。在不重新啟動(dòng)進(jìn)程的情況下實(shí)施更新的能力甚至可以在進(jìn)程為不受用于執(zhí)行軟件修改的更新機(jī)制控制的第三方應(yīng)用(例如,客戶應(yīng)用)的情況下實(shí)現(xiàn)。因此,很容易實(shí)現(xiàn)本機(jī)代碼庫的運(yùn)行時(shí)更新和修改。而且,更新機(jī)制可以實(shí)現(xiàn)動(dòng)態(tài)內(nèi)部狀態(tài)處理以允許在運(yùn)行進(jìn)程之下的函數(shù)庫版本轉(zhuǎn)換,例如,在使用動(dòng)態(tài)鏈接庫的系統(tǒng)中的這種函數(shù)庫版本轉(zhuǎn)換。更進(jìn)一步地,本發(fā)明的方面提供了更新機(jī)制,此機(jī)制便利了做出和控制遷移判定(例如,如何以及何時(shí)升級(jí)、降級(jí)或以其他方式替換可能存儲(chǔ)在庫中的軟件代碼)的能力。因此,此更新機(jī)制可以表現(xiàn)出動(dòng)態(tài)行為,從而提供了軟件版本修改過程和判定的靈活性。而且,此更新機(jī)制可以例如逐程序地或基于其他選擇標(biāo)準(zhǔn)實(shí)現(xiàn)選擇性軟件版本控制。根據(jù)本發(fā)明的更進(jìn)一步的方面,此更新機(jī)制可以包括與軟件組件(調(diào)用組件)關(guān)聯(lián)的綁定庫。通過這種方式,調(diào)用組件不時(shí)地調(diào)用綁定庫以實(shí)現(xiàn)應(yīng)用編程接口(API)調(diào)用。綁定庫實(shí)現(xiàn)為加載器組件和綁定組件。加載器組件充當(dāng)中介以從軟件組件接收調(diào)用并將等效的API調(diào)用發(fā)送到綁定組件。綁定組件包括軟件組件端邏輯,所述邏輯包括至少兩個(gè)庫版本。每個(gè)庫版本都包括用于對(duì)來自調(diào)用組件的應(yīng)用編程接口調(diào)用做出響應(yīng)的邏輯。加載器組件識(shí)別或以其他方式檢測到觸發(fā)器,并且作為對(duì)此的響應(yīng),實(shí)現(xiàn)判定邏輯。所述判定邏輯可以檢查是否存在新的庫版本,檢測應(yīng)該加載的所需庫版本,引導(dǎo)加載器組件從綁定組件選擇所需的庫版本并將所述庫版本加載到處理設(shè)備的存儲(chǔ)器等。如果要替換加載到存儲(chǔ)器的庫版本,則在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下卸載舊的庫版本并加載新的庫版本。例如,在第一說明性示例中,僅僅選擇的API調(diào)用(例如,連接/斷開連接(或類似操作)API)具有導(dǎo)致庫版本重新加載的判定邏輯。因此,可以響應(yīng)于從關(guān)聯(lián)的軟件組件接收到一個(gè)或多個(gè)特定命令(例如,連接和斷開連接API調(diào)用),觸發(fā)加載器組件以檢查加載到存儲(chǔ)器的庫版本,以及在必要時(shí)更新版本。如將在此更詳細(xì)地描述那樣,在該說明示例中,不需要狀態(tài)遷移來實(shí)現(xiàn)庫版本重新加載。作為另一說明性示例,所有對(duì)加載器組件的API調(diào)用都具有判定邏輯。因此,響應(yīng)于從關(guān)聯(lián)的軟件組件接收任何API調(diào)用,觸發(fā)加載器組件以檢查加載到存儲(chǔ)器的庫版本,以及在必要時(shí)更新版本。如將在此更詳細(xì)地描述那樣,在該說明性示例中,應(yīng)該支持狀態(tài)遷移。仍進(jìn)一步地,無論是僅選擇的API調(diào)用具有觸發(fā)庫版本檢查的判定邏輯,還是所有API調(diào)用都具有觸發(fā)庫版本檢查的判定邏輯,加載器組件都可支持程序級(jí)控制或程序特定的控制,以允許響應(yīng)于接收的API調(diào)用,控制哪些程序?qū)⑦w移庫版本,哪些不遷移庫版本。動(dòng)杰軟件版本詵擇現(xiàn)在參考附圖,具體為參考圖1,其示出了適合于根據(jù)本發(fā)明的方面實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)100的示意圖。系統(tǒng)100可以在單個(gè)物理處理設(shè)備上實(shí)施。替代地,系統(tǒng)100可以跨諸如通過網(wǎng)絡(luò)以通信的方式連接在一起的多個(gè)物理處理設(shè)備分布。在此方面,每個(gè)處理設(shè)備都可以包括用于實(shí)現(xiàn)此處更詳細(xì)地描述的本發(fā)明的方面的硬件和/或軟件處理組件。如圖所示,系統(tǒng)100包括至少一個(gè)軟件組件102和關(guān)聯(lián)的綁定庫104。軟件組件102可以包括例如調(diào)用另一組件(例如,關(guān)聯(lián)的綁定庫104)的服務(wù)的任何軟件。軟件組件102可以例如實(shí)現(xiàn)為軟件應(yīng)用、程序、對(duì)象、服務(wù)、代理(agent)、操作系統(tǒng)等。在此方面,軟件組件102在此還可以被稱為調(diào)用組件102。綁定庫104實(shí)現(xiàn)為兩個(gè)組件,包括加載器組件106和綁定組件108。加載器組件106與軟件組件102和綁定組件108進(jìn)行交互以將綁定組件的關(guān)聯(lián)庫的正確版本加載到存儲(chǔ)器110。加載器組件106還可以可選地與一個(gè)或多個(gè)可選的信息源112進(jìn)行交互,所述信息源可被提供以幫助進(jìn)行版本管理。例如,如將在此更詳細(xì)地描述那樣,信息源112可以實(shí)現(xiàn)為指示綁定組件108所維護(hù)的關(guān)聯(lián)庫的當(dāng)前版本的表,該表可以存儲(chǔ)在存儲(chǔ)器110中,也可以作為單獨(dú)文件。綁定組件108包括一個(gè)或多個(gè)庫版本,其包含軟件組件端邏輯,包括至少兩個(gè)庫版本。每個(gè)庫版本都包括對(duì)來自調(diào)用組件102的應(yīng)用編程接口(API)調(diào)用做出響應(yīng)的邏輯。如在此使用的,術(shù)語“庫”旨在是一般性的和非限制性的。例如,每個(gè)“庫”版本都可以包括任何相關(guān)的軟件封裝單元,例如,jar文件、程序、模塊、動(dòng)態(tài)鏈接庫等。而且,每個(gè)庫版本都不限于本機(jī)代碼庫,因此可以用于諸如Java的實(shí)現(xiàn)。加載器組件106充當(dāng)軟件組件102和綁定庫104的綁定組件108之間的中介。在此方面,加載器組件106可以是與軟件組件102靜態(tài)鏈接的唯一組件。根據(jù)本發(fā)明的方面,加載器組件106可以實(shí)現(xiàn)為庫本身。在該示例性實(shí)現(xiàn)中,加載器組件106主要作為轉(zhuǎn)發(fā)庫發(fā)揮功能。也就是說,在多數(shù)時(shí)間,加載器組件106從軟件組件102接受API調(diào)用并作為對(duì)此的響應(yīng),在與綁定庫108關(guān)聯(lián)的當(dāng)前加載的庫版本中調(diào)用等效的API。根據(jù)本發(fā)明的進(jìn)一步的方面,判定邏輯可以被插入從加載器組件106到適當(dāng)?shù)慕壎ńM件108的庫的轉(zhuǎn)發(fā)功能的執(zhí)行路徑中。哪些轉(zhuǎn)發(fā)功能應(yīng)該具有判定邏輯以及哪些轉(zhuǎn)發(fā)功能不應(yīng)具有判定邏輯的選擇取決于特定實(shí)現(xiàn),下面將更詳細(xì)地描述所述特定實(shí)現(xiàn)的示例。綁定組件108包括一個(gè)或多個(gè)庫版本。例如,如圖所示,綁定組件108包括“N”個(gè)庫版本,其中N可以表示任意的庫版本數(shù)量。每個(gè)庫版本可以包括,例如,提供軟件組件端邏輯的動(dòng)態(tài)鏈接庫,軟件組件102使用此軟件組件端邏輯執(zhí)行特定的操作或功能,例如執(zhí)行與中間件過程關(guān)聯(lián)的API調(diào)用。例如,綁定組件108可以包括實(shí)現(xiàn)來自軟件組件102的API調(diào)用或以其他方式對(duì)此調(diào)用做出響應(yīng)的邏輯。如上面更詳細(xì)地說明的,綁定組件108可以通過各種形式實(shí)現(xiàn)。如圖所示,文件系統(tǒng)存儲(chǔ)多個(gè)綁定組件版本,每個(gè)綁定組件版本具有關(guān)聯(lián)庫。在另一示例性實(shí)現(xiàn)中,例如當(dāng)所有必要的程序和代碼使用庫封裝時(shí),綁定組件108可以包括存儲(chǔ)每個(gè)庫版本的文件系統(tǒng)庫,圖3示出其中一個(gè)庫版本示例。還可以替代地實(shí)現(xiàn)其他綁定組件配置。加載器組件106不包含支持軟件組件102的調(diào)用所需的任何邏輯。而是,加載器組件106動(dòng)態(tài)地將與綁定庫104的綁定組件108關(guān)聯(lián)的正確庫版本加載到相應(yīng)計(jì)算機(jī)處理系統(tǒng)的存儲(chǔ)器110中。加載庫的過程是在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下實(shí)現(xiàn)的。一旦選擇了適當(dāng)?shù)膸觳⑵浼虞d到存儲(chǔ)器110,加載器組件106便從軟件組件102接收調(diào)用并將來自軟件組件102的等效調(diào)用從軟件組件102轉(zhuǎn)發(fā)到從庫加載到存儲(chǔ)器110的相應(yīng)邏輯。因此,加載器組件106攔截和居間傳遞(mediate)來自軟件組件102的調(diào)用。一旦已將庫加載到存儲(chǔ)器110,加載器組件106便會(huì)偶爾檢查是否存在新的綁定庫版本(或回復(fù)到現(xiàn)有的但不同的綁定庫版本的指令)。如果加載器組件106檢測到需要更改加載到存儲(chǔ)器110的庫版本,則實(shí)現(xiàn)此更改,而無需重新啟動(dòng)底層的軟件組件102。在示例性實(shí)現(xiàn)中,根據(jù)情況(例如,當(dāng)加載器組件106發(fā)現(xiàn)當(dāng)前加載的或以其他方式使用的綁定組件108的庫版本的級(jí)別早于最新可用的綁定組件108的庫版本),加載器組件106可以動(dòng)態(tài)地卸載已加載到存儲(chǔ)器的當(dāng)前庫版本,并動(dòng)態(tài)地將綁定組件108中的最新庫版本加載到存儲(chǔ)器。加載器組件106還可以根據(jù)需要,可選地調(diào)用遷移邏輯(例如,在新選定的庫版本中提供的遷移邏輯)來重新安排任何內(nèi)部數(shù)據(jù)結(jié)構(gòu)以符合新的庫版本的要求。因此,內(nèi)部狀態(tài)遷移由綁定庫104自動(dòng)和動(dòng)態(tài)地進(jìn)行管理。一旦將新的庫版本加載到存儲(chǔ)器并且遷移了內(nèi)部狀態(tài)數(shù)據(jù)結(jié)構(gòu)(需要時(shí)),加載器組件106便可使用新庫完成來自軟件組件102的當(dāng)前調(diào)用的處理(如果已做出調(diào)用)。如將在此更詳細(xì)地描述那樣,加載器組件106可以使用諸如一個(gè)或多個(gè)信息源112之類的資源來從綁定組件108選擇適當(dāng)?shù)膸彀姹具M(jìn)行加載。在此方面,信息源112可以包括文件系統(tǒng)符號(hào)鏈接(例如,在類似Unix的文件系統(tǒng)上等)、控制文件、一個(gè)或多個(gè)表或數(shù)據(jù)庫(另存為文件或加載到存儲(chǔ)器110)、指針,或用于識(shí)別來自綁定組件108的所需庫的其他源。根據(jù)本發(fā)明的仍進(jìn)一步的方面,諸如管理器功能、管理員功能、監(jiān)督員功能之類的常見控制功能可以監(jiān)視或監(jiān)督軟件版本控制。例如,管理器可以指令(例如,通過加載器組件106)在應(yīng)用下次調(diào)用加載器組件106時(shí)所有相連的軟件組件102使用所需庫版本。管理器也可以不時(shí)地使用新的庫版本更新綁定組件108。因此,綁定庫104單獨(dú)地或與一個(gè)或多個(gè)其他進(jìn)程(例如,管理器或監(jiān)控邏輯等)結(jié)合地實(shí)現(xiàn)更新機(jī)制。此處描述的技術(shù)可以由允許通過綁定組件108內(nèi)的庫版本動(dòng)態(tài)升級(jí)/降級(jí)綁定軟件的規(guī)則或其他過程驅(qū)動(dòng)。而且,動(dòng)態(tài)升級(jí)/降級(jí)綁定軟件可以僅針對(duì)用戶應(yīng)用程序的子集發(fā)生,可以針對(duì)特定應(yīng)用發(fā)生,或者可以在特定的時(shí)間和日期發(fā)生?,F(xiàn)在參考圖2,流程圖示出了根據(jù)本發(fā)明的各方面執(zhí)行動(dòng)態(tài)軟件版本選擇的過程200的整個(gè)流程。過程200可以實(shí)現(xiàn)為一種方法,或?qū)崿F(xiàn)為包括硬件和軟件組合的系統(tǒng)的一部分。例如,軟件可以存儲(chǔ)在物理存儲(chǔ)設(shè)備內(nèi),以便當(dāng)至少一個(gè)處理器處理所述軟件時(shí),所述軟件可以使相應(yīng)的物理機(jī)器實(shí)現(xiàn)所示過程200指定的操作。因此,例如,過程200可以在參考圖1示出和描述的系統(tǒng)100上實(shí)現(xiàn)。仍進(jìn)一步地,過程200可以實(shí)現(xiàn)為包括有形計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的計(jì)算機(jī)程序產(chǎn)品,所述有形計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)具有包含于其上的計(jì)算機(jī)可讀程序代碼。過程200包括將綁定庫與軟件組件進(jìn)行關(guān)聯(lián)202。所述綁定庫包括加載器組件和綁定組件,其中所述加載器組件充當(dāng)軟件組件和綁定組件之間的中介,所述綁定組件包括軟件組件端邏輯。根據(jù)本發(fā)明的某些方面,加載器組件的工作是“識(shí)別”或“判定”需要重新加載綁定庫。在此方面,加載器組件識(shí)別出必須加載不同的綁定庫。過程200進(jìn)一步包括由加載器組件觸發(fā)對(duì)已加載庫版本的驗(yàn)證204。例如,加載器組件可以執(zhí)行判定邏輯以,例如根據(jù)規(guī)則、條件或其他信息,判定是否應(yīng)該修改當(dāng)前已加載的庫,例如,升級(jí)到新版本或回退到較早版本??梢酝ㄟ^接收與判定邏輯關(guān)聯(lián)的特定API調(diào)用以觸發(fā)對(duì)庫版本的驗(yàn)證來實(shí)現(xiàn)所述觸發(fā)。作為另一說明性示例,加載器組件接收的所有API調(diào)用都可以具有與其關(guān)聯(lián)的判定邏輯。如果未加載庫,則加載器組件可以使用相同的規(guī)則、條件或其他信息選擇要加載到存儲(chǔ)器的庫版本。如果無需修改已加載到存儲(chǔ)器的庫版本,則過程200結(jié)束。否則,過程200進(jìn)一步包括由加載器組件選擇所需的被請求庫版本206。所需庫版本可以從與綁定庫的綁定組件關(guān)聯(lián)的至少兩個(gè)庫版本中選擇。所需的被請求庫版本可以例如使用文件(例如,文件系統(tǒng)符號(hào)鏈接、引導(dǎo)選擇的控制文件等)進(jìn)行選擇。作為替代示例,加載器組件可以查看表或其他信息源以確定要加載到存儲(chǔ)器的所需版本的身份標(biāo)識(shí)。例如,所述過程可以(例如,通過加載器組件)使用庫版本表來識(shí)別庫版本。因此,過程200可以存儲(chǔ)加載器組件可訪問和使用的跟蹤當(dāng)前庫版本的庫版本變量。因此,例如加載器組件可以讀取庫版本變量的值并根據(jù)所述庫版本變量的值選擇所需庫版本。過程200仍進(jìn)一步地包括在無需重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下,將所需庫版本加載到計(jì)算機(jī)處理設(shè)備的存儲(chǔ)器。一旦選定庫版本并將其加載到存儲(chǔ)器,所述過程可以進(jìn)一步包括由加載器組件從軟件組件接收軟件應(yīng)用程序接口調(diào)用,并將接收的調(diào)用轉(zhuǎn)發(fā)到已加載到存儲(chǔ)器的所需庫版本的相應(yīng)軟件應(yīng)用編程接口。中間件環(huán)境中的動(dòng)態(tài)版本控制本發(fā)明的各方面通過以不宕機(jī)或不中斷服務(wù)的方式,將新的動(dòng)態(tài)鏈接庫置入中間件系統(tǒng)來便利在諸如中間件環(huán)境之類的環(huán)境中的動(dòng)態(tài)版本控制。此類實(shí)現(xiàn)進(jìn)一步提供了中間件環(huán)境中的版本管理?,F(xiàn)在參考圖3,其示出了用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)300的示意圖。系統(tǒng)300實(shí)現(xiàn)本發(fā)明的方面,所述方面在許多方面與針對(duì)圖1的系統(tǒng)100列出的各方面類似。但是,系統(tǒng)300是在消息傳遞系統(tǒng)環(huán)境的示例性上下文中示出的,以說明根據(jù)本發(fā)明的進(jìn)一步方面的某些特征。系統(tǒng)300包括多個(gè)實(shí)現(xiàn)為用戶應(yīng)用的軟件組件302,每個(gè)軟件組件302與包括加載器組件306和綁定組件308的綁定庫304關(guān)聯(lián)。綁定組件308包含處理消息傳遞和排隊(duì)系統(tǒng)應(yīng)用編程接口調(diào)用時(shí)所需的所有軟件組件端邏輯。一般而言,包括加載器組件306和綁定組件308的綁定庫304與參照圖1描述的同名組件類似。示例性系統(tǒng)300可以集成消息和排隊(duì)系統(tǒng),例如由位于紐約阿莫克的國際商業(yè)機(jī)器公司推出的用于消息傳遞和排隊(duì)的MQkries中間件系統(tǒng)。使用此類安排,各種軟件組件302可以通過將應(yīng)用特定的數(shù)據(jù)(消息)寫入隊(duì)列以及從隊(duì)列檢索這些消息來相互通信,9而無需私有的專用邏輯連接來鏈接應(yīng)用。在此方面,每個(gè)綁定庫304可以包含例如一組可執(zhí)行體(executable),該組可執(zhí)行體實(shí)現(xiàn)客戶機(jī)314以便使用消息傳遞和排隊(duì)系統(tǒng)進(jìn)行通系統(tǒng)300進(jìn)一步包括多個(gè)客戶機(jī)處理設(shè)備322,所述客戶機(jī)處理設(shè)備在執(zhí)行其關(guān)聯(lián)的用戶軟件組件302的過程中跨網(wǎng)絡(luò)3M與服務(wù)器計(jì)算機(jī)3進(jìn)行通信。典型的物理處理設(shè)備可以包括例如服務(wù)器計(jì)算機(jī)、個(gè)人計(jì)算機(jī)、筆記本計(jì)算機(jī)、上網(wǎng)本計(jì)算機(jī)、平板計(jì)算機(jī)、事務(wù)性系統(tǒng)、目的驅(qū)動(dòng)設(shè)備(purpose-drivenappliance)、諸如個(gè)人數(shù)字助理(PDA)之類的普及計(jì)算設(shè)備、掌上計(jì)算機(jī)、蜂窩式接入處理設(shè)備、智能手機(jī)或其他任何能夠執(zhí)行計(jì)算機(jī)代碼的設(shè)備等。網(wǎng)絡(luò)3提供各種處理設(shè)備322和服務(wù)器3之間的通信鏈路,并且可以受連網(wǎng)組件的支持,所述網(wǎng)絡(luò)組件包括例如,路由器、集線器、防火墻、網(wǎng)絡(luò)接口、有線或無線通信鏈路及相應(yīng)的互連、蜂窩基站和相應(yīng)的蜂窩轉(zhuǎn)換技術(shù)(例如,在蜂窩和tcp/ip之間轉(zhuǎn)換)等。而且,網(wǎng)絡(luò)3可以包括使用一個(gè)或多個(gè)內(nèi)部網(wǎng)、外聯(lián)網(wǎng)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、無線網(wǎng)絡(luò)(WIFI)、包括萬網(wǎng)的因特網(wǎng)和/或其他安排以便以實(shí)時(shí)方式或者其他方式例如通過時(shí)間平移(timeshifting)、批處理等實(shí)現(xiàn)處理設(shè)備322和服務(wù)器計(jì)算機(jī)3間的通信的連接。服務(wù)器計(jì)算機(jī)3可用于,例如執(zhí)行可體現(xiàn)為一組長時(shí)間運(yùn)行的服務(wù)進(jìn)程的隊(duì)列管理器328。隊(duì)列管理器3定義針對(duì)每個(gè)用戶軟件組件302管理消息的發(fā)送和排隊(duì)的運(yùn)行時(shí)應(yīng)用。在該說明性示例中,消息傳遞和排隊(duì)系統(tǒng)在客戶機(jī)/服務(wù)器配置中實(shí)現(xiàn)。替代地,隊(duì)列管理器328的示例可以實(shí)現(xiàn)為每個(gè)處理設(shè)備322上的長時(shí)間運(yùn)行的進(jìn)程。一般地講,用戶軟件組件302使用API調(diào)用通過其關(guān)聯(lián)的客戶機(jī)314與隊(duì)列管理器3進(jìn)行通信,例如,以將消息發(fā)送到與其他客戶應(yīng)用關(guān)聯(lián)的隊(duì)列或從關(guān)聯(lián)的隊(duì)列檢索已被其他軟件組件302存放的消息。因此,隊(duì)列管理器328與可能許多與不同的客戶機(jī)處理設(shè)備322關(guān)聯(lián)的不同的用戶軟件組件302進(jìn)行交互,從而訪問這些服務(wù)進(jìn)程,每個(gè)進(jìn)程都使用產(chǎn)品特定的綁定庫304。無論隊(duì)列管理器是否在遠(yuǎn)端,例如位于作為客戶機(jī)/服務(wù)器實(shí)現(xiàn)的一部分的服務(wù)器計(jì)算機(jī)3上,或者與綁定庫304共同位于相應(yīng)處理設(shè)備322的本地配置中,都可進(jìn)行這種安排。希望能不時(shí)地更新在系統(tǒng)300內(nèi)運(yùn)行的各種組件的軟件。假設(shè)消息傳遞和排隊(duì)系統(tǒng)需要執(zhí)行更新。根據(jù)本發(fā)明的各方面,可以在不中斷服務(wù)的情況下動(dòng)態(tài)地部署新的消息和排隊(duì)系統(tǒng)軟件版本。此類軟件修改包括更改與每個(gè)用戶軟件組件302綁定的軟件,例如由關(guān)聯(lián)的綁定庫304實(shí)例加載的關(guān)聯(lián)的庫版本。軟件修改進(jìn)一步包括更改消息傳遞和排隊(duì)系統(tǒng)的內(nèi)部進(jìn)程,例如,更改隊(duì)列管理器328,更改、添加或刪除與綁定組件308相關(guān)聯(lián)地存儲(chǔ)的庫版本等。對(duì)于修改消息傳遞和排隊(duì)系統(tǒng)內(nèi)部軟件的情況,此類內(nèi)部進(jìn)程可以被設(shè)計(jì)為在軟件升級(jí)可用時(shí)或在軟件升級(jí)可用之后立即可重新啟動(dòng)。與之相對(duì),用戶軟件組件302具有進(jìn)程生命周期要求,所述生命周期要求由用戶業(yè)務(wù)要求決定并且由客戶控制,而不受消息傳遞和排隊(duì)系統(tǒng)控制。一般而言,與隊(duì)列管理器3關(guān)聯(lián)的服務(wù)進(jìn)程可以實(shí)現(xiàn)為傳統(tǒng)操作系統(tǒng)進(jìn)程。MQkries隊(duì)列管理器中的示例為用于通過網(wǎng)絡(luò)與其他消息通道代理(MCA)進(jìn)行消息讀寫的MCA和本地隊(duì)列管理器代理(LQMA),它們構(gòu)成基本排隊(duì)引擎。這些進(jìn)程在如下意義上是被管理的,即隊(duì)列管理器328自己維護(hù)在需要時(shí)重用的可用MCA和LQMA進(jìn)程池。空閑的MCA和LQMA進(jìn)程實(shí)例在新工作到來時(shí)被重用。當(dāng)在文件系統(tǒng)中安裝新軟件(例如,形式為新庫或程序)時(shí),隊(duì)列管理器可以關(guān)閉這些程序的任何空閑實(shí)例并啟動(dòng)新進(jìn)程。進(jìn)程將在沒有任何其他幫助的情況下使用新軟件。類似地,通過取消安裝新軟件文件的文件系統(tǒng)更改可以實(shí)現(xiàn)軟件降級(jí)。用戶軟件組件302使用綁定庫304(例如,在MQkries的情況中名為“l(fā)ibmqm”的庫)獲得對(duì)消息傳遞和排隊(duì)系統(tǒng)服務(wù)的訪問。在一方面,綁定庫304向應(yīng)用304提供固定的良好定義的接口。而且,綁定庫304與隊(duì)列管理器328的內(nèi)部進(jìn)行接口連接。一般而言,即使有新軟件可用,用戶軟件組件302也不能被強(qiáng)制重新啟動(dòng)。例如,一般情況下,服務(wù)器計(jì)算機(jī)3上的進(jìn)程不能強(qiáng)制重新啟動(dòng)遠(yuǎn)程處理設(shè)備322上的軟件組件302。但是,在說明性示例中,當(dāng)前的一組程序/庫可執(zhí)行體和新的一組程序/庫可執(zhí)行體兩者在每個(gè)文件系統(tǒng)中是一起可用的,如每個(gè)包括多個(gè)不同的庫版本的綁定組件308所示。在此方面,由與消息傳遞和排隊(duì)系統(tǒng)關(guān)聯(lián)的每個(gè)軟件組件302所執(zhí)行的軟件(例如,客戶機(jī)314)可以類似于參考圖1和圖2描述的方式進(jìn)行更新。為了允許在不需要用戶重新啟動(dòng)其軟件組件302的情況下部署新的綁定庫版本,每個(gè)綁定庫304通過類似于參考圖1描述的加載器組件106和綁定組件108的方式被分為兩個(gè)不同的組件,包括加載器組件306和綁定庫308。加載器組件306可以實(shí)現(xiàn)為,例如,一個(gè)小型庫。但是,加載器組件306不包含支持消息傳遞和排隊(duì)系統(tǒng)的應(yīng)用編程接口所需的任何邏輯。而是,加載器組件306將正確的綁定庫版本加載到相應(yīng)客戶機(jī)處理設(shè)備322上的存儲(chǔ)器。加載器組件306然后將等效的API調(diào)用從應(yīng)用程序轉(zhuǎn)發(fā)到已加載庫(例如,客戶機(jī)314)中的適當(dāng)接口,以實(shí)現(xiàn)將消息發(fā)送到消息隊(duì)列,從消息隊(duì)列檢索消息或以其他方式與消息傳遞和排隊(duì)系統(tǒng)進(jìn)行交互。一旦加載器組件306從綁定組件308選擇并加載了庫,加載器組件306便會(huì)將來自軟件組件302的所有API調(diào)用的等效版本轉(zhuǎn)發(fā)到從綁定組件308加載的庫。因此,加載器組件306在用戶軟件組件302和從綁定組件308加載的庫之間有效地?cái)r截和居間傳遞與消息傳遞和排隊(duì)系統(tǒng)關(guān)聯(lián)的所有API調(diào)用。為了執(zhí)行對(duì)客戶處理設(shè)備322上的庫的軟件修改,服務(wù)器3或其他任何源為綁定組件308提供相應(yīng)庫的新版本。綁定組件308存儲(chǔ)庫的方式使得每個(gè)庫版本都能被相應(yīng)的加載器組件306唯一地識(shí)別。進(jìn)一步地,可以為加載器組件306提供識(shí)別要加載的庫版本的信息,此處將更全面地進(jìn)行描述的那樣。但是,用戶軟件組件302的運(yùn)行實(shí)例可以繼續(xù)使用當(dāng)前已加載到關(guān)聯(lián)的處理設(shè)備322的存儲(chǔ)器的任何庫版本,直到發(fā)出相應(yīng)的命令,使加載器組件306使用新的庫版本更新相應(yīng)客戶計(jì)算機(jī)322的存儲(chǔ)器。當(dāng)發(fā)生預(yù)定事件時(shí),加載器組件306可以卸載早期庫版本(如果已加載了早期版本的話)。相應(yīng)地,加載器組件306可以從綁定組件308加載新的庫版本。根據(jù)說明性示例,用戶軟件組件302可以使用指定的斷開連接和重新連接API序列觸發(fā)從綁定組件308加載新庫。直到用戶軟件組件302執(zhí)行該序列的應(yīng)用編程接口調(diào)用為止,用戶軟件組件302將繼續(xù)使用舊的庫版本軟件。在示例性實(shí)現(xiàn)中,軟件庫修改可以由用戶軟件組件302向綁定應(yīng)用304發(fā)出斷開連接和重新連接API調(diào)用來觸發(fā)。因此,加載器組件306可以在客戶應(yīng)用斷開連接時(shí)動(dòng)態(tài)地卸載已加載到存儲(chǔ)器的當(dāng)前庫版本,并且隨后在客戶應(yīng)用連接時(shí)動(dòng)態(tài)地加載新的庫版本。在MQkries示例性實(shí)現(xiàn)中,從綁定組件308加載和卸載庫是在加載器組件的MQCONN(MQseries連接)和MQDISC(MQseries斷開連接)處理中實(shí)現(xiàn)的。該說明性示例中加載或卸載庫的命令由相應(yīng)用戶軟件組件302執(zhí)行,因此允許用戶應(yīng)用控制更新時(shí)間。根據(jù)本發(fā)明的方面,在上述示例性實(shí)現(xiàn)中,僅連接/斷開連接轉(zhuǎn)發(fā)API需要具有判定邏輯。對(duì)于連接/斷開連接API,可以在將調(diào)用轉(zhuǎn)發(fā)到相應(yīng)的庫之前執(zhí)行判定邏輯。因此,如果需要修改當(dāng)前已加載的庫版本,可以在執(zhí)行已調(diào)用的API之前實(shí)施此更改。其他API可以觸發(fā)從加載器組件306到關(guān)聯(lián)的綁定庫308的相應(yīng)庫版本的等效API調(diào)用,因此實(shí)現(xiàn)轉(zhuǎn)發(fā)功能而在其中沒有判定邏輯。在這種情況下,加載器組件306僅檢查這些“特殊”的API(或類似指定的初始化/取消初始化API)中是否存在新的綁定庫版本。其他API將不會(huì)觸發(fā)加載器組件306執(zhí)行版本檢查。連接/斷開連接API被認(rèn)為“特殊”是因?yàn)樗鼈兘⒑筒鸪壎◣?04使用以處理其他API的內(nèi)部狀態(tài)。因此,無需支持加載器組件觸發(fā)的狀態(tài)遷移,因?yàn)檫B接/斷開連接API自己會(huì)建立和拆除狀態(tài)數(shù)據(jù)。因此,無需進(jìn)行狀態(tài)遷移。根據(jù)又一說明示例,所有/任何API(或API的子集)都具有檢查庫版本并在必要時(shí)觸發(fā)庫修改的判定邏輯。所述判定邏輯可以,例如,在將等效調(diào)用轉(zhuǎn)發(fā)到已加載的庫版本之前執(zhí)行。由于所有API(或其子集)執(zhí)行需要運(yùn)行判定邏輯,因此,所述邏輯可以例如,通過使用存儲(chǔ)指示當(dāng)前所需的庫版本的指示和/或可用庫版本列表的基于存儲(chǔ)器的共享庫版本表來高效地工作。由于綁定庫可能在API被調(diào)用時(shí)攜帶內(nèi)部狀態(tài)數(shù)據(jù),因此,加載器組件306應(yīng)該能夠遷移綁定庫狀態(tài),例如,通過使用新的綁定庫中的遷移API來這樣做。因此,根據(jù)本發(fā)明的方面,從綁定組件308選擇要加載到存儲(chǔ)器的庫版本的操作脫離了操作系統(tǒng)的控制,而可以被置于加載器組件306的直接控制之下。加載器組件306可以在加載庫之前執(zhí)行任何所需的驗(yàn)證,并且可以實(shí)施較簡單地依賴于底層操作系統(tǒng)庫加載機(jī)制而言更為復(fù)雜的加載技術(shù)和策略。而且,加載器組件306能夠執(zhí)行回退到早期庫版本軟件級(jí)別的操作,例如,只要內(nèi)部狀態(tài)遷移是可能的并且受后來的綁定庫中的遷移API支持。因此,本發(fā)明的方面通過消除針對(duì)系統(tǒng)軟件(例如,該說明性示例中的中間件)的維護(hù)更新而計(jì)劃的停機(jī),幫助實(shí)現(xiàn)連續(xù)可用性。在此方面,此處描述的軟件能力可以允許在不需要重新啟動(dòng)系統(tǒng)軟件,甚至不需要應(yīng)用在更改期間保持停頓(quiesce)的情況下實(shí)施更改。因此,即使當(dāng)更改影響到應(yīng)用接口時(shí),應(yīng)用也可以繼續(xù)使用系統(tǒng)軟件,從而兩個(gè)(或更多個(gè))不同的應(yīng)用接口可以在應(yīng)用更改的過程中由同一系統(tǒng)軟件提供。有關(guān)動(dòng)態(tài)地更新與中間件系統(tǒng)(例如,消息傳遞和排隊(duì)系統(tǒng))關(guān)聯(lián)的軟件的描述是通過展示而非限制的方式給出的,以便說明用于以不中斷服務(wù)的方式執(zhí)行動(dòng)態(tài)軟件修改的技術(shù),該技術(shù)在本文中得到更全面的說明。庫版本表現(xiàn)在參考圖4,其示出用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)400的示意圖。一般而言,系統(tǒng)400包括軟件組件402和關(guān)聯(lián)的綁定庫404。綁定庫404實(shí)現(xiàn)為兩個(gè)不同的組件,包括加載器組件406和綁定組件408。在此方面,軟件組件402、綁定庫404、加載器組件406和綁定組件408基本上與參考圖1-3中任何一個(gè)或多個(gè)圖描述的同名組件類似。根據(jù)本發(fā)明的進(jìn)一步方面,一般而言,當(dāng)客戶應(yīng)用402發(fā)出API調(diào)用時(shí),可觸發(fā)加載和使用新的庫軟件。如將在此更詳細(xì)地描述那樣,可以響應(yīng)于加載器組件406接收特殊API(例如,連接和斷開連接API),觸發(fā)版本檢查和庫重新加載。作為又一說明性示例,還可以響應(yīng)于加載器組件406從相應(yīng)的調(diào)用軟件組件接收所有API,觸發(fā)版本檢查和庫重新加載。在所示的示例性實(shí)現(xiàn)中,系統(tǒng)400進(jìn)一步包括共享庫版本表430。所述共享庫版本表存儲(chǔ)與綁定組件408存儲(chǔ)的各種庫版本相關(guān)的信息。例如,如圖所示,庫表430包含與相應(yīng)的綁定組件408關(guān)聯(lián)的所有可用庫的名稱及版本號(hào)。此外,共享表430可以包含庫版本變量432,該變量存儲(chǔ)有關(guān)哪個(gè)庫版本(例如,哪個(gè)共享表項(xiàng))表示應(yīng)該加載到存儲(chǔ)器的當(dāng)前庫版本的指示。所述共享表可以由諸如參考圖3描述的隊(duì)列管理器3之類的任何管理進(jìn)程進(jìn)行填充。而且,可以實(shí)現(xiàn)某種機(jī)制來將可用庫版本發(fā)布到例如共享庫表430。當(dāng)發(fā)生預(yù)定觸發(fā)事件時(shí),例如,收到與相應(yīng)判定邏輯關(guān)聯(lián)的“特殊”API調(diào)用,收到所有API調(diào)用(與適當(dāng)判定邏輯關(guān)聯(lián)的所有API調(diào)用)時(shí),或根據(jù)其他判定邏輯(取決于特定實(shí)現(xiàn)),加載器組件406檢查共享表430以查看用戶程序402是否正在使用正確的當(dāng)前可用庫版本。如果軟件組件402未使用正確的庫版本,則加載器組件406安排(orchestrate)卸載舊的庫版本并加載正確的新版本。例如,加載器組件406可以將庫版本變量432中存儲(chǔ)的值與已加載到存儲(chǔ)器的庫版本進(jìn)行比較。因此,例如,每當(dāng)用戶軟件組件402做出與相應(yīng)判定邏輯關(guān)聯(lián)的API調(diào)用,加載器組件406都可以針對(duì)當(dāng)前使用的庫版本執(zhí)行可用庫檢查。當(dāng)加載器組件406發(fā)現(xiàn)當(dāng)前已加載的庫與最新可用庫不在同一級(jí)別上時(shí),加載器組件便可以動(dòng)態(tài)地卸載當(dāng)前庫并動(dòng)態(tài)地加載指定庫??蛇x地,可以實(shí)現(xiàn)對(duì)新庫中的特殊遷移API的調(diào)用來,例如,重新安排任何內(nèi)部狀態(tài)數(shù)據(jù)結(jié)構(gòu)以符合新庫的要求(如有必要),并且使用新庫完成當(dāng)前API調(diào)用的處理。在某些示例性實(shí)現(xiàn)中,管理器或監(jiān)督進(jìn)程(例如,參考圖3描述的隊(duì)列管理器)可以在應(yīng)用下一次做出API調(diào)用時(shí),引導(dǎo)所有相連的用戶應(yīng)用程序使用不同的(例如,更新或更舊的)庫軟件版本。替代地,其他規(guī)則、時(shí)間條件等可以決定何時(shí)執(zhí)行軟件版本修改。程序特定的庫版本控制現(xiàn)在參考圖5,其示出用于實(shí)現(xiàn)動(dòng)態(tài)軟件版本選擇的系統(tǒng)500的示意圖,該系統(tǒng)擴(kuò)展了動(dòng)態(tài)軟件版本選擇以支持“程序特定的”控制,該“程序特定的”控制允許一定程度上控制哪些程序?qū)⑦w移到新的/不同的版本以及哪些程序不應(yīng)該遷移。一般而言,系統(tǒng)500包括軟件組件502和關(guān)聯(lián)的綁定庫504。綁定庫504實(shí)現(xiàn)為兩個(gè)不同的組件,包括加載器組件506和綁定組件508。在此方面,軟件組件502、綁定庫504、加載器組件506和綁定組件508基本上與參考圖1-4中任何一個(gè)或多個(gè)圖描述的同名組件類似。—般而言,當(dāng)執(zhí)行應(yīng)用編程接口調(diào)用時(shí),所有軟件組件502可傾向于遷移到指定的當(dāng)前庫版本,通常是最新版本。但是,根據(jù)本發(fā)明的進(jìn)一步方面,提供了對(duì)于哪些程序應(yīng)該遷移到當(dāng)前版本以及是否存在某些不應(yīng)該遷移的程序的控制。如圖所示,圖5可以包括共享庫版本表530,它與參考圖4描述的共享庫版本表430類似。但是,所示實(shí)現(xiàn)進(jìn)一步包括共享程序版本表M0。共享程序版本表540存儲(chǔ)多個(gè)軟件組件以及每個(gè)應(yīng)用的相應(yīng)庫版本。例如,如圖所示,第一軟件程序“UPDATE”被配置為使用庫版本2。但是,軟件程序“REPORT”被配置為使用庫版本3。因此,如果調(diào)用加載器組件506的軟件組件502是軟件程序UPDATE,則加載器組件506(當(dāng)被與相應(yīng)判定邏輯關(guān)聯(lián)的適當(dāng)API觸發(fā)時(shí))確保在處理調(diào)用之前先加載庫版本2。相應(yīng)地,如果調(diào)用加載器組件506的軟件組件502是軟件程序REPORT,則加載器組件506(當(dāng)被與相應(yīng)判定邏輯關(guān)聯(lián)的適當(dāng)API觸發(fā)時(shí))確保在處理調(diào)用之前先加載庫版本3。通過對(duì)共享程序版本表540進(jìn)行中央控制,管理組件可以判定何時(shí)個(gè)別程序應(yīng)該開始遷移到新的或不同的庫版本。程序庫版本表540將程序名(或與程序名匹配的模式等)映射到庫版本。程序庫版本表MO由適當(dāng)?shù)墓芾磉M(jìn)程(例如,圖3示例中的隊(duì)列管理器3或其他任何適當(dāng)?shù)谋O(jiān)督進(jìn)程)進(jìn)行填充。而且,程序庫版本表540包含具有關(guān)聯(lián)的特定庫版本的程序的名稱或名稱模式。加載器組件506在做出版本升級(jí)或降級(jí)判定之前,先在程序庫版本表中找到調(diào)用程序的名稱??梢酝ㄟ^使指向最新可用或當(dāng)前庫版本的單行與所有程序名匹配(例如使用通配符或其他適合的語言),擴(kuò)展加載器組件506的程序特定的判定邏輯,例如以便遷移所有程序。所述實(shí)現(xiàn)可要求所有程序與程序庫版本表中的至少一行匹配,或者例如在程序名不與任何行匹配的情況下,實(shí)現(xiàn)可以簡單地默認(rèn)為預(yù)定版本或先前版本。避已參考使用動(dòng)態(tài)加載庫的軟件實(shí)現(xiàn)描述了本發(fā)明的各方面。在此方面,傳統(tǒng)上使用程序的軟件實(shí)現(xiàn)可以被封裝到動(dòng)態(tài)可加載庫,而非以傳統(tǒng)程序格式封裝。一旦經(jīng)過封裝,便可使用此處參考圖1-5更全面描述的各種軟件修改技術(shù)。例如,可以通過將用于應(yīng)用的聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)的大部分或全部封裝到動(dòng)態(tài)可加載庫而非程序中來實(shí)現(xiàn)動(dòng)態(tài)軟件版本管理。完成此操作后,便可在不關(guān)閉與OLTP系統(tǒng)交互的程序的情況下加載和使用新的OLTP軟件。完全不中斷與OLTP系統(tǒng)無關(guān)的程序功能,同時(shí)使用新軟件升級(jí)與OLTP系統(tǒng)相關(guān)的程序功能。通過將OLTP功能體現(xiàn)為由用戶業(yè)務(wù)程序或OLTP系統(tǒng)本身使用的一組庫,可以在客戶端環(huán)境和許多服務(wù)器端環(huán)境中實(shí)現(xiàn)用于零宕機(jī)升級(jí)的動(dòng)態(tài)軟件庫選擇。在此,如在此將更詳細(xì)地描述那樣,通過允許程序在其自己選擇的時(shí)間邏輯上與OTLP系統(tǒng)斷開連接,動(dòng)態(tài)地卸載現(xiàn)有OTLP軟件(庫),動(dòng)態(tài)地加載新的OTLP軟件(庫),然后使用新軟件重新連接到OTLP系統(tǒng)來實(shí)現(xiàn)支持零中斷升級(jí)。盡管嚴(yán)格來講,在執(zhí)行卸載舊庫和加載新庫時(shí)會(huì)中斷服務(wù),但是所述中斷很短暫并且僅限于執(zhí)行這些步驟的特定客戶機(jī)進(jìn)程。而且,選擇要使用的庫/軟件版本不再是操作系統(tǒng)操作,而是被置于OLTP軟件套的直接控制之下。OLTP軟件可以執(zhí)行任何所需的驗(yàn)證,并且可以實(shí)現(xiàn)較僅依賴于底層操作系統(tǒng)而言更為復(fù)雜的加載技術(shù)和策略。此外,還可以使用此方法回退到早期版本。示例性計(jì)算機(jī)系統(tǒng)現(xiàn)在參考圖6,其示出根據(jù)本發(fā)明的方面實(shí)現(xiàn)為計(jì)算機(jī)系統(tǒng)602的數(shù)據(jù)處理系統(tǒng)600的方塊圖。計(jì)算機(jī)系統(tǒng)602可與很多種通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置一起操作。而且,計(jì)算機(jī)系統(tǒng)602可以在計(jì)算機(jī)系統(tǒng)執(zhí)行的計(jì)算機(jī)系統(tǒng)可執(zhí)行指令(例如,程序模塊)的一般上下文中進(jìn)行描述。通常,程序模塊可以包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、邏輯、數(shù)據(jù)結(jié)構(gòu)等。計(jì)算機(jī)系統(tǒng)602的組件可以包括但不限于一個(gè)或多個(gè)處理器或處理單元604,例如對(duì)稱多處理器(SMP)系統(tǒng)或包括與系統(tǒng)總線相連的多個(gè)處理器的其他配置。替代地,可以采用單處理器。計(jì)算機(jī)系統(tǒng)602的組件進(jìn)一步包括系統(tǒng)存儲(chǔ)器606以及將包括系統(tǒng)存儲(chǔ)器606的各種系統(tǒng)組件連接到處理器604的總線608。存儲(chǔ)器606可以包括形式為易失性存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲(chǔ)器(RAM)610和/或高速緩沖存儲(chǔ)器612。存儲(chǔ)器606也可以包括其他可拆裝/不可拆裝的、易失性/非易失性的計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì),例如諸如一個(gè)或多個(gè)硬盤驅(qū)動(dòng)器之類的存儲(chǔ)系統(tǒng)614。存儲(chǔ)器606還可以包括至少一個(gè)上面包含計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)616,所述計(jì)算機(jī)可讀程序代碼包括被配置為執(zhí)行此處更全面描述的本發(fā)明的實(shí)施例的功能的計(jì)算機(jī)可讀程序代碼。計(jì)算機(jī)系統(tǒng)602還可以包括跨總線608與處理器604進(jìn)行通信的輸入/輸出(I/0)接口618和/或網(wǎng)絡(luò)適配器620。計(jì)算機(jī)系統(tǒng)602還可以與外部設(shè)備622和/或顯示器6M接口連接。其他硬件和/或軟件組件可以與計(jì)算機(jī)系統(tǒng)602結(jié)合使用。所述數(shù)據(jù)處理系統(tǒng)可以例如包括IBMRS/6000系統(tǒng),這是由位于紐約阿莫克的國際商業(yè)機(jī)器公司推出的一款運(yùn)行AdvancedInteractiveExecutive(AIX)操作系統(tǒng)的產(chǎn)品。諸如Java之類的面向?qū)ο蟮木幊滔到y(tǒng)可以與操作系統(tǒng)一起運(yùn)行并提供從數(shù)據(jù)處理系統(tǒng)上執(zhí)行的Java程序或應(yīng)用到操作系統(tǒng)的調(diào)用。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明的方面可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的方面可以采取完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、駐留軟件、微代碼等)或組合了軟件和硬件方面的實(shí)施例的形式,所有這些軟件和硬件方面在此一般地被稱為“電路”、“模塊”或“系統(tǒng)”。此外,本發(fā)明的方面可以采取體現(xiàn)在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)(在介質(zhì)中具有計(jì)算機(jī)可讀程序代碼)中的計(jì)算機(jī)程序產(chǎn)品的形式??梢允褂靡粋€(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任意組合。所述計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是(但不限于)電、磁、光、電磁、紅外線或半導(dǎo)體系統(tǒng)、裝置或設(shè)備或上述各項(xiàng)任何適合的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例(非窮舉列表)可以包括以下項(xiàng)具有一條或多條線的電連接、便攜式計(jì)算機(jī)軟盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦寫可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式光盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備或上述各項(xiàng)任何適合的組合。在本文檔的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何能夠包含或存儲(chǔ)由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的有形介質(zhì)。計(jì)算機(jī)可讀信號(hào)介質(zhì)可以包括其中包含計(jì)算機(jī)可讀程序代碼(例如,在基帶中或作為載波的一部分)的傳播數(shù)據(jù)信號(hào)。此類傳播信號(hào)可以采取任何多樣的形式,包括但不限于電磁、光或上述各項(xiàng)任何適合的組合。計(jì)算機(jī)可讀信號(hào)介質(zhì)可以是任何并非計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以及傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的計(jì)算機(jī)可讀介質(zhì)??梢允褂萌魏芜m當(dāng)?shù)慕橘|(zhì)(包括但不限于無線、線纜、光纜、RF等或上述任何適合的組合)來傳輸計(jì)算機(jī)可讀介質(zhì)中包含的程序代碼。用于執(zhí)行本發(fā)明的方面的操作的計(jì)算機(jī)程序代碼可以使用包含一種或多種編程語言的任意組合來編寫,所述編程語言包括諸如Java、Smalltalk,C++或類似語言之類的面向?qū)ο蟮木幊陶Z言或者諸如“C”編程語言或類似的編程語言之類的常規(guī)過程編程語言。所述程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行,部分地在用戶計(jì)算機(jī)上執(zhí)行,作為獨(dú)立的軟件包執(zhí)行,部分地在用戶計(jì)算機(jī)上并部分地在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行,或者完全地在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后者的情況中,所述遠(yuǎn)程計(jì)算機(jī)可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型網(wǎng)絡(luò)與用戶的計(jì)算機(jī)相連,也可以與外部計(jì)算機(jī)進(jìn)行連接(例如,使用因特網(wǎng)服務(wù)提供商通過因特網(wǎng)連接)。此處參考根據(jù)本發(fā)明的實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方塊圖對(duì)本發(fā)明的方面進(jìn)行了描述。將理解,所述流程圖和/或方塊圖的每個(gè)方塊以及所述流程圖和/或方塊圖中的方塊的組合可以由計(jì)算機(jī)程序指令來實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生機(jī)器,以便通過所述計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的所述指令產(chǎn)生用于實(shí)現(xiàn)在一個(gè)或多個(gè)流程圖和/或方塊圖方塊中指定的功能/操作的裝置。這些計(jì)算機(jī)程序指令也可以被存儲(chǔ)在引導(dǎo)計(jì)算機(jī)、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備以特定方式執(zhí)行功能的計(jì)算機(jī)可讀介質(zhì)中,以便存儲(chǔ)在所述計(jì)算機(jī)可讀介質(zhì)中的所述指令產(chǎn)生一件包括實(shí)現(xiàn)在所述一個(gè)或多個(gè)流程圖和/或方塊圖方塊中指定的功能/操作的指令的制品。所述計(jì)算機(jī)程序指令還可被加載到計(jì)算機(jī)、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備,以導(dǎo)致在所述計(jì)算機(jī)、其他可編程裝置或其他設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)在一個(gè)或多個(gè)流程圖和/或方塊圖方塊中指定的功能/操作的過程。附圖中的流程圖和方塊圖示出了根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的架構(gòu)、功能和操作。在此方面,所述流程圖或方塊圖中的每個(gè)方塊都可以表示代碼的模塊、段或部分,所述代碼包括用于實(shí)現(xiàn)指定的邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令。還應(yīng)指出,在某些備選實(shí)施方式中,在方塊中說明的功能可以不按圖中說明的順序發(fā)生。例如,示為相繼的兩個(gè)方塊可以實(shí)際上被基本同時(shí)地執(zhí)行,或者某些時(shí)候,取決于所涉及的功能,可以以相反的順序執(zhí)行所述方塊。還應(yīng)指出,所述方塊圖和/或流程圖的每個(gè)方塊以及所述方塊圖和/或流程圖中的方塊的組合可以由執(zhí)行指定功能或操作的基于專用硬件的系統(tǒng)或?qū)S糜布陀?jì)算機(jī)指令的組合來實(shí)現(xiàn)。在此使用的術(shù)語僅出于描述特定實(shí)施例的目的,并非對(duì)本發(fā)明進(jìn)行限制。正如在此使用的那樣,單數(shù)形式“一”、“一個(gè)”和“所述”旨在同時(shí)包括復(fù)數(shù)形式,除非上下文另外明確指出。將進(jìn)一步理解的是,當(dāng)在本說明書中使用時(shí),術(shù)語“包括”和/或“包含”指定存在所述特性、整數(shù)、步驟、操作、元件和/或組件,但并不排除其中存在或增加一個(gè)或多個(gè)其他特性、整數(shù)、步驟、操作、元件、組件和/或由此構(gòu)成的組。下面權(quán)利要求中的所有裝置加功能元件或步驟加功能元件的對(duì)應(yīng)結(jié)構(gòu)、材料、操作和等同物旨在包括用于與如具體聲明的其他所聲明的元件結(jié)合執(zhí)行所述功能的任何結(jié)構(gòu)、材料或操作。出于說明和描述目的給出了對(duì)本發(fā)明的描述,但是所述描述并非旨在是窮舉的或是將本發(fā)明限于所公開的形式。在不偏離本發(fā)明的范圍和精神的情況下,許多修改和變化對(duì)于本領(lǐng)域的技術(shù)人員來說都將是顯而易見的。本發(fā)明的各方面的選擇和描述是為16了最佳地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且當(dāng)適合于所構(gòu)想的特定使用時(shí),使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實(shí)施例。權(quán)利要求1.一種執(zhí)行動(dòng)態(tài)軟件版本選擇的方法,包括將綁定庫與軟件組件進(jìn)行關(guān)聯(lián),所述綁定庫包括加載器組件和綁定組件,其中所述加載器組件充當(dāng)軟件組件和綁定組件之間的中介,以及所述綁定組件包括軟件組件端邏輯;由加載器組件識(shí)別觸發(fā)器,以便將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器;由加載器組件選擇所需的被請求庫版本,其中所需庫版本是從與綁定庫的綁定組件關(guān)聯(lián)的至少兩個(gè)庫版本中選擇的;以及在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下,將所需庫版本加載到計(jì)算機(jī)處理系統(tǒng)的存儲(chǔ)器。2.如權(quán)利要求1中所述的方法,進(jìn)一步包括由加載器組件從軟件組件接收軟件組件程序接口調(diào)用;將接收的調(diào)用轉(zhuǎn)發(fā)到已加載到存儲(chǔ)器的所需庫版本的相應(yīng)軟件組件編程接口。3.如權(quán)利要求1中所述的方法,其中由加載器組件選擇所需的被請求庫版本包括由加載器組件使用文件系統(tǒng)符號(hào)鏈接選擇所需的被請求庫版本。4.如權(quán)利要求1中所述的方法,其中由加載器組件選擇所需的被請求庫版本包括由加載器組件使用引導(dǎo)選擇的控制文件選擇所需的被請求庫版本。5.如權(quán)利要求1中所述的方法,進(jìn)一步包括使用庫版本表識(shí)別庫版本;以及存儲(chǔ)跟蹤當(dāng)前庫版本的庫版本變量;其中由加載器組件選擇所需的被請求庫版本包括由加載器組件讀取庫版本變量的值;以及根據(jù)所述庫版本變量的值選擇所需庫版本。6.如權(quán)利要求1中所述的方法,進(jìn)一步包括在不更改綁定庫的加載器組件的情況下,使用更新的庫版本更新綁定庫的綁定組件;通過加載器組件加載更新的庫版本,其中軟件組件在加載期間不關(guān)閉,所述加載包括斷開連接綁定組件的先前庫版本;以及連接更新的庫版本;以及由加載器組件將來自軟件組件的調(diào)用轉(zhuǎn)發(fā)到已加載的更新的庫版本。7.如權(quán)利要求1中所述的方法,其中由加載器組件接收將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的請求包括從用戶軟件組件接收斷開連接調(diào)用;以及從用戶軟件組件接收連接調(diào)用。8.如權(quán)利要求1中所述的方法,其中由加載器組件接收將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的請求包括從軟件組件接收任何調(diào)用。9.如權(quán)利要求1中所述的方法,進(jìn)一步包括使用程序版本表存儲(chǔ)用于相應(yīng)程序的特定庫版本;其中由加載器組件識(shí)別觸發(fā)器包括從已識(shí)別的軟件組件接收應(yīng)用編程接口調(diào)用;以及由加載器組件選擇所需的被請求庫版本包括根據(jù)庫版本變量的值選擇所需庫版本。10.一種用于執(zhí)行動(dòng)態(tài)軟件版本選擇的系統(tǒng),包括被配置為將綁定庫與軟件組件進(jìn)行關(guān)聯(lián)的裝置,所述綁定庫包括加載器組件和綁定組件,其中所述加載器組件充當(dāng)軟件組件和綁定組件之間的中介,以及所述綁定組件包括軟件組件端邏輯;被配置為由加載器組件識(shí)別觸發(fā)器,以將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的裝置;被配置為由加載器組件選擇所需的被請求庫版本的裝置,其中所需庫版本是從與綁定庫的綁定組件關(guān)聯(lián)的至少兩個(gè)庫版本中選擇的;以及被配置為在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下,將所需庫版本加載到計(jì)算機(jī)處理系統(tǒng)的存儲(chǔ)器的裝置。11.如權(quán)利要求10中所述的系統(tǒng),進(jìn)一步包括被配置為由加載器組件從軟件組件接收軟件組件程序接口調(diào)用的裝置;被配置為將接收的調(diào)用轉(zhuǎn)發(fā)到已加載到存儲(chǔ)器的所需庫版本的相應(yīng)軟件組件編程接口的裝置。12.如權(quán)利要求10中所述的系統(tǒng),其中被配置為由加載器組件選擇所需的被請求庫版本的裝置包括被配置為由加載器組件使用文件系統(tǒng)符號(hào)鏈接選擇所需的被請求庫版本的裝置。13.如權(quán)利要求10中所述的系統(tǒng),其中被配置為由加載器組件選擇所需的被請求庫版本的裝置包括被配置為由加載器組件使用引導(dǎo)選擇的控制文件選擇所需的被請求庫版本的裝置。14.如權(quán)利要求10中所述的系統(tǒng),進(jìn)一步包括被配置為使用庫版本表識(shí)別庫版本的裝置;以及被配置為存儲(chǔ)跟蹤當(dāng)前庫版本的庫版本變量的裝置;其中被配置為由加載器組件選擇所需的被請求庫版本的裝置包括被配置為由加載器組件讀取庫版本變量的值的裝置;以及被配置為根據(jù)所述庫版本變量的值選擇所需庫版本的裝置。15.如權(quán)利要求10中所述的系統(tǒng),進(jìn)一步包括被配置為在不更改綁定庫的加載器組件的情況下,使用更新的庫版本更新綁定庫的綁定組件的裝置;被配置為通過加載器組件加載更新的庫版本的裝置,其中軟件組件在加載期間不關(guān)閉,所述加載包括被配置為斷開連接綁定組件的先前庫版本的裝置;以及被配置為連接更新的庫版本的裝置;以及被配置為由加載器組件將來自軟件組件的調(diào)用轉(zhuǎn)發(fā)到已加載的更新的庫版本的裝置。16.如權(quán)利要求10中所述的系統(tǒng),其中被配置為由加載器組件接收將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的請求的裝置包括被配置為從用戶軟件組件接收斷開連接調(diào)用的裝置;以及被配置為從用戶軟件組件接收連接調(diào)用的裝置。17.如權(quán)利要求10中所述的系統(tǒng),其中被配置為由加載器組件接收將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的請求的裝置包括被配置為從軟件組件接收任何調(diào)用的裝置。18.如權(quán)利要求10中所述的系統(tǒng),進(jìn)一步包括被配置為根據(jù)新加載的綁定組件的需要,將內(nèi)部狀態(tài)數(shù)據(jù)結(jié)構(gòu)從其當(dāng)前形式遷移到新形式的裝置。19.如權(quán)利要求18中所述的系統(tǒng),其中執(zhí)行遷移所需的邏輯由綁定組件的每個(gè)版本提{共。20.如權(quán)利要求10中所述的系統(tǒng),進(jìn)一步包括被配置為使用程序版本表存儲(chǔ)用于相應(yīng)程序的特定庫版本的裝置;其中被配置為由加載器組件識(shí)別觸發(fā)器的裝置包括被配置為從已識(shí)別的軟件組件接收應(yīng)用編程接口調(diào)用的裝置;以及被配置為由加載器組件選擇所需的被請求庫版本的裝置包括被配置為根據(jù)庫版本變量的值選擇所需庫版本的裝置。全文摘要?jiǎng)討B(tài)軟件版本選擇是通過將綁定庫與軟件組件關(guān)聯(lián)來執(zhí)行的。所述綁定庫包括加載器組件和綁定組件,其中所述加載器組件充當(dāng)軟件組件和綁定組件之間的中介,所述綁定組件包括軟件組件端邏輯。動(dòng)態(tài)軟件版本選擇進(jìn)一步包括加載器組件中判定將庫從綁定組件加載到處理設(shè)備的存儲(chǔ)器的邏輯,以及由加載器組件選擇所需的被請求庫版本,其中所需庫版本是從與綁定庫的綁定組件關(guān)聯(lián)的至少兩個(gè)庫版本中選擇的。仍進(jìn)一步地,動(dòng)態(tài)軟件版本選擇包括在不需要重新啟動(dòng)關(guān)聯(lián)的軟件組件的情況下,將所需庫版本加載到計(jì)算機(jī)處理系統(tǒng)的存儲(chǔ)器。文檔編號(hào)G06F9/445GK102567015SQ20111035997公開日2012年7月11日申請日期2011年11月14日優(yōu)先權(quán)日2010年12月31日發(fā)明者D·G·沃德,S·J·韋勃申請人:國際商業(yè)機(jī)器公司