專利名稱:一種構件管理方法及系統(tǒng)的制作方法
技術領域:
本申請涉及OSGI框架領域,特別是涉及一種基于JMX的遠程構件管理的方法及系統(tǒng)。
背景技術:
聲明式服務是一種在OSGI框架中簡化的面向服務構件編程模型,此模型的可擴展性、提供服務的簡化方式等優(yōu)點備受開發(fā)人員的青睞。聲明式服務提供了一種全新的開發(fā)OSGI環(huán)境中服務構件的方式,它使用聲明式的方式來發(fā)布、查找和綁定OSGI的服務,這種方式簡化服務構件實現(xiàn)中因為管理動態(tài)環(huán)境而導致的非功能性需求,從而使開發(fā)人員更加專注于自己的功能性業(yè)務邏輯實現(xiàn)。在使用聲明式服務方式進行構件開發(fā)時,涉及到如何對構件進行本地和遠程管理的問題;通常使用JMX對受管資源進行管理;服務構件的本地和遠程管理,按照JMX規(guī)范所描述的原則開發(fā)的管理構件,稱為Manageable Bean (MBean) ;MBean的構造必須遵循由JMX 規(guī)范所描述的涉及模式及相關接口,這樣可以保證所有的MBean都可以以標準的形式提供被管理的資源設備。為使構件具備被JMX管理的能力,開發(fā)人員需要熟悉JMX的相關內(nèi)容,并且構件需要實現(xiàn)特定接口(標準MBean、DynamicMBean等),標志自己為可被管理的對象,這樣會使開發(fā)變得相對復雜;而且構件在聲明式服務構架上運行時可進行加載、卸載和替換,若構件已被卸載就不應該具備被管理的能力,如何根據(jù)不同狀態(tài)實時改變被管理的狀態(tài)也是一個待研究的重要問題。
發(fā)明內(nèi)容
為解決上述技術問題,本申請實施例提供一種構件管理方法及系統(tǒng),無需構件實現(xiàn)特定接口而具備JMX管理能力,簡化了開發(fā)過程;并且具備更新構件被管理的能力。技術方案如下—種構件管理方法,所述方法基于一 JMX代理平臺,所述JMX代理平臺中設置有 MBean服務器;所述方法包括對所述構件進行加載并解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean (Manageable Bean,管理構件);將所述動態(tài)MBean注冊為聲明式框架服務;監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。上述的方法,優(yōu)選的,對所述注冊至MBena服務器中的MBean進行管理包括讀取和重新改寫MBean中的屬性值;
執(zhí)行MBean中定義的接口方法;獲取MBean中發(fā)出的通知事件對象。上述的方法,優(yōu)選的,所述監(jiān)聽服務狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中包括當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務加載時,將所述服務對應的 MBean注冊至MBean服務器中。上述的方法,優(yōu)選的,所述監(jiān)聽服務狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中包括當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務卸載時,將所述服務對應的 MBean反注冊至MBean服務器中。一種構件管理系統(tǒng),所述系統(tǒng)基于一 JMX代理平臺,所述JMX代理平臺中設置有 MBean服務器;所述系統(tǒng)包括加載單元,用于對所述構件進行加載;解析單元,用于解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);封裝單元,用于依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài) MBean (Manageable Bean,管理構件);注冊單元,用于將所述動態(tài)MBean注冊為聲明式框架服務;管理單元,用于監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。上述的系統(tǒng),優(yōu)選的,所述管理單元包括改寫子單元,用于讀取和重新改寫MBean中的屬性值;執(zhí)行子單元,用于執(zhí)行MBean中定義的接口方法;獲取子單元,獲取MBean中發(fā)出的通知事件對象。上述的系統(tǒng),優(yōu)選的,所述管理單元包括注冊子單元,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務加載時, 將所述服務對應的MBean注冊至MBean服務器中。上述的系統(tǒng),優(yōu)選的,所述管理單元包括反注冊子單元,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務卸載時,將所述服務對應的MBean反注冊至MBean服務器中。由以上本申請實施例提供的技術方案可見,本發(fā)明提供的構件管理方法及系統(tǒng), 基于JMX代理平臺,在所述JMX平臺中設置有MB服務器;將需要管理的構件進行加載,解析所述構件元數(shù)據(jù)文件中的文件數(shù)據(jù),依據(jù)所述文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean ;將所述動態(tài)MBean注冊為聲明式框架服務;監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài), 將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。本發(fā)明提供的構件管理方法及系統(tǒng)提供了元數(shù)據(jù)聲明的方式或者注解的方式來配置管理能力,這樣用戶不需要關心JMX規(guī)范所定義的內(nèi)容,只需要關心構件的管理能力;另外,本發(fā)明提供了維護構件管理的生命周期能力,能夠動態(tài)跟蹤構件所在的bundle在框架中的狀態(tài),根據(jù)管理構件的不同狀態(tài)做相關處理,從而實現(xiàn)了構件的管理僅在運行期有效的動態(tài)管理能力。
為了更清楚地說明本申請實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下, 還可以根據(jù)這些附圖獲得其他的附圖。圖1為本申請實施例一提供的一種構件管理方法的流程圖;圖2為本申請實施例一提供的加載管理構件的方法流程圖;圖3為本申請實施例一提供的卸載管理構件的方法流程圖;圖4為本申請實施例一提供的MBean遠程管理示意圖;圖5為本申請實施例二提供的一種構件管理系統(tǒng)的結構示意圖;圖6為本申請實施例二提供的一種構件管理系統(tǒng)的又一結構示意圖。
具體實施例方式為了使本技術領域的人員更好地理解本申請方案。下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。實施例一本申請實施例提供的一種構件管理方法的流程圖如圖1所示,所述方法基于一 JMX代理平臺,所述JMX代理由MBean服務器、一組MBean、代理服務、還有協(xié)議適配器(連接器)等組件構成,這些代理級對象充當管理應用程序和受控資源之間的橋梁,直接管理受控資源,并且使受控資源可以通過連接器或協(xié)議適配器與管理應用程序通信;服務構件在該聲明式服務平臺上運行時,可進行動態(tài)加載、卸載和替換,本申請實施例提供的方法增加了構件的服務監(jiān)聽機制,當服務構件狀態(tài)發(fā)生改變時,可實時監(jiān)聽到服務狀態(tài)改變的信息;所述方法包括步驟SlOl 對所述構件進行加載并解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);步驟S102 依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean ;管理構件加載到聲明式框架并處于激活狀態(tài),聲明式服務框架負責解析管理構件的元數(shù)據(jù)文件,根據(jù)元數(shù)據(jù)文件的數(shù)據(jù)將其封裝為動態(tài)MBean;本申請實施例提供的方法定義了配置管理構件的元數(shù)據(jù)文件的schema文件,管理構件需依照此schema文件配置被包裝為MBean的一些屬性信息,以及暴露的屬性ftOperty和方法Method信息,其中 Property元素用于定義MBean暴露字段的屬性,Method元素用于定義MBean暴露方法的屬性;步驟S103 將所述動態(tài)MBean注冊為聲明式框架服務;注冊動態(tài)MBean為聲明式服務框架可管理的服務,本申請實施例提供的方法由于增加了服務監(jiān)聽機制,監(jiān)聽到此服務注冊后,就可以通過框架獲取此服務;步驟S104:監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理;通過框架獲取服務后,通過服務的屬性信息識別是否為MBean對象,若未MBean對象,將此MBean注冊到MBeanServer中;通過對MBeanRegistration接口的實現(xiàn),管理構件可以添加MBean注冊與注銷時機的控制;注冊到MBean服務器之后,就可以在程序中讀取和重新改寫MBean上的屬性值,執(zhí)行MBean上定義的接口方法和獲取MBean上發(fā)出來的通知事件對象;MBean服務器負責MBean的生命周期控制,當監(jiān)聽到管理構件的服務狀態(tài)發(fā)生變化(加載、卸載、替換),本申請實施例提供的方法就會根據(jù)這些狀態(tài)做相關處理;當服務構件加載時,注冊MBean對象到MBean服務器中;當服務構件卸載時,反注冊MBean對象;當服務構件替換時,先反注冊MBean對象,再重新注冊MBean對象到MBean服務器中;并且, 當MBean的注冊/反注冊事件前后,MBean服務器都會動態(tài)檢查“管理構件”是否實現(xiàn)了 MBeanRegistration接口,如果返回結果為真,MB服務即會調用相應的回調函數(shù);本申請實施例提供的加載管理構件和卸載管理構件的流程圖分別如本申請實施例提供的圖2及圖3 所示如圖2所示,包括步驟S201 封裝管理構件為動態(tài)MBean ;步驟S202 注冊動態(tài)MBean為框架的服務;步驟S203 監(jiān)聽框架的服務構件狀態(tài);步驟S204 監(jiān)聽服務狀態(tài)是否改變;如改變執(zhí)行步驟S205 ;否則,返回執(zhí)行步驟 S203 ;步驟S205 監(jiān)聽服務狀態(tài)是否注冊,如已注冊,執(zhí)行步驟S206 ;步驟S206 通過獲取服務屬性獲取ObjectName名稱,注冊此MBean到 MBeanServer φ。圖3所示,包括步驟S301 監(jiān)聽框架的服務構件狀態(tài);步驟S302 監(jiān)聽服務狀態(tài)是否改變;如未改變返回執(zhí)行步驟S301,否則,執(zhí)行步驟 S303 ;步驟S303 監(jiān)聽狀態(tài)是否反注冊;如已反注冊,執(zhí)行步驟S304 ;步驟S304 通過獲取服務屬性獲取ObjectName名稱,反注冊此MBean到 MBeanServer φ。本申請實施例提供的對構件遠程管理的工作原理為通過對相應的連接器服務端 (connector server)發(fā)出請求,一個遠程管理應用程序可以與JMX代理建立連接,隨后才可以通過其本地的連接器客戶端(connector client)調用遠程MBean所提供的操作;典型的,一個遠程客戶通過MBeaMerver的一個接口方法子集,該子集來自MBeaMerver接口的父接口(parent interface)所定義的方法集。本申請實施例中,對于遠程管理MBean的一示意圖如圖4所示,連接器客戶端指定 MBean服務器的遠程代表的角色,管理程序向其發(fā)出getState的方法調用,這種方式的動態(tài)調用通常是與MBean的自省(introspection)機制協(xié)作的,通過MBean的自省,可以動態(tài)的發(fā)現(xiàn)管理接口提供的屬性集合方法集以及其他所有MBean對象特征,對本地和遠程都一樣;代理對象通常由MBean類自動產(chǎn)生,管理應用程序直接向代理對象提出getState 方法的調用請求,代理對象再依賴連接器客戶端將此請求傳送給遠程的JMX代理層,最后傳給目標MBean,請求的響應則以相反的路徑傳回。對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。實施例二針對以上方法實施例,本申請實施例還提供了一種構件管理系統(tǒng),所述系統(tǒng)基于一 JMX代理平臺,所述JMX代理平臺中設置有MBean服務器;其結構示意圖如圖5所示,包括加載單元401、解析單元402、封裝單元403、注冊單元404和管理單元405 ;其中加載單元401,用于對所述構件進行加載;解析單元402,用于解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);封裝單元403,用于依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài) MBean (Manageable Bean,管理構件);注冊單元404,用于將所述動態(tài)MBean注冊為聲明式框架服務;管理單元405,用于監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。本申請實施例還提供了構件管理系統(tǒng)的另一結構示意圖如圖6所示,其中管理單元405包括改寫子單元406,用于讀取和重新改寫MBean中的屬性值;執(zhí)行子單元407,用于執(zhí)行MBean中定義的接口方法;獲取子單元408,獲取MBean中發(fā)出的通知事件對象。本申請實施例提供的管理單元中,還包括注冊子單元409,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務加載時,將所述服務對應的MBean注冊至MBean服務器中。反注冊子單元410,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務卸載時,將所述服務對應的MBean反注冊至MBean服務器中。對于系統(tǒng)實施例而言,由于其基本相應于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。以上所述僅是本申請的具體實施方式
,應當指出,對于本技術領域的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本申請的保護范圍。
權利要求
1.一種構件管理方法,其特征在于,所述方法基于一 JMX代理平臺,所述JMX代理平臺中設置有MBean服務器;所述方法包括對所述構件進行加載并解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean (Manageable Bean,管理構件);將所述動態(tài)MBean注冊為聲明式框架服務;監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。
2.根據(jù)權利要求1所述的方法,其特征在于,對所述注冊至MBena服務器中的MBean進行管理包括讀取和重新改寫MBean中的屬性值;執(zhí)行MBean中定義的接口方法;獲取MBean中發(fā)出的通知事件對象。
3.根據(jù)權利要求1所述的方法,其特征在于,所述監(jiān)聽服務狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中包括 當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務加載時,將所述服務對應的 MBean注冊至MBean服務器中。
4.根據(jù)權利要求1所述的方法,其特征在于,所述監(jiān)聽服務狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中包括當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務卸載時,將所述服務對應的 MBean反注冊至MBean服務器中。
5.一種構件管理系統(tǒng),其特征在于,所述系統(tǒng)基于一 JMX代理平臺,所述JMX代理平臺中設置有MBean服務器;所述系統(tǒng)包括加載單元,用于對所述構件進行加載;解析單元,用于解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);封裝單元,用于依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean(Manageable Bean,管理構件);注冊單元,用于將所述動態(tài)MBean注冊為聲明式框架服務;管理單元,用于監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的 MBean注冊至所述MBean服務器中,對所述MBean進行管理。
6.根據(jù)權利要求5所述的方法,其特征在于,所述管理單元包括改寫子單元,用于讀取和重新改寫MBean中的屬性值;執(zhí)行子單元,用于執(zhí)行MBean中定義的接口方法;獲取子單元,獲取MBean中發(fā)出的通知事件對象。
7.根據(jù)權利要求5所述的方法,其特征在于,所述管理單元包括注冊子單元,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務加載時,將所述服務對應的MBean注冊至MBean服務器中。
8.根據(jù)權利要求5所述的方法,其特征在于,所述管理單元包括反注冊子單元,用于當監(jiān)聽得到所述服務狀態(tài)改變且所述服務狀態(tài)為服務卸載時,將所述服務對應的MBean反注冊至MBean服務器中。
全文摘要
本申請公開了一種構件管理方法及系統(tǒng),所述方法基于一JMX代理平臺,所述JMX代理平臺中設置有MBean服務器;所述方法包括對所述構件進行加載并解析所述構件的元數(shù)據(jù)文件獲取所述元數(shù)據(jù)文件中的文件數(shù)據(jù);依據(jù)所述獲取的文件數(shù)據(jù)將所述構件封裝為動態(tài)MBean(Manageable Bean,管理構件);將所述動態(tài)MBean注冊為聲明式框架服務;監(jiān)聽所述服務的狀態(tài),依據(jù)所述服務的不同狀態(tài),將所述服務對應的MBean注冊至所述MBean服務器中,對所述MBean進行管理。本申請?zhí)峁┮环N構件管理方法,無需構件實現(xiàn)特定接口而具備JMX管理能力,簡化了開發(fā)過程;并且具備更新構件被管理的能力。
文檔編號H04L29/08GK102325180SQ201110264398
公開日2012年1月18日 申請日期2011年9月7日 優(yōu)先權日2011年9月7日
發(fā)明者劉民, 劉耀, 陳芳芳 申請人:山東中創(chuàng)軟件商用中間件股份有限公司, 山東中創(chuàng)軟件工程股份有限公司