亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于代理的動態(tài)軟件更新方法

        2013-05-24 15:51:54黃晗
        三明學(xué)院學(xué)報 2013年4期
        關(guān)鍵詞:調(diào)用代理構(gòu)件

        黃晗

        (泉州師范學(xué)院物理與信息工程學(xué)院,福建泉州362000)

        基于代理的動態(tài)軟件更新方法

        黃晗

        (泉州師范學(xué)院物理與信息工程學(xué)院,福建泉州362000)

        動態(tài)軟件更新是一種新型的軟件演化機制,它允許應(yīng)用軟件系統(tǒng)在運行過程中執(zhí)行軟件更新而不會出現(xiàn)停機狀態(tài)。一些大型重要的應(yīng)用軟件系統(tǒng)需要提供不間斷的可用性服務(wù)將受益于此機制,因此將OSGI作為軟件構(gòu)件的支撐平臺,提出一種基于代理的OSGi構(gòu)件動態(tài)更新方法。該方法繼承了OSGi良好的生命周期管理和動態(tài)依賴管理特性,拓展了其動態(tài)性和互換性的特點。實驗表明,該方法可以準(zhǔn)確地進行OSGi構(gòu)件的動態(tài)更新,將對智能家居環(huán)境下的系統(tǒng)維護及其軟件演化提供一定的指導(dǎo)意義。

        代理;動態(tài)軟件;更新;OSGi;構(gòu)件;bundle

        目前,不僅專業(yè)化的軟件系統(tǒng)需要為客戶提供不間斷服務(wù),比如航天航空科技和醫(yī)院的生命支撐平臺等都必須連續(xù)運行,就是一些“大眾化”的軟件系統(tǒng)如銀行等金融機構(gòu)的服務(wù)器一旦停機也可能造成巨大恐慌,因此動態(tài)軟件更新是一種機制,它允許軟件更新或打補丁到被應(yīng)用正在運行系統(tǒng)的服務(wù)中去而不會出現(xiàn)停機或宕機等故障。文獻[1]通過分析比較,論證了動態(tài)軟件更新是在不停機情況下最佳的選擇方法。楊芙清等[2]提出了構(gòu)件的軟件開發(fā)是提高軟件開發(fā)效率和質(zhì)量的保證,并已在分布式系統(tǒng)中得到了充分的驗證。OSGi(open service gateway initiative)框架作為一種成功服務(wù)的平臺模型,其開放源代碼的形式可以作為部署軟件服務(wù)的基礎(chǔ)平臺。R-OSGi在OSGi基礎(chǔ)上將單一的JAVA虛擬機擴展到分布平臺上,通過引入一個R-OSGi的bundle構(gòu)件組成了遠(yuǎn)程服務(wù),形成網(wǎng)絡(luò)通道,生成代理來實現(xiàn)一個分布環(huán)境支持OSGi標(biāo)準(zhǔn)的中間件平臺,該平臺被廣泛地應(yīng)用在各種應(yīng)用程序中。對動態(tài)軟件更新有多種方法,Iulian Neamtiu[3]設(shè)計一個Ginseng系統(tǒng)完成對基于過程的程序的動態(tài)更新,它通過打補丁的方法來保證不會違反類型安全等事宜;Malabarba[4]通過修改了標(biāo)準(zhǔn)的Java虛擬機引入動態(tài)類的方法,違背了Java跨平臺的初衷;而Plash[5]等人提出了支持動態(tài)組件更新的DCUP體系結(jié)構(gòu),但它對開發(fā)人員不是透明的。本文提出了一種基于OSGi平臺的代理動態(tài)軟件更新的方法,增加一個bundle而不修改OSGi的平臺結(jié)構(gòu)來完成動態(tài)軟件更新,而鮑春鍵[6]等人提出更新操作必須解決4個問題,也就是確定更新單元、獲取最佳更新時機、狀態(tài)轉(zhuǎn)移機制確立和請求重定向,其中狀態(tài)轉(zhuǎn)移機制是最重要的,如果能保持當(dāng)前的狀態(tài),就可以確保更新處理過程的正確執(zhí)行。因此由服務(wù)主動保存當(dāng)前狀態(tài),然后提取狀態(tài),轉(zhuǎn)移到新的服務(wù),再替換原服務(wù)的狀態(tài)也是一種可以進行實踐的想法。

        本文采用在client和server之間加入一層Myproxy(代理),通過降低bundle間的耦合程度加大server可控性,因為對于動態(tài)軟件更新永遠(yuǎn)只能在server上進行,步驟是MyProxy發(fā)現(xiàn)服務(wù)并注冊服務(wù),client通過MyProxy獲取服務(wù),MyProxy幫助client調(diào)用服務(wù)。

        1 代理更新

        代理模式是常用的Java設(shè)計模式[7],動態(tài)代理中的代理類通過java.lang.reflect.proxy類在運行時根據(jù)接口定義,采用Java反射功能動態(tài)生成的,它的特征是代理類與委托類有同樣的接口,并通過java.lang.reflect.InvocationHandler實現(xiàn)handler對象。本文所用到的代理更新框架如圖1所示,該結(jié)構(gòu)由3 個bundle分別是更新模塊,代理顯示模塊以及測試模塊組成。

        更新模塊:包括保存狀態(tài)子模塊,R-OSGi服務(wù)尋找子模塊和動態(tài)更新實現(xiàn)子模塊組成。R-OSGi服務(wù)尋找子模塊獲取bundle上的client要更新的信息,記錄bundle的標(biāo)記并將信息狀態(tài)傳遞保存塊,同時代理子模塊要完成調(diào)用更新過程。

        代理顯示模塊:該模塊在管理端顯示要更新的bundle模塊,可以以圖形的形式和XML文件的形式輸出。

        試驗測試模塊:為了測試而專門引進的一個模塊,以圖形的形式直觀顯示。

        為了不修改底層OSGi以及R-OSGi的結(jié)構(gòu),只使用它們的服務(wù),也不修改bundle的業(yè)務(wù)邏輯,使用代理傳遞所需更新的bundle的實現(xiàn),無需對相應(yīng)bundle作任何更改,只產(chǎn)生一個相應(yīng)的代理來管理bundle的服務(wù)請求。

        圖1 代理的動態(tài)更新框架結(jié)構(gòu)圖

        1.1 基于代理的服務(wù)更新

        該方法使用代理來進行更新,如圖2所示。在org. osgi.framework.Service.Discovery.Listener接口中定義了對bundle遠(yuǎn)程的注冊服務(wù),MyProxy代理類實現(xiàn)了接口這一功能,當(dāng)發(fā)現(xiàn)出現(xiàn)一個新的遠(yuǎn)程服務(wù)時,調(diào)用_announceService這個函數(shù),把遠(yuǎn)程服務(wù)注冊的接口及URI加入到注冊表中;而當(dāng)遠(yuǎn)程服務(wù)沒有調(diào)用時,則使用_discardService函數(shù),把注冊表中這項服務(wù)記錄刪除。

        1.1.1 兩張注冊表

        圖2 代理類圖

        (1)u&i_map:用來記錄MyProxy Class所發(fā)現(xiàn)的當(dāng)前每一個可用的服務(wù),把服務(wù)實現(xiàn)的接口,服務(wù)的地址記錄到注冊表中。存在一種可能是如果存在兩個服務(wù),在接口相同但其地址不同,這表明有兩個client在不同地址上同時申請該項服務(wù),本方法當(dāng)作兩個服務(wù)對象。

        (2)registry_map:用來記錄當(dāng)前正在被client所使用的服務(wù),本地代理bundle以及client使用的服務(wù)實例handler對象。

        1.1.2 調(diào)用服務(wù)

        該方法通過增加的MyProxy bundle(代理)的3個函數(shù)getService(),setService(),action()完成調(diào)用功能。下面談?wù)剆etService(),首先它調(diào)用getService生成一個實例,并為IProxy服務(wù)的using_service所捕獲,完成一個實例。

        其調(diào)用分成兩個階段進行:

        第一階段:

        1)client要求服務(wù)被MyProxy捕獲,獲得getService;

        2)IProxy的setService函數(shù)被調(diào)用;

        3)IProxy的using_service方法。

        第二階段:

        1)client調(diào)用IProxy的action函數(shù);

        2)IProxy使用using_service方法中的action函數(shù);

        3)調(diào)用handler中的invoke函數(shù),完成實現(xiàn)類調(diào)用。

        1.1.3 更新服務(wù)

        該方法通過增加的MyProxy bundle(代理)中的3個函數(shù)replace(),update(),addingService()完成更新功能如圖3所示,其算法如下:

        1)client更新命令被MyProxy捕獲;

        2)IProxy調(diào)用replace進行bundle定位;

        3)handler中的update與invoke進行時機判斷;

        4)如果invoke則實現(xiàn)類調(diào)用,否則update獲得控制獲取最佳更新時機;

        4-1)提取原服務(wù)狀態(tài);

        4-2)停止服務(wù);

        4-3)重定向到新服務(wù)的handle中去;

        5)新服務(wù)resume;

        6)更新結(jié)束,去除標(biāo)記,斷開舊服務(wù)。

        圖3 遠(yuǎn)程服務(wù)更新

        1.2 服務(wù)狀態(tài)存儲

        OSGi上各個bundle中發(fā)布著不同的服務(wù),我們以一個服務(wù)作為更新的粒度,服務(wù)擁有良好的接口和封閉性,因此在更新階段需要解決狀態(tài)的轉(zhuǎn)移問題,本文使用一個接口IUpdate來主動保存原來的狀態(tài),通過3個函數(shù)object(),resume(),action()完成狀態(tài)的轉(zhuǎn)移,如圖3所示。

        1.3 請求服務(wù)bundle標(biāo)記

        請求服務(wù)標(biāo)記模塊為每一個bundle打上標(biāo)記,該方法利用Java TI[8]技術(shù)來對client進行標(biāo)記,當(dāng)一個線程獲得更新服務(wù)命令時,會在相應(yīng)記錄的bundle上留有標(biāo)記并在更新完畢時去除。

        1.4 代理顯示模塊

        代理顯示模塊主要是使用Java的AWT圖形界面交互的接口,利用其能提供操作系統(tǒng)的圖形庫,在本地注冊一個R-OSGi的遠(yuǎn)程服務(wù),如properties.put (RemoteOSGiService,"info.UI");管理員可以通過R-OSGi系統(tǒng)提供的UI服務(wù)來獲取這個圖形界面,UI類將收集當(dāng)前在MyProxy所在的OSGi平臺上所有代理所注冊服務(wù)信息,并將直接在屏幕是顯示當(dāng)前MyProxy上注冊的服務(wù),如圖4所示。

        圖4 代理信息顯示

        2 試驗與分析

        為了很好地觀測更新過程,該方法再增加一個bundle,負(fù)責(zé)處理與數(shù)據(jù)更新相關(guān)的一些內(nèi)容,如獲取M yProxy的數(shù)據(jù)、寫入文件、返回到圖像信息,如圖5所示。

        通過task函數(shù)get_used_time()返回從MyProxy中獲得數(shù)據(jù)始到現(xiàn)在止的時間;get_state()返回當(dāng)前的數(shù)據(jù)量,是個bool函數(shù);run()函數(shù)將獲取數(shù)據(jù)寫入文件,在Myframe接口中通過t.scheduleAtFixedRate(new MyTask(),50,100),將在100ms抽樣一次以獲取相關(guān)數(shù)據(jù)量,通過幅度與時間的比值或可獲得數(shù)據(jù)速率,并顯示在屏幕上,我們的測試環(huán)境是將兩臺intel P4 2.1GHz,1G內(nèi)存的電腦連接在一個相對獨立的實驗室局域網(wǎng)內(nèi),運行環(huán)境是windows7和R-OSGi框架,并建立兩個快慢數(shù)據(jù)傳輸軟件,如圖6所示,圖中是數(shù)據(jù)高速軟件在傳輸過程的某個時間內(nèi)被低速軟件迅速代替。

        圖5 測驗類圖

        圖6 動態(tài)更新實驗

        適用性分析:更新框架采用獨立的bundle代理機制,避免對OSGi平臺的侵入,直接運行在Java虛擬機平臺上,再加上OSGi本身是智能家居的控制模塊,因此特別適合于嵌入式設(shè)備。

        透明性分析:管理人員簡單操作動態(tài)更新過程,使用服務(wù)注冊、發(fā)布、綁定,實現(xiàn)了對用戶的透明,但在更新期間或多或少會受到更新內(nèi)容的影響,如動態(tài)實驗中傳輸速度變慢可能會被客戶認(rèn)為服務(wù)不可用,因此在更新過程中還要進行回滾等方法給予協(xié)助。

        正確性分析:除了上述方法回滾外,在運行過程中選擇原來狀態(tài)變量的保存,更新時機選擇在最佳安全時期(例如選擇在軟件使用量最少時機),狀態(tài)保存和轉(zhuǎn)移遵從嚴(yán)格的約定,保持狀態(tài)中所有變量前后一致性。

        3 討論

        由于OSGi中各個bundle存在著不同的生命周期,不可避免地需要進行各種維護,軟件也需要進行升級。Sameer[9]實現(xiàn)了用于支持C/S結(jié)構(gòu)動態(tài)更新的基礎(chǔ)框架,但對于新舊版本出現(xiàn)不兼容的情況卻無法解決,Baumann[10]等人就面向?qū)ο蟛僮飨到y(tǒng)的動態(tài)更新建立一套實用的機制但沒有考慮接口問題,Tewksbury[11]等人則描述CORBA使用中間版本的進行更新的更新機制,Kramer[12]和Magee[13]等人主要集中在構(gòu)件動態(tài)更新上,王曉鵬[14]等人主要處理構(gòu)件化軟件的動態(tài)更新問題,而上海交大的RAD實驗室則組織了對基于服務(wù)的分布式軟件動態(tài)更新關(guān)鍵技術(shù)研究和分布式系統(tǒng)中軟件動態(tài)更新的形式化研究等國家級重點課題的攻關(guān)并取得多項國家發(fā)明專利,但嵌入式系統(tǒng)動態(tài)更新技術(shù)發(fā)展進步有限[15],這一問題值得我們進一步探索。本文提出了一種基于代理的軟件動態(tài)更新方法,該方法以O(shè)SGi為支撐平臺,沒有更改的平臺框架結(jié)構(gòu)和邏輯功能,實驗表明該方法符合設(shè)計要求,但在實驗過程中發(fā)現(xiàn)服務(wù)類型受到一定限制,因此在后續(xù)研究中重點是如何解決這個限制,只要注冊在更新框架上就可以完成動態(tài)更新動作并爭取將它擴展到嵌入式應(yīng)用中。

        致謝:感謝在上海交大訪學(xué)期間得到sjturad實驗室陳俊清博士大力支持與幫助。

        [1]張仕.黃林鵬.基于OSGi的服務(wù)動態(tài)演化[J].軟件學(xué)報,2008,19(5):1201-1211.

        [2]楊芙清.梅宏.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報,1999,27(2):68-75.

        [3]NEAMTIU I,HICKS M,STOYLE G,et al.Practical dynamic software updating for C[M].ACM,2006.

        [4]MALABARBA S,PANDEY R,GRAGG J,et al.Runtime support for type-safe dynamic Java classes[M].Berlin:Springer Heidelberg,2000.

        [5]PLASIL F,B?LEK D,JANECEK R.SOFA/DCUP:Architecture for component trading and dynamic updating[C]// Configurable Distributed Systems,1998.Proceedings.Fourth International Conference on.IEEE,1998:43-51.

        [6]鮑春健.吳俊敏.許胤龍,等.基于組件的動態(tài)軟件更新[J].計算機應(yīng)用,2006,26(8):1909-1911.

        [7]李青虹.基于Java的Web服務(wù)的構(gòu)建和開發(fā)[J].三明學(xué)院學(xué)報,2005,22(2):205-208.

        [8]林洪武,尤朝,周明輝,等.以代理為中心的OSGi構(gòu)件資源監(jiān)控方法[J].計算機科學(xué)與探索,2011,5(1):23-31

        [9]JMANI S.Automatic software upgrades for distributed systems[D].Cambridge:Massachusetts Instituteof Technology,2005.

        [10]BAUMANN A,HEISER G,APPAVOO J,et al.Providing dynamic update in an operating system[C]//Proceedings of the 2005 USENIX Technical Conference,2005:279-291.

        [11]TEWKSBURY L A,MOSER L E,MELLIAR-SMITH P M.Live upgrades of CORBA applications using object replication[C]//Software Maintenance,2001.Proceedings.IEEE International Conference on.IEEE,2001:488-497.

        [12]KRAMER J,MAGEE J.The evolving philosophers problem:Dynamic change management[J].Software Engineering, IEEE Transactions on,1990,16(11):1293-1306.

        [13]MAGEE J,KRAMER J.Dynamic structure in software architectures[C]//ACM SIGSOFT Software Engineering Notes. ACM,1996,21(6):3-14.

        [14]王曉鵬.王千祥.梅宏.一種面向構(gòu)件化軟件的在線演化方法[J].計算機學(xué)報,2005,28(11):1890-1897.

        [15]王德俊.黃林鵬.徐曉輝,等.分布式動態(tài)更新支持系統(tǒng):研究綜述[J].計算機科學(xué),2007,34(11):19-25.

        Proxy-Based Dynamic Software Updating Method

        HUANG Han
        (School of Physics and Information Engineering,Quanzhou Normal University,Quanzhou 362000,China)

        Dynamic software updating is a new type of software evolution mechanism,which allows applications perform software updating in the system while it is running without downtime.Some important applications of large software systems need to provide available services which will benefit from this mechanism.This approach will make OSGi as a platform for software components,and present a new proxy-based method to achieve the dynamic software updating for OSGi component.The method inherits from the OSGI dynamic management of component's lifecycle and dependency,and has features such as dynamic availability and substitutability.The experiment shows that the method can accurately do dynamic updating,and provide reference to system maintenance and software evolution of smart home environment.

        proxy;dynamic software;updates;OSGi;component;bundle

        TP311.53

        A

        1673-4343(2013)04-0063-05

        2013-03-20

        高等學(xué)校博士學(xué)科點專項科研基金課題(20090073110026)

        黃晗,男,福建莆田人,副教授。研究方向:容錯服務(wù),服務(wù)計算。

        猜你喜歡
        調(diào)用代理構(gòu)件
        核電項目物項調(diào)用管理的應(yīng)用研究
        代理圣誕老人
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        代理手金寶 生意特別好
        建筑構(gòu)件
        建筑構(gòu)件
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        建筑構(gòu)件
        建筑構(gòu)件
        復(fù)仇代理烏龜君
        国产精品人妻熟女男人的天堂| 中文字幕高清一区二区| 亚洲av成人综合网| 精品人妻无码视频中文字幕一区二区三区 | 日本肥老熟妇在线观看| 国产自产在线视频一区| 日韩精品一区二区亚洲观看av| 国产麻豆精品传媒av在线| 最美女人体内射精一区二区| 一区二区三区中文字幕| 久久夜色精品国产| 污污污污污污污网站污| 久久久精品电影| 国产三级伦理视频在线| 亚洲女同性恋第二区av| 最新日本人妻中文字幕| 精品av熟女一区二区偷窥海滩| 蜜桃久久精品成人无码av| 中文字幕乱码人妻一区二区三区| 在线观看免费人成视频| 扒下语文老师的丝袜美腿| 亚洲人成伊人成综合久久| 日本av在线一区二区| 亚洲国产欧美在线观看| 国产人妻精品一区二区三区| 最近日韩激情中文字幕| 国产精品久久无码免费看| 91成人自拍视频网站| 日本亚洲精品一区二区三| 人人爽人人爱| 久久99精品久久久久九色| 国内精品嫩模av私拍在线观看 | 蜜桃av噜噜一区二区三区免费| av免费资源在线观看| 青春草在线视频观看| 亚洲av无码精品蜜桃| 一级片久久| 国产在线观看网址不卡一区 | 国产黄色一区二区福利| 中文字幕一区二区黄色| 亚洲中字幕日产av片在线|