專利名稱:軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域的方法,具體是一種軟件動(dòng)態(tài)更新中確 定實(shí)例對(duì)象轉(zhuǎn)換次序的方法及系統(tǒng)。
背景技術(shù):
軟件構(gòu)件技術(shù)的產(chǎn)生,使得可以依據(jù)一些關(guān)注分離規(guī)則將一個(gè)完整的應(yīng)用程 序劃分成適當(dāng)數(shù)目的軟件構(gòu)件模塊。這些構(gòu)件可以在不同的環(huán)境下獨(dú)立開(kāi)發(fā)和編 譯,并通過(guò)合適的組裝方式來(lái)搭建實(shí)際的應(yīng)用系統(tǒng),由此使構(gòu)件得以重用和共享, 其使用壽命也不再像傳統(tǒng)代碼模塊一樣受限于某個(gè)應(yīng)用程序。由于生存周期的延 長(zhǎng),構(gòu)件在其服役期間將可能需要得到更新,以便改進(jìn)構(gòu)件實(shí)現(xiàn)、提供新的功能、 糾正設(shè)計(jì)錯(cuò)誤及適應(yīng)運(yùn)行時(shí)環(huán)境的變化等。更為重要的是,在一些任務(wù)關(guān)鍵型應(yīng) 用領(lǐng)域,諸如金融數(shù)據(jù)處理系統(tǒng)、空中交通控制系統(tǒng)、航天探測(cè)器控制軟件、網(wǎng) 格和自治計(jì)算系統(tǒng)等,由于具有比較高的可用性需求,軟件構(gòu)件的更新必須在運(yùn) 行時(shí)完成而不導(dǎo)致系統(tǒng)的中斷,也就是需要進(jìn)行動(dòng)態(tài)更新。動(dòng)態(tài)更新將用構(gòu)件運(yùn) 行時(shí)實(shí)例的新版本來(lái)取代舊版本,而構(gòu)件的運(yùn)行時(shí)實(shí)例是通過(guò)某些服務(wù)對(duì)象(或 直接稱對(duì)象)來(lái)實(shí)現(xiàn)的。因此,動(dòng)態(tài)構(gòu)件更新將被具體化為活躍對(duì)象的更新。
通常,對(duì)單一構(gòu)件而言,動(dòng)態(tài)更新就是在運(yùn)行時(shí)為其提供新版本構(gòu)件實(shí)例, 并由對(duì)應(yīng)的轉(zhuǎn)換函數(shù)依據(jù)各舊版本對(duì)象的當(dāng)前狀態(tài),來(lái)初始化從屬于該構(gòu)件的所 有新對(duì)象。但是,由于構(gòu)件之間存在的交互依賴關(guān)系,完整的系統(tǒng)更新將往往包 含不止一個(gè)構(gòu)件的更新,而是要求轉(zhuǎn)換相關(guān)舊版本構(gòu)件提供的所有對(duì)象。并且由 于高可用性需求,在更新過(guò)程中應(yīng)當(dāng)盡量避免應(yīng)用的延遲。 一種較為合理的更新 方式是懶更新(lazyupgrade),對(duì)于每個(gè)活躍對(duì)象,都恰好在應(yīng)用過(guò)程或者其他 更新過(guò)程訪問(wèn)它之前進(jìn)行轉(zhuǎn)換,從而確保在更新開(kāi)始之后才啟動(dòng)的應(yīng)用不會(huì)訪問(wèn) 到未被更新的對(duì)象,也使得應(yīng)用過(guò)程不會(huì)因整個(gè)系統(tǒng)的更新而被極大地延遲。構(gòu) 件的關(guān)注分離特性表現(xiàn)在接口與實(shí)現(xiàn)的分離,因而構(gòu)件更新可以包括內(nèi)部實(shí)現(xiàn)的 改進(jìn)和接口的改變,而接口的改變有時(shí)可以是不兼容的。并且,構(gòu)件更新時(shí),用
于提供狀態(tài)轉(zhuǎn)換等功能的轉(zhuǎn)換函數(shù),其實(shí)現(xiàn)不僅取決于被更新的對(duì)象本身,而且
往往還依賴于構(gòu)件的其他對(duì)象甚至其他構(gòu)件所提供的對(duì)象。因此,為不致使在更
新實(shí)際對(duì)象時(shí)因碰到不兼容的更新而導(dǎo)致失敗,一種比較合理的方式是在更新實(shí)
施之前,確定各個(gè)對(duì)象被轉(zhuǎn)換的次序,以保證安全的構(gòu)件更新。目前大多數(shù)與構(gòu)
件化軟件動(dòng)態(tài)更新相關(guān)的工作都重點(diǎn)關(guān)注新版本構(gòu)件模塊的加載和替換操作,而
往往把合理對(duì)象轉(zhuǎn)換次序的確定這一確保安全動(dòng)態(tài)更新的問(wèn)題留給更新管理員,
甚或完全忽略。
經(jīng)對(duì)現(xiàn)有技術(shù)文獻(xiàn)的檢索發(fā)現(xiàn),德國(guó)柏林工業(yè)大學(xué)(Technischen University Berlin)的Marcin Solarski博士在其2004年的博士論文"Dynamic Upgrade of Distributed Software Components"(分布式軟件構(gòu)件的動(dòng)態(tài)更新)中詳細(xì)闡述了 構(gòu)件作為動(dòng)態(tài)更新單元進(jìn)行動(dòng)態(tài)更新時(shí)需要滿足的各種功能和非功能性需求,并 且提出了一套更新的方法論模型。但在其模型中并未就構(gòu)件之間的運(yùn)行時(shí)依賴對(duì) 動(dòng)態(tài)更新的影響給出詳細(xì)討論,更沒(méi)有對(duì)運(yùn)行時(shí)構(gòu)件更新中活躍對(duì)象的轉(zhuǎn)換次序 給出合適的處理方法。
經(jīng)檢索還發(fā)現(xiàn),Chandrasekhar Boyapati等在2003年"Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications" (ACM SIGPLAN面向?qū)ο蟪绦蛟O(shè)計(jì)、系統(tǒng)、語(yǔ)言及應(yīng)用年會(huì))會(huì) 議論文集(Proceeding of OOPSLA,03)第403到417頁(yè)上發(fā)表的"Lazy Modular Upgrades in Persistent Object Stores"(持久對(duì)象存儲(chǔ)中模塊的懶更新),該文章中 對(duì)面向?qū)ο髷?shù)據(jù)庫(kù)(OODB)中持久對(duì)象的更新進(jìn)行了討論,研究了對(duì)象與其子 對(duì)象之間的更新次序問(wèn)題,能靜態(tài)保證單個(gè)類中更新語(yǔ)義的正確性。但其不足之 處在于,由于將每一個(gè)類的轉(zhuǎn)換都作為一個(gè)獨(dú)立的更新事務(wù),并且缺乏運(yùn)行時(shí)對(duì) 象間動(dòng)態(tài)依賴性信息,僅能從靜態(tài)角度為單個(gè)類中各對(duì)象和子對(duì)象的轉(zhuǎn)換提供安 全性保證。
發(fā)明內(nèi)容
本發(fā)明針對(duì)上述現(xiàn)有技術(shù)存在的不足,提供一種軟件動(dòng)態(tài)更新中確定實(shí)例對(duì) 象轉(zhuǎn)換次序的方法及系統(tǒng),通過(guò)在構(gòu)件的服務(wù)接口中添加新接口,當(dāng)構(gòu)件提供的 對(duì)象被調(diào)用或構(gòu)件類被實(shí)例化為服務(wù)對(duì)象時(shí)發(fā)出通知事件,并由確定實(shí)例對(duì)象轉(zhuǎn) 換次序的系統(tǒng)中所包含的服務(wù)調(diào)用監(jiān)聽(tīng)模塊監(jiān)聽(tīng)這類事件,以動(dòng)態(tài)獲取活躍對(duì)象
之間的依賴性信息,并在更新時(shí)據(jù)此給出合理的對(duì)象轉(zhuǎn)換次序。
本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的
本發(fā)明涉及的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法,包括以下步驟
步驟一,服務(wù)調(diào)用監(jiān)聽(tīng)通過(guò)開(kāi)發(fā)階段向構(gòu)件所包含的類文件中增加接口方 法,在系統(tǒng)運(yùn)行時(shí)監(jiān)控該構(gòu)件所提供全部服務(wù)對(duì)象的生存周期,獲取這些方法的 執(zhí)行所產(chǎn)生的事件消息,得到對(duì)象引用信息和引用終止信息;
所述構(gòu)件,是指包含契約指定接口和顯示環(huán)境依賴的軟件單元,對(duì)外提供兩 類接口服務(wù)請(qǐng)求接口和服務(wù)提供接口,其組成包括構(gòu)件類文件(實(shí)現(xiàn)設(shè)計(jì)規(guī) 范中功能需求所必須的資源)、構(gòu)件描述文件、其他輔助目錄和文件。本發(fā)明中 的運(yùn)行時(shí)僅更新由應(yīng)用程序員開(kāi)發(fā)、組成實(shí)際應(yīng)用系統(tǒng)的應(yīng)用構(gòu)件,而不更新組 成軟件運(yùn)行平臺(tái)的底層系統(tǒng)構(gòu)件,這與軟件系統(tǒng)的實(shí)際情況相符合。
所述增加接口方法,包括對(duì)象引用宣告方法和對(duì)象引用終止方法,這兩類 方法在編寫(xiě)構(gòu)件類文件時(shí)由應(yīng)用開(kāi)發(fā)程序員手動(dòng)添加,其中
對(duì)象引用宣告方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用位于類的初始化模塊,對(duì)象引用宣告方法最終將對(duì)象引用信息包含在消息事件 中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊,其中,初始化模塊是指在一個(gè)類聲明中包含的獨(dú)立 代碼塊,只要構(gòu)造類的對(duì)象,初始化模塊就會(huì)被執(zhí)行。
對(duì)象引用終止方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用將由應(yīng)用開(kāi)發(fā)程序員手動(dòng)設(shè)置,對(duì)象引用終止方法最終將引用終止信息包含在 消息事件中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊。
所述對(duì)象的生存周期,是指從主調(diào)對(duì)象通過(guò)創(chuàng)建或服務(wù)引用而獲取被調(diào)對(duì)象, 一直到被調(diào)對(duì)象在主調(diào)對(duì)象中不再起作用時(shí)的一段時(shí)間,其中,主調(diào)對(duì)象是指請(qǐng)求服務(wù)的其他對(duì)象,被調(diào)對(duì)象則指當(dāng)前對(duì)象。
所述對(duì)象引用信息,是指在通過(guò)初始創(chuàng)建或服務(wù)引用而獲取被調(diào)對(duì)象時(shí),用 于聲明這一初始化事件的信息,對(duì)象引用信息包括:類別為引用生成的消息類別、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身份標(biāo)識(shí)、被調(diào)對(duì)象初始創(chuàng)建的時(shí)間戳。
所述引用終止信息,是指在之前創(chuàng)建和引用的被調(diào)對(duì)象不再在主調(diào)對(duì)象中起 作用時(shí),用于宣告被調(diào)對(duì)象引用終止事件的信息,引用終止信息包括類別為引
用終止的消息類別、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身份標(biāo)識(shí)、被調(diào)對(duì)象引用 終止時(shí)的時(shí)間戳。
所述身份標(biāo)識(shí),是指在對(duì)象新創(chuàng)建時(shí)由系統(tǒng)運(yùn)行平臺(tái)為其指定的身份標(biāo)識(shí), 并且這一標(biāo)識(shí)具有唯一性,不會(huì)與當(dāng)前已存在的其他對(duì)象相同。
步驟二,分別比較對(duì)象引用信息中的被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份 標(biāo)識(shí),當(dāng)消息類別為引用生成,且被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí)分 別與另一對(duì)象引用信息完全相同,則認(rèn)為該對(duì)象引用信息是冗余信息,刪除該冗 余的對(duì)象引用信息,然后將剩余不存在冗余的對(duì)象引用信息逐個(gè)與所有引用終止 信息進(jìn)行匹配性驗(yàn)證,若驗(yàn)證通過(guò),則刪除相匹配的對(duì)象引用信息和引用終止信 息;若驗(yàn)證未通過(guò),則保留該對(duì)象引用信息,得到當(dāng)前實(shí)際存在的活躍對(duì)象的對(duì) 象引用信息;
所述匹配性驗(yàn)證,是指驗(yàn)證對(duì)象引用信息是否滿足下述所有條件①消息類 別為引用生成;②被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí)分別與某個(gè)引用終 止信息中的相同;③對(duì)象引用信息中的被調(diào)對(duì)象初始創(chuàng)建的時(shí)間戳早于被比較引 用終止信息中的被調(diào)對(duì)象引用終止時(shí)的時(shí)間戳。
所述活躍對(duì)象,是指在系統(tǒng)運(yùn)行過(guò)程中某個(gè)時(shí)間區(qū)間內(nèi),因被其他對(duì)象引用 或正在引用其他對(duì)象而實(shí)際起作用的對(duì)象。
步驟三,逐個(gè)比較對(duì)象引用信息中所包含的被調(diào)對(duì)象身份標(biāo)識(shí)與主調(diào)對(duì)象身 份標(biāo)識(shí),結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,區(qū)分各個(gè)對(duì)象引用信息的屬性,即判斷各個(gè) 對(duì)象是否屬于某一構(gòu)件的內(nèi)部對(duì)象的引用,或者是否屬于不同構(gòu)件間對(duì)象的引 用,以獲得系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系;
步驟四,當(dāng)采用惰更新時(shí),系統(tǒng)中的應(yīng)用過(guò)程或其他對(duì)象轉(zhuǎn)換正準(zhǔn)備調(diào)用一 個(gè)待更新的對(duì)象而觸發(fā)具體對(duì)象更新,結(jié)合步驟三獲得的活躍對(duì)象依賴關(guān)系驗(yàn)證 更新的完整性,運(yùn)用類型檢査規(guī)則驗(yàn)證對(duì)象引用關(guān)系是否因不兼容接口的引入而 受到影響,如果受到影響則相關(guān)對(duì)象必須進(jìn)行更新,通過(guò)驗(yàn)證以確保當(dāng)前更新包 含所有待更新活躍對(duì)象的更新包和轉(zhuǎn)換函數(shù),如果完整性驗(yàn)證通過(guò),則繼續(xù)進(jìn)行 下一步;否則,如果更新不完整,則產(chǎn)生異常信息,退出更新過(guò)程;
所述更新,其目的是改進(jìn)構(gòu)件實(shí)現(xiàn)、提供新的功能、糾正設(shè)計(jì)錯(cuò)誤或適應(yīng)運(yùn) 行時(shí)環(huán)境的變化等,包含對(duì)象的取代和具體的轉(zhuǎn)換過(guò)程。動(dòng)態(tài)更新就是在運(yùn)行時(shí) 為其提供新版本構(gòu)件實(shí)例,并由對(duì)應(yīng)的轉(zhuǎn)換函數(shù)依據(jù)各舊版本對(duì)象的當(dāng)前狀態(tài), 來(lái)初始化從屬于該構(gòu)件的所有新對(duì)象。
所述惰更新,是指當(dāng)系統(tǒng)提交一個(gè)更新時(shí),所涉及的所有對(duì)象暫不實(shí)施具體 更新而將更新掛起,直到有具體應(yīng)用或其他對(duì)象轉(zhuǎn)換調(diào)用對(duì)象時(shí),才實(shí)施給對(duì)象 的具體更新。
所述更新的完整性,是指當(dāng)更新引入不兼容的接口時(shí), 一些對(duì)象的行為將發(fā) 生改變,這會(huì)影響到其他的類對(duì)象對(duì)這些對(duì)象的引用,并且也會(huì)影響由該對(duì)象所 屬類繼承而來(lái)的子類對(duì)象,此時(shí)必需更新所有受到影響的對(duì)象。
步驟五,根據(jù)對(duì)象間運(yùn)行時(shí)依賴信息以及安全對(duì)象更新條件,獲得構(gòu)件更新 次序,,包括單一構(gòu)件所包含的各個(gè)對(duì)象之間的更新執(zhí)行次序以及組成整個(gè)系統(tǒng) 的各個(gè)構(gòu)件所包含的對(duì)象之間的更新執(zhí)行次序。
所述安全對(duì)象更新條件,是指為確保動(dòng)態(tài)更新不違背更新語(yǔ)義、不會(huì)因更新 而導(dǎo)致系統(tǒng)運(yùn)行停止而設(shè)置的約束,具體包括四個(gè)條件
① 對(duì)于單個(gè)對(duì)象,先提交但被掛起的更新必須先于后提交的更新而被執(zhí)行;
② 在某個(gè)具體更新被提交之后啟動(dòng)的應(yīng)用過(guò)程,當(dāng)需要調(diào)用該更新所影響到 的對(duì)象時(shí),總是先執(zhí)行對(duì)應(yīng)這些對(duì)象的具體更新,然后才繼續(xù)應(yīng)用過(guò)程的執(zhí)行;
③ 在同一個(gè)完整更新中,當(dāng)某個(gè)對(duì)象(依賴對(duì)象)更新的具體執(zhí)行因轉(zhuǎn)換過(guò) 程需要而依賴于另一個(gè)對(duì)象(被依賴對(duì)象)時(shí),依賴對(duì)象的更新先于被依賴對(duì)象;
④ 如果對(duì)象之間不存在運(yùn)行時(shí)依賴,則其更新次序無(wú)要求。
本發(fā)明還涉及軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng),包括服務(wù)調(diào) 用監(jiān)聽(tīng)模塊、引用信息更新模塊、構(gòu)件依賴分析模塊、完整性驗(yàn)證模塊、更新次 序選擇模塊,其中,
服務(wù)調(diào)用監(jiān)聽(tīng)模塊在系統(tǒng)運(yùn)行時(shí)監(jiān)控構(gòu)件所提供全部服務(wù)對(duì)象的生存周期, 獲取由對(duì)象引用宣告方法和對(duì)象引用終止方法的執(zhí)行而產(chǎn)生的事件消息,進(jìn)行分 類存儲(chǔ),輸出所有對(duì)象引用信息和引用終止信息至引用信息更新模塊;
弓l用信息更新模塊比較并刪除冗余的對(duì)象引用信息,驗(yàn)證剩余非冗余的對(duì)象 引用信息與所有引用終止信息的匹配性,輸出實(shí)際存在的活躍對(duì)象引用信息至構(gòu) 件引用分析模塊;
構(gòu)件依賴分析模塊比較并區(qū)分各個(gè)對(duì)象引用信息的屬性,輸出系統(tǒng)運(yùn)行時(shí)所 有活躍對(duì)象的依賴關(guān)系信息至完整性驗(yàn)證模塊和更新次序選擇模塊;
完整性驗(yàn)證模塊根據(jù)實(shí)時(shí)獲取的系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息, 運(yùn)用類型檢査規(guī)則驗(yàn)證當(dāng)前更新包中是否含所有待更新活躍對(duì)象的更新包和轉(zhuǎn) 換函數(shù),輸出更新完整性驗(yàn)證結(jié)果到更新次序選擇模塊;
更新次序選擇模塊接收系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息,判定對(duì)象 安全更新條件的滿足性,輸出構(gòu)件更新次序。
所述引用信息更新模塊,從服務(wù)調(diào)用監(jiān)聽(tīng)模塊獲取所屬構(gòu)件所能提供全部服 務(wù)對(duì)象的對(duì)象引用信息和引用終止信息,通過(guò)比較分析排除被調(diào)和主調(diào)對(duì)象身份 標(biāo)識(shí)分別相同的冗余對(duì)象引用信息,然后刪除與每個(gè)引用終止信息相匹配的對(duì)象 引用信息,得到實(shí)際存在的活躍對(duì)象引用信息。
所述構(gòu)件依賴分析模塊,從每個(gè)構(gòu)件的引用信息更新模塊中獲取所在構(gòu)件正 在提供服務(wù)的活躍對(duì)象引用信息,結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,識(shí)別各個(gè)對(duì)象引用 是屬于同一構(gòu)件內(nèi)對(duì)象的引用還是不同構(gòu)件間對(duì)象的引用,得到系統(tǒng)運(yùn)行時(shí)所有 活躍對(duì)象的引用依賴信息,其中,構(gòu)件間靜態(tài)依賴關(guān)系是指應(yīng)用開(kāi)發(fā)時(shí),在構(gòu)件 描述文件中靜態(tài)指定的構(gòu)件間引用關(guān)系。
所述完整性驗(yàn)證模塊,從構(gòu)件依賴分析模塊獲取系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的 引用依賴信息,并結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,為確保更新完整性而驗(yàn)證當(dāng)前處理 的構(gòu)件更新包中是否包含所有受影響的構(gòu)件更新及其新版本類對(duì)象。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益效果
(1) 高度動(dòng)態(tài)特征。由于是在構(gòu)件開(kāi)發(fā)階段就在類文件中插入對(duì)象引用宣 告方法和對(duì)象引用終止方法,因此當(dāng)系統(tǒng)運(yùn)行過(guò)程中,可以在不對(duì)運(yùn)行時(shí)系統(tǒng)采 取任何外在干擾的情況下,動(dòng)態(tài)獲取構(gòu)件實(shí)例對(duì)象的動(dòng)態(tài)依賴關(guān)系。
(2) 易實(shí)現(xiàn)性和通用性。在構(gòu)件類文件中添加的對(duì)象引用宣告方法和對(duì)象 引用終止方法,由于其功能和調(diào)用方法相同,可以通用于所有構(gòu)件類文件,軟件 開(kāi)發(fā)人員無(wú)需為構(gòu)件中的每個(gè)類單獨(dú)定義方法,只需作為模板方法引入即可。
(3) 可適用性和可擴(kuò)展性。本發(fā)明所包含的方法可適用于所有應(yīng)用了面向 對(duì)象范型程序設(shè)計(jì)語(yǔ)言開(kāi)發(fā)的構(gòu)件和模塊化軟件系統(tǒng),并且通過(guò)簡(jiǎn)單增加分布性 和移動(dòng)性特征,就可以推廣擴(kuò)展到分布式環(huán)境和移動(dòng)計(jì)算系統(tǒng)。
圖1為本發(fā)明確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法流程圖。
圖2為本發(fā)明確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面結(jié)合附圖給出本發(fā)明實(shí)施例的詳細(xì)說(shuō)明和
具體實(shí)施例方式本實(shí)施例以本 發(fā)明所述及技術(shù)方案為前提進(jìn)行實(shí)施,給出詳細(xì)的實(shí)施方式和過(guò)程,但本發(fā)明的 保護(hù)范圍不限于以下實(shí)施例。
本實(shí)施例中的構(gòu)件實(shí)現(xiàn)采用Java程序設(shè)計(jì)語(yǔ)言和相關(guān)技術(shù)編寫(xiě),并基于開(kāi) 放式服務(wù)平臺(tái)OSGi (Open Service Gateway initiative,開(kāi)放服務(wù)網(wǎng)關(guān)平臺(tái))來(lái)實(shí) 施。每個(gè)構(gòu)件對(duì)應(yīng)于OSGi平臺(tái)中的服務(wù)Bundle,主要包含一些實(shí)現(xiàn)具體功能的 Java類文件、構(gòu)件描述文件和其他輔助目錄和文件(包括HTML文件、幫助文 檔、圖標(biāo)等)。每一個(gè)構(gòu)件都對(duì)應(yīng)著一個(gè)Bundle環(huán)境(BundleContext),包含關(guān) 于構(gòu)件的各種信息,如構(gòu)件標(biāo)識(shí)、構(gòu)件類型、所能提供的服務(wù)接口、交互信息、 通信機(jī)制等信息。對(duì)象的創(chuàng)建通過(guò)使用Java語(yǔ)言中的new方法,對(duì)象的引用通 過(guò)Bundle環(huán)境(BundleContext)中的getService方法,每個(gè)構(gòu)件的實(shí)例表現(xiàn)為 對(duì)象的一個(gè)集合。
本實(shí)施例中的每個(gè)構(gòu)件類的實(shí)現(xiàn)中都包含有一個(gè)對(duì)象引用宣告方法 refDeclare的聲明和定義,該方法提供所在類被實(shí)例化的信息,并通過(guò)在類中定 義一個(gè)初始化塊以便每次創(chuàng)建該類的對(duì)象時(shí)就執(zhí)行該方法;該方法返回的對(duì)象引 用信息包含消息類別(在此為引用生成)、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身 份標(biāo)識(shí)、被調(diào)對(duì)象被初始創(chuàng)建(通過(guò)new語(yǔ)句)或通過(guò)服務(wù)引用(通過(guò)getService 語(yǔ)句)方法而獲取時(shí)的時(shí)間戳。
并且每個(gè)構(gòu)件類中還包含有一個(gè)對(duì)象引用終止方法reffixpire的聲明和定義, 以及多個(gè)對(duì)該方法的調(diào)用;每個(gè)方法調(diào)用都對(duì)應(yīng)著所在類的業(yè)務(wù)邏輯對(duì)其他對(duì)象 引用的結(jié)束,并位于所引用對(duì)象開(kāi)始不再起作用的位置,以表明從該位置開(kāi)始相 應(yīng)對(duì)象不再在主調(diào)對(duì)象中被使用;該方法返回被調(diào)對(duì)象的引用終止信息。該信息
包含消息類別(在此為引用終止)、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身份標(biāo)識(shí)、 被調(diào)對(duì)象引用終止時(shí)的時(shí)間戳。
對(duì)象引用宣告方法和對(duì)象引用終止方法的執(zhí)行而得到的信息將被包含在消
息事件中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊。
如圖1所示,本實(shí)施例應(yīng)用在OSGi服務(wù)應(yīng)用系統(tǒng),所涉及的軟件動(dòng)態(tài)更新 中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法,包括以下步驟
步驟一,服務(wù)調(diào)用監(jiān)聽(tīng)通過(guò)開(kāi)發(fā)階段向構(gòu)件所包含的類文件中增加接口方 法,在系統(tǒng)運(yùn)行時(shí)監(jiān)控該構(gòu)件所提供全部服務(wù)對(duì)象的生存周期,獲取這些方法的 執(zhí)行所產(chǎn)生的事件消息,得到對(duì)象引用信息和引用終止信息;
所述構(gòu)件,是指包含契約指定接口和顯示環(huán)境依賴的軟件單元,對(duì)外提供兩 類接口服務(wù)請(qǐng)求接口和服務(wù)提供接口,其組成包括構(gòu)件類文件(實(shí)現(xiàn)設(shè)計(jì)規(guī) 范中功能需求所必須的資源)、構(gòu)件描述文件、其他輔助目錄和文件。本發(fā)明中 的運(yùn)行時(shí)僅更新由應(yīng)用程序員開(kāi)發(fā)、組成實(shí)際應(yīng)用系統(tǒng)的應(yīng)用構(gòu)件,而不更新組 成軟件運(yùn)行平臺(tái)的底層系統(tǒng)構(gòu)件,這與軟件系統(tǒng)的實(shí)際情況相符合。
所述增加接口方法,包括對(duì)象引用宣告方法和對(duì)象引用終止方法,這兩類 方法在編寫(xiě)構(gòu)件類文件時(shí)由應(yīng)用開(kāi)發(fā)程序員手動(dòng)添加,其中
對(duì)象引用宣告方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用位于類的初始化模塊,對(duì)象引用宣告方法最終將對(duì)象引用信息包含在消息事件 中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊,其中,初始化模塊是指在一個(gè)類聲明中包含的獨(dú)立 代碼塊,只要構(gòu)造類的對(duì)象,初始化模塊就會(huì)被執(zhí)行。
對(duì)象引用終止方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用將由應(yīng)用開(kāi)發(fā)程序員手動(dòng)設(shè)置,對(duì)象引用終止方法最終將引用終止信息包含在 消息事件中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊。
在系統(tǒng)運(yùn)行時(shí),構(gòu)件實(shí)現(xiàn)類中的refDeclare和reffixpire方法將因系統(tǒng)的執(zhí)行 而不斷被調(diào)用,并產(chǎn)生相應(yīng)的對(duì)象引用信息和引用終止信息,將這兩類信息表示 為四元組(msgType, invokedID, invokingID, timeValue},其中,msgType表不 消息類別,其值為用0表示"引用生成",用l表示"引用終止";invokedID和 invokingID分別為被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí);timeValue表示
被調(diào)對(duì)象被初始創(chuàng)建時(shí)或被調(diào)對(duì)象引用終止時(shí)的時(shí)間戳。
步驟二,分別比較對(duì)象引用信息中的被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份
標(biāo)識(shí),當(dāng)消息類別為引用生成,且被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí)分
別與另一對(duì)象引用信息完全相同,則認(rèn)為該對(duì)象引用信息是冗余信息,刪除該冗 余的對(duì)象引用信息,然后將剩余不存在冗余的對(duì)象引用信息逐個(gè)與所有引用終止 信息進(jìn)行匹配性驗(yàn)證,若驗(yàn)證通過(guò),則刪除相匹配的對(duì)象引用信息和引用終止信 息;若驗(yàn)證未通過(guò),則保留該對(duì)象引用信息,得到當(dāng)前實(shí)際存在的活躍對(duì)象的對(duì) 象引用信息;
收集所有的對(duì)象引用信息和引用終止信息,通過(guò)信息表示四元組中存儲(chǔ)的信 息進(jìn)行比較分析。先通過(guò)比較分析驗(yàn)證是否存在冗余的對(duì)象引用信息,也即兩個(gè) 對(duì)象引用信息的消息類別msgType、被調(diào)對(duì)象invokedID、主調(diào)對(duì)象invokingID 分別相同,僅時(shí)間戳timeValue存在差異。此時(shí),刪除時(shí)間戳較早的對(duì)象引用信 息,以避免同值消息的冗余。
先排除冗余,然后對(duì)每一條引用終止信息,就比較驗(yàn)證是否存在與其相匹配 的對(duì)象引用信息。如果存在對(duì)象引用信息滿足下列條件消息類別msgType = 0、invokedID和invokingID分別與對(duì)應(yīng)的引用終止信息相同、且時(shí)間戳timeValue 早于該引用終止信息的時(shí)間戳,則刪除此對(duì)象引用信息和對(duì)應(yīng)的引用終止信息。 重復(fù)這一過(guò)程,直至不再存在引用終止信息。
步驟三,逐個(gè)比較對(duì)象引用信息中所包含的被調(diào)對(duì)象身份標(biāo)識(shí)與主調(diào)對(duì)象身 份標(biāo)識(shí),結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,區(qū)分各個(gè)對(duì)象引用信息的屬性,即判斷各個(gè) 對(duì)象是否屬于某一構(gòu)件的內(nèi)部對(duì)象的引用,或者是否屬于不同構(gòu)件間對(duì)象的引 用,以獲得系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系;
根據(jù)各個(gè)對(duì)象引用的屬性,判定各個(gè)對(duì)象引用是屬于同一構(gòu)件內(nèi)對(duì)象的引用 還是不同構(gòu)件間對(duì)象的引用。得到系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息,并 生成活躍對(duì)象的依賴關(guān)系圖表示G氣F,&,&)。其中,F(xiàn)為圖節(jié)點(diǎn),表示所有運(yùn) 行時(shí)活躍對(duì)象;有向邊表示對(duì)象之間的引用關(guān)系,箭頭起點(diǎn)表示主調(diào)對(duì)象,終點(diǎn) 表示被調(diào)對(duì)象,其中,^為圖中的有向邊,表示同一構(gòu)件內(nèi)部對(duì)象之間的引用 依賴關(guān)系;五2為圖中的有向邊,表示不同構(gòu)件所屬對(duì)象間的引用依賴關(guān)系。
步驟四,當(dāng)采用惰更新時(shí),系統(tǒng)中的應(yīng)用過(guò)程或其他對(duì)象轉(zhuǎn)換正準(zhǔn)備調(diào)用一 個(gè)待更新的對(duì)象而觸發(fā)具體對(duì)象更新,結(jié)合步驟三獲得的活躍對(duì)象依賴關(guān)系驗(yàn)證 更新的完整性,運(yùn)用類型檢查規(guī)則驗(yàn)證對(duì)象引用關(guān)系是否因不兼容接口的引入而 受到影響,如果受到影響則相關(guān)對(duì)象必須進(jìn)行更新,通過(guò)驗(yàn)證以確保當(dāng)前更新包
含所有待更新活躍對(duì)象的更新包和轉(zhuǎn)換函數(shù),如果完整性驗(yàn)證通過(guò),則繼續(xù)進(jìn)行 下一步;否則,如果更新不完整,則產(chǎn)生異常信息,退出更新過(guò)程;
所述更新,其目的是改進(jìn)構(gòu)件實(shí)現(xiàn)、提供新的功能、糾正設(shè)計(jì)錯(cuò)誤或適應(yīng)運(yùn) 行時(shí)環(huán)境的變化等,包含對(duì)象的取代和具體的轉(zhuǎn)換過(guò)程。動(dòng)態(tài)更新就是在運(yùn)行時(shí) 為其提供新版本構(gòu)件實(shí)例,并由對(duì)應(yīng)的轉(zhuǎn)換函數(shù)依據(jù)各舊版本對(duì)象的當(dāng)前狀態(tài), 來(lái)初始化從屬于該構(gòu)件的所有新對(duì)象。
所述惰更新,是指當(dāng)系統(tǒng)提交一個(gè)更新時(shí),所涉及的所有對(duì)象暫不實(shí)施具體 更新而將更新掛起,直到有具體應(yīng)用或其他對(duì)象轉(zhuǎn)換調(diào)用對(duì)象時(shí),才實(shí)施給對(duì)象 的具體更新。
所述更新的完整性,是指當(dāng)更新引入不兼容的接口時(shí), 一些對(duì)象的行為將發(fā) 生改變,這會(huì)影響到其他的類對(duì)象對(duì)這些對(duì)象的引用,并且也會(huì)影響由該對(duì)象所 屬類繼承而來(lái)的子類對(duì)象,此時(shí)必需更新所有受到影響的對(duì)象。
結(jié)合活躍對(duì)象的依賴關(guān)系圖表示G,按如下步驟驗(yàn)證更新的完整性
1) 如果更新包中已不存在未被檢査構(gòu)件,則驗(yàn)證過(guò)程結(jié)束。否則,選取更 新包中所包含的某個(gè)更新構(gòu)件,運(yùn)用類型檢查器(type checker)驗(yàn)證該構(gòu)件與相 應(yīng)待更新構(gòu)件的接口兼容性;
2) 如果新舊構(gòu)件接口兼容,則返回第l)步繼續(xù)。否則,如果新舊構(gòu)件接 口不兼容,則檢査活躍對(duì)象依賴關(guān)系圖G中是否包含該構(gòu)件的實(shí)例對(duì)象;
3) 如果包含該構(gòu)件的實(shí)例對(duì)象,則跳轉(zhuǎn)到第4)步。否則,依據(jù)構(gòu)件間靜 態(tài)依賴(通過(guò)Imports和Exports指定的)關(guān)系,驗(yàn)證與該構(gòu)件有引用或繼承關(guān) 系的構(gòu)件類接口類型,如果都兼容則返回第l)步繼續(xù)。否則,檢查更新包中是 否包含所有受影響構(gòu)件的更新。如果已經(jīng)完全包含,則返回第1)步繼續(xù);否則, 產(chǎn)生異常信息,完整性驗(yàn)證失敗,退出更新;
4) 查找該對(duì)象在活躍對(duì)象依賴關(guān)系圖G中的位置,沿著有向邊逆向獲取所 有與其有依賴關(guān)系的對(duì)象信息,檢查是否更新包中包含所屬構(gòu)件的更新。如果已 經(jīng)包含,則返回第l)步繼續(xù);否則,產(chǎn)生異常信息,完整性驗(yàn)證失敗,退出更 新。
步驟五,根據(jù)對(duì)象間運(yùn)行時(shí)依賴信息以及安全對(duì)象更新條件,獲得構(gòu)件更新 次序,包括單一構(gòu)件所包含的各個(gè)對(duì)象之間的更新執(zhí)行次序以及組成整個(gè)系統(tǒng)的
各個(gè)構(gòu)件所包含的對(duì)象之間的更新執(zhí)行次序。
所述安全對(duì)象更新條件,是指為確保動(dòng)態(tài)更新不違背更新語(yǔ)義、不會(huì)因更新 而導(dǎo)致系統(tǒng)運(yùn)行停止而設(shè)置的約束,具體包括四個(gè)條件
① 對(duì)于單個(gè)對(duì)象,先提交但被掛起的更新必須先于后提交的更新而被執(zhí)行;
② 在某個(gè)具體更新被提交之后啟動(dòng)的應(yīng)用過(guò)程,當(dāng)需要調(diào)用該更新所影響到 的對(duì)象時(shí),總是先執(zhí)行對(duì)應(yīng)這些對(duì)象的具體更新,然后才繼續(xù)應(yīng)用過(guò)程的執(zhí)行;
③ 在同一個(gè)完整更新中,當(dāng)某個(gè)對(duì)象(依賴對(duì)象)更新的具體執(zhí)行因轉(zhuǎn)換過(guò) 程需要而依賴于另一個(gè)對(duì)象(被依賴對(duì)象)時(shí),依賴對(duì)象的更新先于被依賴對(duì)象;
④ 如果對(duì)象之間不存在運(yùn)行時(shí)依賴,則其更新次序無(wú)要求。
如圖2所示,本實(shí)施例涉及軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序系統(tǒng),包 括服務(wù)調(diào)用監(jiān)聽(tīng)模塊、引用信息更新模塊、構(gòu)件依賴分析模塊、完整性驗(yàn)證模 塊、更新次序選擇模塊,其中
服務(wù)調(diào)用監(jiān)聽(tīng)模塊監(jiān)控構(gòu)件所提供全部服務(wù)對(duì)象的生存周期,在系統(tǒng)運(yùn)行 時(shí),構(gòu)件各個(gè)類實(shí)例對(duì)象中的refDeclare和reffixpire方法將隨著應(yīng)用過(guò)程而被逐 步執(zhí)行,監(jiān)聽(tīng)因這兩類方法的執(zhí)行而產(chǎn)生的消息,進(jìn)行分類存儲(chǔ),得到對(duì)象引用 信息和引用終止信息,并輸出所屬構(gòu)件所有服務(wù)對(duì)象的對(duì)象引用信息和引用終止 信息至引用信息更新模塊。其中的構(gòu)件Bundle包含有契約指定的接口,主要提 供兩類接口服務(wù)請(qǐng)求和服務(wù)提供,其組成除了包括實(shí)現(xiàn)功能需求所必須的資源 (即構(gòu)件類文件)文件外,還包含構(gòu)件元信息描述文件、其他輔助目錄和文件。
引用信息更新模塊通過(guò)比較并排除被調(diào)和主調(diào)對(duì)象身份標(biāo)識(shí)與被比較對(duì)象 分別相同的冗余對(duì)象引用信息,驗(yàn)證剩余非冗余的對(duì)象引用信息與所有引用終止 信息的匹配性,刪除與每個(gè)引用終止信息相匹配的對(duì)象引用信息,得到實(shí)際存在 的活躍對(duì)象引用信息,輸出實(shí)際存在的活躍對(duì)象引用信息至構(gòu)件依賴分析模塊。
構(gòu)件依賴分析模塊從每個(gè)構(gòu)件的引用信息更新模塊中收集所在構(gòu)件正在提 供服務(wù)的活躍對(duì)象引用信息,結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,分析各個(gè)對(duì)象引用是屬 于同一構(gòu)件的內(nèi)部對(duì)象的引用還是屬于不同構(gòu)件間對(duì)象的引用,得到系統(tǒng)運(yùn)行時(shí) 所有活躍對(duì)象的引用依賴信息,并輸出該信息至完整性驗(yàn)證模塊和更新次序選擇 模塊。
完整性驗(yàn)證模塊從依賴分析模塊獲取系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的引用依賴 信息,運(yùn)用類型檢查規(guī)則驗(yàn)證當(dāng)前更新包中是否含所有待更新活躍對(duì)象的更新包 和轉(zhuǎn)換函數(shù),并結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,驗(yàn)證當(dāng)前處理的構(gòu)件更新包中是否包 含所有受影響的構(gòu)件更新及其新版本類對(duì)象。
當(dāng)構(gòu)件更新滿足更新完整性約束條件時(shí),更新次序選擇模塊依據(jù)安全對(duì)象更 新條件,分析對(duì)象間運(yùn)行時(shí)依賴信息,確定合理的構(gòu)件更新次序。
本實(shí)施例在構(gòu)件開(kāi)發(fā)階段在類文件中插入對(duì)象引用宣告方法refDeclare和對(duì) 象引用終止方法reffixpire,就可以在系統(tǒng)運(yùn)行過(guò)程中動(dòng)態(tài)獲取構(gòu)件實(shí)例對(duì)象的動(dòng) 態(tài)依賴關(guān)系,而不需要對(duì)運(yùn)行時(shí)系統(tǒng)采取任何外在干擾。并且由于這兩類方法在 所有類中的功能和調(diào)用方法相似,因此可通用于所有構(gòu)件類文件,軟件開(kāi)發(fā)人員 無(wú)需為構(gòu)件中的每個(gè)類單獨(dú)定義方法,只需作為模板方法引入即可,這可以避免 增加開(kāi)發(fā)人員的時(shí)間消耗和可能造成的錯(cuò)誤。通過(guò)增加分布協(xié)同和環(huán)境依賴特 性,本實(shí)施例方法實(shí)際上也可用于實(shí)現(xiàn)分布和移動(dòng)環(huán)境下的軟件構(gòu)件動(dòng)態(tài)更新的 運(yùn)行時(shí)實(shí)例對(duì)象動(dòng)態(tài)依賴關(guān)系分析和對(duì)象轉(zhuǎn)換次序的確定。
權(quán)利要求
1. 一種軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法,其特征在于,包括以下步驟步驟一,服務(wù)調(diào)用監(jiān)聽(tīng)通過(guò)開(kāi)發(fā)階段向構(gòu)件所包含的類文件中增加接口方法,在系統(tǒng)運(yùn)行時(shí)監(jiān)控該構(gòu)件所提供全部服務(wù)對(duì)象的生存周期,獲取這些方法的執(zhí)行所產(chǎn)生的事件消息,得到對(duì)象引用信息和引用終止信息,對(duì)象引用信息是指在通過(guò)初始創(chuàng)建或服務(wù)引用而獲取被調(diào)對(duì)象時(shí),用于聲明這一初始化事件的信息,對(duì)象引用信息包括類別為引用生成的消息類別、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身份標(biāo)識(shí)、被調(diào)對(duì)象初始創(chuàng)建的時(shí)間戳;引用終止信息是指在之前創(chuàng)建和引用的被調(diào)對(duì)象不再在主調(diào)對(duì)象中起作用時(shí),用于宣告被調(diào)對(duì)象引用終止事件的信息,引用終止信息包括類別為引用終止的消息類別、被調(diào)對(duì)象的身份標(biāo)識(shí)、主調(diào)對(duì)象的身份標(biāo)識(shí)、被調(diào)對(duì)象引用終止時(shí)的時(shí)間戳;步驟二,分別比較對(duì)象引用信息中的被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí),當(dāng)消息類別為引用生成,且被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí)分別與另一對(duì)象引用信息完全相同,則認(rèn)為該對(duì)象引用信息是冗余信息,刪除該冗余的對(duì)象引用信息,然后將剩余不存在冗余的對(duì)象引用信息逐個(gè)與所有引用終止信息進(jìn)行匹配性驗(yàn)證,若驗(yàn)證通過(guò),則刪除相匹配的對(duì)象引用信息和引用終止信息;若驗(yàn)證未通過(guò),則保留該對(duì)象引用信息,得到當(dāng)前實(shí)際存在的活躍對(duì)象的對(duì)象引用信息;步驟三,逐個(gè)比較對(duì)象引用信息中所包含的被調(diào)對(duì)象身份標(biāo)識(shí)與主調(diào)對(duì)象身份標(biāo)識(shí),結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,區(qū)分各個(gè)對(duì)象引用信息的屬性,即識(shí)別各個(gè)對(duì)象是否屬于某一構(gòu)件的內(nèi)部對(duì)象的引用,或者是否屬于不同構(gòu)件間對(duì)象的引用,以獲得系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系;步驟四,當(dāng)采用惰更新時(shí),系統(tǒng)中的應(yīng)用過(guò)程或其他對(duì)象轉(zhuǎn)換正準(zhǔn)備調(diào)用一個(gè)待更新的對(duì)象而觸發(fā)具體對(duì)象更新,結(jié)合步驟三獲得的活躍對(duì)象依賴關(guān)系驗(yàn)證更新的完整性,運(yùn)用類型檢查規(guī)則驗(yàn)證對(duì)象引用關(guān)系是否因不兼容接口的引入而受到影響,如果受到影響則相關(guān)對(duì)象必須進(jìn)行更新,通過(guò)驗(yàn)證以確保當(dāng)前更新包含所有待更新活躍對(duì)象的更新包和轉(zhuǎn)換函數(shù),如果完整性驗(yàn)證通過(guò),則繼續(xù)進(jìn)行下一步;否則,如果更新不完整,則產(chǎn)生異常信息,退出更新過(guò)程;步驟五,根據(jù)對(duì)象間運(yùn)行時(shí)依賴信息以及安全對(duì)象更新條件,獲得構(gòu)件更新次序,包括單一構(gòu)件所包含的各個(gè)對(duì)象之間的更新執(zhí)行次序以及組成整個(gè)系統(tǒng)的各個(gè)構(gòu)件所包含的對(duì)象之間的更新執(zhí)行次序。
2、 根據(jù)權(quán)利要求1所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法, 其特征是,所述增加接口方法,包括對(duì)象引用宣告方法和對(duì)象引用終止方法, 這兩類方法在編寫(xiě)構(gòu)件類文件時(shí)由應(yīng)用開(kāi)發(fā)程序員手動(dòng)添加,其中對(duì)象引用宣告方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用位于類的初始化模塊,對(duì)象引用宣告方法最終將對(duì)象引用信息包含在消息事件 中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊,其中,初始化模塊是指在一個(gè)類聲明中包含的獨(dú)立 代碼塊,只要構(gòu)造類的對(duì)象,初始化模塊就會(huì)被執(zhí)行;對(duì)象引用終止方法,其聲明和定義方式相同于一般的類方法,對(duì)該方法的調(diào) 用將由應(yīng)用開(kāi)發(fā)程序員手動(dòng)設(shè)置,對(duì)象引用終止方法最終將引用終止信息包含在 消息事件中發(fā)送給服務(wù)調(diào)用監(jiān)聽(tīng)模塊。
3、 根據(jù)權(quán)利要求1所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法, 其特征是,所述對(duì)象的生存周期,是指從主調(diào)對(duì)象通過(guò)創(chuàng)建或服務(wù)引用而獲取被 調(diào)對(duì)象, 一直到被調(diào)對(duì)象在主調(diào)對(duì)象中不再起作用時(shí)的一段時(shí)間,其中,主調(diào)對(duì) 象是指請(qǐng)求服務(wù)的其他對(duì)象,被調(diào)對(duì)象則指當(dāng)前對(duì)象。
4、 根據(jù)權(quán)利要求1所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法, 其特征是,所述匹配性驗(yàn)證,是指驗(yàn)證對(duì)象引用信息是否滿足下述所有條件① 消息類別為引用生成;②被調(diào)對(duì)象的身份標(biāo)識(shí)和主調(diào)對(duì)象的身份標(biāo)識(shí)分別與某個(gè) 引用終止信息中的相同;③對(duì)象引用信息中的被調(diào)對(duì)象初始創(chuàng)建的時(shí)間戳早于被 比較引用終止信息中的被調(diào)對(duì)象引用終止時(shí)的時(shí)間戳。
5、 根據(jù)權(quán)利要求1所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法, 其特征是,所述更新的完整性,是指當(dāng)更新引入不兼容的接口時(shí), 一些對(duì)象的行 為將發(fā)生改變,這會(huì)影響到其他的類對(duì)象對(duì)這些對(duì)象的引用,并且也會(huì)影響由該 對(duì)象所屬類繼承而來(lái)的子類對(duì)象,此時(shí)更新所有受到影響的對(duì)象。
6、 根據(jù)權(quán)利要求1所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法, 其特征是,所述安全對(duì)象更新條件,具體如下-① 對(duì)于單個(gè)對(duì)象,先提交但被掛起的更新必須先于后提交的更新而被執(zhí)行;② 在某個(gè)具體更新被提交之后啟動(dòng)的應(yīng)用過(guò)程,當(dāng)需要調(diào)用該更新所影響到 的對(duì)象時(shí),總是先執(zhí)行對(duì)應(yīng)這些對(duì)象的具體更新,然后才繼續(xù)應(yīng)用過(guò)程的執(zhí)行;③ 在同一個(gè)完整更新中,當(dāng)某個(gè)對(duì)象更新的具體執(zhí)行因轉(zhuǎn)換過(guò)程需要而依賴 于另一個(gè)對(duì)象時(shí),依賴對(duì)象的更新先于被依賴對(duì)象;④ 如果對(duì)象之間不存在運(yùn)行時(shí)依賴,則其更新次序無(wú)要求。
7、 一種軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng),其特征在于,包括:服務(wù)調(diào)用監(jiān)聽(tīng)模塊、引用信息更新模塊、構(gòu)件依賴分析模塊、完整性驗(yàn)證模塊、 更新次序選擇模塊,其中,服務(wù)調(diào)用監(jiān)聽(tīng)模塊在系統(tǒng)運(yùn)行時(shí)監(jiān)控構(gòu)件所提供全部服務(wù)對(duì)象的生存周期, 獲取由對(duì)象引用宣告方法和對(duì)象引用終止方法的執(zhí)行而產(chǎn)生的事件消息,進(jìn)行分類存儲(chǔ),輸出所有對(duì)象引用信息和引用終止信息至引用信息更新模塊;引用信息更新模塊比較并刪除冗余的對(duì)象引用信息,驗(yàn)證剩余非冗余的對(duì)象 引用信息與所有引用終止信息的匹配性,輸出實(shí)際存在的活躍對(duì)象引用信息至構(gòu) 件引用分析模塊;構(gòu)件依賴分析模塊比較并區(qū)分各個(gè)對(duì)象引用信息的屬性,輸出系統(tǒng)運(yùn)行時(shí)所 有活躍對(duì)象的依賴關(guān)系信息至完整性驗(yàn)證模塊和更新次序選擇模塊;完整性驗(yàn)證模塊根據(jù)實(shí)時(shí)獲取的系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息, 運(yùn)用類型檢査規(guī)則驗(yàn)證當(dāng)前更新包中是否含所有待更新活躍對(duì)象的更新包和轉(zhuǎn) 換函數(shù),輸出更新完整性驗(yàn)證結(jié)果到更新次序選擇模塊;更新次序選擇模塊接收系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息,判定對(duì)象 安全更新條件的滿足性,輸出構(gòu)件更新次序。
8、 根據(jù)權(quán)利要求7所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng), 其特征是,所述引用信息更新模塊,從服務(wù)調(diào)用監(jiān)聽(tīng)模塊獲取所屬構(gòu)件所能提供 全部服務(wù)對(duì)象的對(duì)象引用信息和引用終止信息,通過(guò)比較分析排除被調(diào)和主調(diào)對(duì) 象身份標(biāo)識(shí)分別相同的冗余對(duì)象引用信息,然后刪除與每個(gè)引用終止信息相匹配 的對(duì)象引用信息,得到實(shí)際存在的活躍對(duì)象引用信息。
9、 根據(jù)權(quán)利要求7所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng), 其特征是,所述構(gòu)件依賴分析模塊,從每個(gè)構(gòu)件的引用信息更新模塊中獲取所在 構(gòu)件正在提供服務(wù)的活躍對(duì)象引用信息,結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,識(shí)別各個(gè)對(duì) 象引用是屬于同一構(gòu)件內(nèi)對(duì)象的引用還是不同構(gòu)件間對(duì)象的引用,得到系統(tǒng)運(yùn)行 時(shí)所有活躍對(duì)象的引用依賴信息,其中,構(gòu)件間靜態(tài)依賴關(guān)系是指應(yīng)用開(kāi)發(fā)時(shí), 在構(gòu)件描述文件中靜態(tài)指定的構(gòu)件間引用關(guān)系。
10、根據(jù)權(quán)利要求7所述的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的系統(tǒng), 其特征是,所述完整性驗(yàn)證模塊,從構(gòu)件依賴分析模塊獲取系統(tǒng)運(yùn)行時(shí)所有活躍 對(duì)象的引用依賴信息,并結(jié)合構(gòu)件間靜態(tài)依賴關(guān)系,為確保更新完整性而驗(yàn)證當(dāng) 前處理的構(gòu)件更新包中是否包含所有受影響的構(gòu)件更新及其新版本類對(duì)象。
全文摘要
一種計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域的軟件動(dòng)態(tài)更新中確定實(shí)例對(duì)象轉(zhuǎn)換次序的方法及系統(tǒng),本發(fā)明方法中,獲取對(duì)象引用信息和引用終止信息;比較并刪除冗余的對(duì)象引用信息以及互相匹配的兩類信息;區(qū)分對(duì)象引用屬性,得到系統(tǒng)運(yùn)行時(shí)所有活躍對(duì)象的依賴關(guān)系信息;運(yùn)用類型檢查規(guī)則驗(yàn)證更新的完整性;驗(yàn)證安全對(duì)象更新條件,得到合理的構(gòu)件更新次序。本發(fā)明的系統(tǒng)包括服務(wù)調(diào)用監(jiān)聽(tīng)模塊、引用信息更新模塊、構(gòu)件依賴分析模塊、完整性驗(yàn)證模塊、更新次序選擇模塊。本發(fā)明能夠在系統(tǒng)運(yùn)行過(guò)程中動(dòng)態(tài)獲取構(gòu)件實(shí)例對(duì)象的動(dòng)態(tài)依賴關(guān)系,并在構(gòu)件動(dòng)態(tài)更新時(shí)據(jù)此給出合理的實(shí)例對(duì)象轉(zhuǎn)換次序。
文檔編號(hào)G06F9/445GK101393528SQ200810201929
公開(kāi)日2009年3月25日 申請(qǐng)日期2008年10月30日 優(yōu)先權(quán)日2008年10月30日
發(fā)明者徐小輝, 欣 王, 王德俊, 黃林鵬 申請(qǐng)人:上海交通大學(xué)