一種支持軟件動態更新的服務構件架構方法
【專利摘要】本發明公開了一種支持軟件動態更新的服務構件架構方法。本發明通過擴展現有的服務構件架構SCA(Service?ComponentArchitecture)規范,增加了支持動態更新的事務模型、構件生命周期模型,最終在SCA的一個開源實現Apache?Tuscany上實現支持動態更新的Conup平臺,使其能一致、高效地支持構件動態更新。
【專利說明】一種支持軟件動態更新的服務構件架構方法
【技術領域】
[0001]本發明涉及一種支持軟件動態更新的服務構件架構技術,屬于軟件維護【技術領域】。
【背景技術】
[0002]基于構件的軟件開發CBSD (Component-Based Software Development)技術被認為是提高軟件開發效率和質量的有效途徑,并獲得廣泛的關注與應用,產生了諸多構件模型和構件框架。但隨著Internet/WWW逐步演化為開放的計算平臺,源于傳統靜態環境的CBSD難以充分應對開放網絡環境下用戶需求和軟件平臺的動態、多變性。
[0003]應對需求和環境變更的一個有效途徑是允許運行中的構件系統能夠動態地更新。主流的構件模型和構件框架對動態更新支持薄弱,而學術界研究所假設的模型過于簡化難以實際應用。為此,本發明擴展了服務構件架構SCA(Service Component Architecture),使其能完整的支持高效、一致的構件動態更新。
【發明內容】
[0004]本發明所要解決的技術問題是在不中斷系統正常運行的需求下,提供一種支持構件動態更新的方法,使得能夠支持高效、一致的構件動態更新。
[0005]本發明所述的一種支持軟件動態更新的服務構件架構方法,包含如下特征:
[0006]步驟1、為分布式事務定義具體的事務狀態、事務狀態跳轉語義以及事務狀態傳遞等,以抽象的描述構件業務邏輯在運行時刻的進展情況,從而可以根據當前構件上的事務上下文判斷構件是否達到可更新的安全狀態;
[0007]步驟2、當事務依賴信息和狀態發生改變時,通知事務管理器進行處理;
[0008]步驟3、定義構件生命周期器,支持完整的構件更新過程,它包括了更新所需的構件狀態、構件狀態跳轉語義;
[0009]步驟4、當目標構件收到更新請求,通知構件生命周期管理器;
[0010]步驟5、更新完成,返回更新結果。
[0011]上述步驟I具體包括:
[0012]步驟1-1、將分布式事務區分為根事務和本地事務;
[0013]步驟1-2、對于根事務,當根構件接收到來自外界客戶端的業務邏輯請求時,一旦該請求被允許在根構件上運行,則該事務進入Initiated狀態;當根事務一旦開始執行,該事務即進入RootTxStarted狀態;在根構件恰好準備第一次調用遠程構件之前,該事務即被標記為FirstRequest,其含義為根構件將要第一次發生遠程調用;根事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,根事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦根事務正在等待的一個遠程事務結束返回,根事務即轉入RemoteTxEnded狀態,用于標識根事務剛結束了一次遠程調用;根事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當根事務結束時,它便轉入Ended狀態;
[0014]步驟1-3、對于本地事務,當一個構件被其他構件要求在本地發起一個子事務時,一旦該子事務被允許在本地發起,該本地事務即進入Initiated狀態;當構件上的本地子事務一旦開始執行,該事務即被標記為LocalTxStarted狀態;本地事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,本地事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦本地事務正在等待的一個遠程事務結束返回,該事務即轉入RemoteTxEnded狀態,用于標識事務剛結束了一次遠程調用;本地事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當本地事務結束時,它便轉入Ended狀態;本地事務進入Ended狀態,貝丨J意味著執行結束返回,該狀態將會觸發父事務進入RemoteTxEnded狀態;
[0015]步驟1-4、對于事務狀態傳遞,當一個根事務在發起遠程子事務時,需要將當前事務標記為RemoteTxStarted狀態,將欲發起的子事務標記為Initiated狀態并保存該子事務所在的構件,將相關的根事務信息和當前事務信息(即子事務的父事務信息)傳遞給相應的遠程事務;當一個父事務在發起遠程事務時,需要將當前事務標記為RemoteTxStarted狀態,將欲發起的子事務標記為Initiated狀態并保存該子事務所在的構件,將相關的根事務信息以及當前事務信息傳遞給相應的遠程事務;當一個本地子事務Initiated時,需要為該本地事務建立事務上下文,保存從父事務傳遞過來的根事務信息、父事務信息、當前事務信息等;當一個本地子事務Ended時,需要將當前事務標記為Ended狀態,并通知其父事務該子事務的結束;
[0016]步驟1-5、對于任一事務,均能形成其事務上下文,具體包括當前事務的狀態、構件依賴信息、根事務信息、父事務信息以及所有的子事務狀態。
[0017]上述步驟2具體步驟包括:
[0018]步驟2-1、當事務依賴信息發生變化時,它應通知事務依賴管理器(TxD印Monitor)進行存儲變化的構件依賴信息;
[0019]步驟2-2、當事務狀態發生變化時,它應通知事務生命周期管理器(TxLifeManager),事務生命周期管理器通過調用動態依賴管理器(DynamicDependenceManager)來調用當前配置的動態更新算法,進而允許更新能夠根據事務狀態信息動態的維護依賴信息,并借助通信器中的依賴通知服務(DepNotifyService)通知其他構件事務依賴信息的變化。
[0020]上述步驟3具體包括:
[0021]步驟3-1、將需要執行更新的構件稱為目標構件,將為完成更新操作而受目標構件影響的構件統稱為非目標構件,并分別為目標構件和非目標構件定義與動態更新相關的構件生命周期;
[0022]步驟3-2、對于構件狀態及跳轉語義,構件在沒有動態更新請求的正常運行狀態稱之為Normal狀態;目標構件從收到動態更新請求至構件采用合適的動態更新算法“按需(Ondemand) ”進行算法初始化、建立可能需要的動態依賴信息完成,將這中間的狀態稱之為Ondemand狀態,對于Ondemand過程所執行的具體操作、依賴信息的建立與維護往往依賴于特定的動態更新算法;構件經過Ondemand設置過程之后,構件即進入Valid狀態,在此狀態下,構件認為接收到了動態更新請求,需要為動態更新做準備,因此構件將會根據當前采用的動態更新算法,為當前每個正在運行的事務維護事務信息和動態依賴信息;當目標構件進入Valid狀態時,還存在后續狀態需要轉換,而對非目標構件,在進入Valid狀態后,便只需一直維護事務上下文、動態依賴信息,直至目標構件通知其遠程更新操作完成,才將其轉換為Normal狀態;構件上正在運行的事務必須滿足一定的條件才允許對構件進行更新,將滿足更新條件的時刻稱為安全點,當允許更新時,稱構件達到了 Free狀態;當構件達到Free狀態后,意味著可以對其執行更新操作,在開始執行更新時,需要將構件狀態轉換為Updating狀態;更新操作完成時,需要清除為動態更新所分配的對象等,在清除工作完成時,目標構件即轉入Updated狀態;動態更新過程中,非目標構件往往會建立與目標構件之間的依賴關系,并且非目標構件會進入非正常運行狀態,因此在更新完成之后,目標構件需要首先激活被其影響的非目標構件集合,然后目標構件將自身激活并轉為Normal狀態;當非目標構件收到來自目標構件的激活請求時,將清除已經維護的并放棄正在維護的動態依賴信息,然后將自身轉入Normal狀態。
[0023]上述步驟4具體步驟包括:
[0024]步驟4-1、當目標構件的構件更新服務(ComponentUpdateService)收到更新請求時,通知其構件生命周期管理器(CompLifecycleManager),構件生命周期管理器通過調用按需設置管理器(OndemandSetupHelper),進而調用當前配置的動態更新算法的按需設置(OndemandSetup)進行Ondemand過程,此處構件之間的Ondemand過程的協同通過通信器中的按需協議服務(OndemandProtocol)完成;
[0025]步驟4-2、按需設置完成后,動態依賴管理器將根據當前配置的算法和達到Free狀態的策略,使得構件達到Free狀態;
[0026]步驟4-3、在構件達到Free狀態后,將觸發構件生命周期管理器執行構件更新;
[0027]步驟4-4、更新完成之后,動態依賴管理器將調用更新算法激活非目標構件,最終激活目標構件自身。
【專利附圖】
【附圖說明】
[0028]圖1顯示了本發明的根事務狀態定義與跳轉語義。
[0029]圖2顯示了本地事務狀態定義與跳轉語義。
[0030]圖3顯示了目標構件的狀態定義與跳轉語義。
[0031]圖4顯示了非目標構件的狀態定義與跳轉語義。
[0032]圖5顯示了本發明增加的動態更新模塊。
【具體實施方式】
[0033]以下結合附圖和具體實施例對本發明作進一步詳細說明。
[0034]對于更新的目標構件,其構件生命周期存在的狀態與跳轉語義如圖3所示,具體解釋如下:[0035]I)構件沒有收到動態更新請求時,處于Normal狀態;
[0036]2)構件收到更新請求時,進行更新初始化的過程中,處于Ondemand狀態;
[0037]3)更新初始化完成,構件進入Valid狀態;
[0038]4)構件達到可以進行更新的安全狀態,構件進入Free狀態;
[0039]5)正在執行更新過程中,構件處于Updating狀態;
[0040]6)更新完成、但在清除更新相關的數據過程中,構件處于Updated狀態。
[0041]對于非目標構件,其構件生命周期存在的狀態與跳轉語義如圖4所示,具體解釋如下:
[0042]I)構件沒有收到更新請求,也沒有收到來自其他構件的Ondemand設置請求,則構件處于Normal狀態;
[0043]2)構件收到來自其他構件的Ondemand設置請求,則構件進入Ondemand狀態;
[0044]3) Ondemand設置完成,則構件進入Valid狀態。
[0045]在沒有動態更新請求時,構件系統的運行特征如下:
[0046]I)所有構件均處于Normal狀態;
[0047]2)將分布式事務區分為根事務和本地事務;
[0048]3)對于根事務,其存在的事務狀態及狀態跳轉語義具體如圖1所示。當根構件接收到來自外界客戶端的業務邏輯請求時,一旦該請求被允許在根構件上運行,則該事務進入Initiated狀態;當根事務一旦開始執行,該事務即進入RootTxStarted狀態;在根構件恰好準備第一次調用遠程構件之前,該事務即被標記為FirstRequest,其含義為根構件將要第一次發生遠程調用;根事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,根事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦根事務正在等待的一個遠程事務結束返回,根事務即轉入RemoteTxEnded狀態,用于標識根事務剛結束了一次遠程調用;根事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當根事務結束時,它便轉入Ended狀態;
[0049]4)對于本地事務,其存在的事務狀態及狀態跳轉語義具體如圖2所示。當一個構件被其他構件要求在本地發起一個子事務時,一旦該子事務被允許在本地發起,該本地事務即進入Initiated狀態;當構件上的本地子事務一旦開始執行,該事務即被標記為LocalTxStarted狀態;本地事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,本地事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦本地事務正在等待的一個遠程事務結束返回,該事務即轉入RemoteTxEnded狀態,用于標識事務剛結束了 一次遠程調用;本地事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當本地事務結束時,它便轉入Ended狀態;本地事務進入Ended狀態,則意味著執行結束返回,該狀態將會觸發父事務進入RemoteTxEnded狀態;[0050]5)對于任一事務,當其狀態發生變化時,只會調用事務管理器維護事務依賴信息和事務狀態?目息,如圖5所;
[0051]6)對于任一事務,當其試圖發起遠程調用時,實現的trace攔截器會在遠程調用請求中附加當前事務信息、根事務信息;當一個構件接收到事務請求時,trace攔截器從請求消息中讀取本地事務的父事務、根事務信息,將其作為本地事務上下文的部分信息。
[0052]當目標構件收到更新請求時,其具體步驟如下:
[0053]I)目標構件收到更新請求后,構件生命周期管理器首先加載新版本構件并生成與更新相關的對象;
[0054]2)目標構件的構件生命周期管理器會通過SPI調用動態依賴管理器,動態依賴管理器則調用當前配置的動態更新算法相關的Ondemand過程實現,進行Ondemand設置,最終目標構件與非目標構件均進入Valid狀態;
[0055]3)目標構件進入Valid狀態后,會根據當前配置的更新策略,使得目標構件達到允許更新的Free狀態(在達到Free狀態的過程中,trace攔截器將會通過動態依賴管理器間接調用動態更新算法以判斷是否需要對特定請求進行攔截);
[0056]4)目標構件達到Free狀態后,構件生命周期管理器負責對構件執行更新、清除與更新相關的?目息和數據等,最終構件達到Updated狀態;
[0057]5)目標構件更新、清除完成后,向非目標構件發送激活通知,非目標構件和目標構件依次將其轉為Normal狀態,至此更新完成;
[0058]6)從Free狀態至Normal狀態過程中,trace通過動態依賴管理器間接調用動態更新算法以判斷是否需要對特定請求進行攔`截。
[0059]以上實施例只是對于本發明的部分功能進行描述,但實施例和附圖并不是用來限定本發明的。在不脫離本發明之精神和范圍內,所做的任何等效變化或潤飾,同樣屬于本發明之保護范圍。因此本發明的保護范圍應當以本申請的權利要求所界定的內容為標準。
【權利要求】
1.一種支持軟件動態更新的服務構件架構方法,其特征在于: 步驟1、為分布式事務定義具體的事務狀態、事務狀態跳轉語義以及事務狀態傳遞等,以抽象的描述構件業務邏輯在運行時刻的進展情況,從而可以根據當前構件上的事務上下文判斷構件是否達到可更新的安全狀態; 步驟2、當事務依賴信息和狀態發生改變時,通知事務管理器進行處理; 步驟3、定義構件生命周期器,支持完整的構件更新過程,它包括了更新所需的構件狀態、構件狀態跳轉語義; 步驟4、當目標構件收到更新請求,通知構件生命周期管理器; 步驟5、更新完成,返回更新結果。
2.根據權利要求1所述的服務構件架構方法,其特征在于,步驟I具體包括: 步驟1-1、將分布式事務區分為根事務和本地事務; 步驟1-2、對于根事務,當根構件接收到來自外界客戶端的業務邏輯請求時,一旦該請求被允許在根構件上運行,則該事務進入Initiated狀態;當根事務一旦開始執行,該事務即進入RootTxStarted狀態;在根構件恰好準備第一次調用遠程構件之前,該事務即被標記為FirstRequest,其含義為根構件將要第一次發生遠程調用;根事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,根事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦根事務正在等待的一個遠程事務結束返回,根事務即轉入RemoteTxEnded狀態,用于標識根事務剛結束了一次遠程調用;根事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當根事務結束時,它便轉入Ended狀態; 步驟1-3、對于本地事務,當一個構件被其他構件要求在本地發起一個子事務時,一旦該子事務被允許在本地發起,該本地事務即進入Initiated狀態;當構件上的本地子事務一旦開始執行,該事務即被標記為LocalTxStarted狀態;本地事務可能需要向遠程構件發起遠程事務請求,一旦該請求發送出去,本地事務即轉入RemoteTxStarted狀態,用于標識當前構件正在等待一個遠程事務結束的過程中;一旦本地事務正在等待的一個遠程事務結束返回,該事務即轉入RemoteTxEnded狀態,用于標識事務剛結束了一次遠程調用;本地事務發起的遠程事務結束返回則意味著構件過去曾使用過某個遠程構件,即該事務對構件的動態依賴關系發生了變化,事務進入DependenceChanged,在該狀態下,如果該構件后面還會發起其他遠程調用時,則該事務的后續狀態會轉為RemoteTxStarted,否則該事務等待進入Ended狀態;當本地事務結束時,它便轉入Ended狀態;本地事務進入Ended狀態,則意味著執行結束返回,該狀態將會觸發父事務進入RemoteTxEnded狀態; 步驟1-4、對于事務狀態傳遞,當一個根事務在發起遠程子事務時,需要將當前事務標記為RemoteTxStarted狀態,將欲發起的子事務標記為Initiated狀態并保存該子事務所在的構件,將相關的根事務信息和當前事務信息(即子事務的父事務信息)傳遞給相應的遠程事務;當一個父事務在發起遠程事務時,需要將當前事務標記為RemoteTxStarted狀態,將欲發起的子事務標記為Initiated狀態并保存該子事務所在的構件,將相關的根事務信息以及當前事務信息傳遞給相應的遠程事務;當一個本地子事務Initiated時,需要為該本地事務建立事務上下文,保存從父事務傳遞過來的根事務信息、父事務信息、當前事務信息等;當一個本地子事務Ended時,需要將當前事務標記為Ended狀態,并通知其父事務該子事務的結束; 步驟1-5、對于任一事務,均能形成其事務上下文,具體包括當前事務的狀態、構件依賴信息、根事務信息、父事務信息以及所有的子事務狀態。
3.根據權利要求1所述的服務構件架構方法,其特征在于,步驟2具體步驟包括: 步驟2-1、當事務依賴信息發生變化時,它應通知事務依賴管理器(TxDepMonitor)進行存儲變化的構件依賴信息; 步驟2-2、當事務狀態發生變化時,它應通知事務生命周期管理器(TxLifeManager),事務生命周期管理器通過調用動態依賴管理器(DynamicDependenceManager)來調用當前配置的動態更新算法,進而允許更新能夠根據事務狀態信息動態的維護依賴信息,并借助通信器中的依賴通知服務(DepNotifyService)通知其他構件事務依賴信息的變化。
4.根據權利要求1所述的服務構件架構方法,其特征在于,步驟3具體包括: 步驟3-1、將需要執行更新的構件稱為目標構件,將為完成更新操作而受目標構件影響的構件統稱為非目標構件,并分別為目標構件和非目標構件定義與動態更新相關的構件生命周期;` 步驟3-2、對于構件狀態及跳轉語義,構件在沒有動態更新請求的正常運行狀態稱之為Normal狀態;目標構件從收到動態更新請求至構件采用合適的動態更新算法“按需(Ondemand) ”進行算法初始化、建立可能需要的動態依賴信息完成,將這中間的狀態稱之為Ondemand狀態,對于Ondemand過程所執行的具體操作、依賴信息的建立與維護往往依賴于特定的動態更新算法;構件經過Ondemand設置過程之后,構件即進入Valid狀態,在此狀態下,構件認為接收到了動態更新請求,需要為動態更新做準備,因此構件將會根據當前采用的動態更新算法,為當前每個正在運行的事務維護事務信息和動態依賴信息;當目標構件進入Valid狀態時,還存在后續狀態需要轉換,而對非目標構件,在進入Valid狀態后,便只需一直維護事務上下文、動態依賴信息,直至目標構件通知其遠程更新操作完成,才將其轉換為Normal狀態;構件上正在運行的事務必須滿足一定的條件才允許對構件進行更新,將滿足更新條件的時刻稱為安全點,當允許更新時,稱構件達到了 Free狀態;當構件達到Free狀態后,意味著可以對其執行更新操作,在開始執行更新時,需要將構件狀態轉換為Updating狀態;更新操作完成時,需要清除為動態更新所分配的對象等,在清除工作完成時,目標構件即轉入Updated狀態;動態更新過程中,非目標構件往往會建立與目標構件之間的依賴關系,并且非目標構件會進入非正常運行狀態,因此在更新完成之后,目標構件需要首先激活被其影響的非目標構件集合,然后目標構件將自身激活并轉為Normal狀態;當非目標構件收到來自目標構件的激活請求時,將清除已經維護的并放棄正在維護的動態依賴信息,然后將自身轉入Normal狀態。
5.根據權利要求1所述的服務構件架構方法,其特征在于,步驟4具體包括: 步驟4-1、當目標構件的構件更新服務(ComponentUpdateService)收到更新請求時,通知其構件生命周期管理器(CompLifecycleManager),構件生命周期管理器通過調用按需設置管理器(OndemandSetupHelper),進而調用當前配置的動態更新算法的按需設置(OndemandSetup)進行Ondemand過程,此處構件之間的Ondemand過程的協同通過通信器中的按需協議服務(OndemandProtocol)完成; 步驟4-2、按需設置完成后,動態依賴管理器將根據當前配置的算法和達到Free狀態的策略,使得構件達到Free狀態; 步驟4-3、在構件達到Free狀態后,將觸發構件生命周期管理器執行構件更新; 步驟4-4、更新完成之后,動態依賴 管理器將調用更新算法激活非目標構件,最終激活目標構件自身。
【文檔編號】G06F9/44GK103500084SQ201310290619
【公開日】2014年1月8日 申請日期:2013年7月11日 優先權日:2013年7月11日
【發明者】呂建, 馬曉星, 曹春 申請人:南京大學