一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法
【專利摘要】一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,首先定義數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu),然后將數(shù)據(jù)模型節(jié)點編譯成動態(tài)庫,當(dāng)TR098服務(wù)進程檢測到新插件時,加載新插件,外部進程對步驟S3中加載的數(shù)據(jù)節(jié)點進行添加,修改,刪除,讀取操作時,由TR069服務(wù)進程負責(zé)執(zhí)行添加,修改,刪除,讀取節(jié)點實例,并調(diào)用對應(yīng)的回調(diào)函數(shù)執(zhí)行具體的功能。本發(fā)明將數(shù)據(jù)模型的描述和TR098服務(wù)進程分離,將數(shù)據(jù)模型的描述編譯成動態(tài)庫,以插件的形式存在,在TR098服務(wù)進程中動態(tài)加載插件,從而實現(xiàn)系統(tǒng)的高度可擴展性和維護性。
【專利說明】一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,尤其涉及一種基于插件的TR098協(xié)議中數(shù)據(jù)模型動態(tài)加載的方法。
【背景技術(shù)】
[0002]CWMP (CPE WAN Management Protocol,CPE 廣域網(wǎng)管理協(xié)議)是由 DSL (DigitalSubscriber's Line,數(shù)字用戶線路)論壇發(fā)起開發(fā)的技術(shù)規(guī)范之一,編號為TR-069,所以又被稱為TR-069協(xié)議。它提供了對下一代網(wǎng)絡(luò)中家庭網(wǎng)絡(luò)設(shè)備進行管理配置的通用框架、消息規(guī)范、管理方法和數(shù)據(jù)模型。
[0003]目前市場上對于TR069數(shù)據(jù)模型的管理方式大部分都是預(yù)先定義數(shù)據(jù)模型節(jié)點的描述文件,然后將數(shù)據(jù)模型節(jié)點描述文件編譯進TR069服務(wù)進程。這種方式的實現(xiàn)比較簡單,但如果以后需要增加新的數(shù)據(jù)模型節(jié)點,則必須重新編譯整個TR098服務(wù)進程,對于網(wǎng)絡(luò)設(shè)備來說,就可能需要升級設(shè)備的軟件,這就增加了維護成本,不容易擴展。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,將數(shù)據(jù)模型的描述編譯成動態(tài)庫,在TR098服務(wù)進程中動態(tài)加載插件,實現(xiàn)了系統(tǒng)的高度可擴展性和維護性。
[0005]為了達到上述目的,本發(fā)明提供一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,該方法包含以下步驟:
步驟S1、定義數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu);
所述的數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu)包含節(jié)點路徑,節(jié)點名稱,節(jié)點屬性,節(jié)點參數(shù),節(jié)點的回調(diào)函數(shù);
步驟S2、將步驟SI中的數(shù)據(jù)模型節(jié)點編譯成動態(tài)庫,等待加載;
步驟S3、TR098服務(wù)進程檢測新插件,加載新插件;
步驟S4、外部進程對步驟S3中加載的數(shù)據(jù)節(jié)點進行添加,修改,刪除,讀取操作時,由TR069服務(wù)進程負責(zé)執(zhí)行添加,修改,刪除,讀取節(jié)點實例,并調(diào)用對應(yīng)的回調(diào)函數(shù)執(zhí)行具體的功能。
[0006]所述的步驟SI中,所述的回調(diào)函數(shù)包含:
load Handle:當(dāng)該節(jié)點插件被加載時,執(zhí)行的回調(diào)函數(shù); unload Handle:當(dāng)該節(jié)點插件卸載時候,執(zhí)行的回調(diào)函數(shù); add Handle:添加該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); edit Handle:編輯該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); read Handle:讀取該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); delete Handle:刪除該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù)。
[0007]所述的數(shù)據(jù)模型節(jié)點的參數(shù)描述數(shù)組param List包含如下參數(shù):
參數(shù)名稱; 參數(shù)屬性標(biāo)志;
參數(shù)類型;
參數(shù)的默認值,如果參數(shù)沒有顯示設(shè)置,那么參數(shù)的值為默認值。
[0008]只有數(shù)據(jù)模型被實例化時才會調(diào)用的回調(diào)函數(shù)包含以下函數(shù): add Handle:當(dāng)節(jié)點被創(chuàng)建時,調(diào)用該函數(shù),在該函數(shù)中執(zhí)行初始化;
edit Handle:當(dāng)節(jié)點被編輯時,調(diào)用該函數(shù),該函數(shù)是節(jié)點功能生效的主要函數(shù),當(dāng)節(jié)點的參數(shù)值改變后會調(diào)用該函數(shù),在該函數(shù)中根據(jù)參數(shù)值執(zhí)行具體的功能;
read Handle:當(dāng)節(jié)點被讀取時,調(diào)用該函數(shù)來更新參數(shù)值,對于一些狀態(tài)相關(guān)的節(jié)點尤其需要;
delete Handle:當(dāng)一個節(jié)點被刪除時,調(diào)用該函數(shù)。
[0009]本發(fā)明將數(shù)據(jù)模型的描述和TR098服務(wù)進程分離,將數(shù)據(jù)模型的描述編譯成動態(tài)庫,以插件的形式存在,在TR098服務(wù)進程中動態(tài)加載插件,從而實現(xiàn)系統(tǒng)的高度可擴展性和維護性。
【專利附圖】
【附圖說明】
[0010]圖1是本發(fā)明的流程圖。
【具體實施方式】
[0011]以下根據(jù)圖1具體說明本發(fā)明的較佳實施例。
[0012]如圖1所示,本發(fā)明提供一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,該方法包含以下步驟:
步驟1、定義數(shù)據(jù)模型節(jié)點的參數(shù)描述數(shù)組;
所述的節(jié)點參數(shù)描述數(shù)組為param List,該數(shù)組中參數(shù)的個數(shù)為param Num ;
所述的數(shù)據(jù)模型節(jié)點的參數(shù)描述數(shù)組包含如下參數(shù): name:參數(shù)名稱; flag:參數(shù)屬性標(biāo)志; type:參數(shù)類型;
default Vaule:參數(shù)的默認值,如果參數(shù)沒有顯示設(shè)置,那么參數(shù)的值為默認值;
步驟2、編寫節(jié)點的回調(diào)函數(shù);
插件被加載后,并不會調(diào)用步驟2中編寫的回調(diào)函數(shù),只有數(shù)據(jù)模型被實例化時才會調(diào)用步驟2中的回調(diào)函數(shù);
所述的回調(diào)函數(shù)包含以下函數(shù):
add Handle:當(dāng)節(jié)點被創(chuàng)建時,調(diào)用該函數(shù),在該函數(shù)中執(zhí)行初始化;edit Handle:當(dāng)節(jié)點被編輯時,調(diào)用該函數(shù),該函數(shù)是節(jié)點功能生效的主要函數(shù),當(dāng)節(jié)點的參數(shù)值改變后會調(diào)用該函數(shù),在該函數(shù)中根據(jù)參數(shù)值執(zhí)行具體的功能;
read Handle:當(dāng)節(jié)點被讀取時,調(diào)用該函數(shù)來更新參數(shù)值,對于一些狀態(tài)相關(guān)的節(jié)點尤其需要;
delete Handle:當(dāng)一個節(jié)點被刪除時,調(diào)用該函數(shù);
步驟3、定義數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu); 所述的數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu)包含節(jié)點路徑,節(jié)點名稱,節(jié)點屬性,節(jié)點參數(shù),節(jié)點的回調(diào)函數(shù),具體如下:
path:描述了節(jié)點的路徑; name:描述了節(jié)點的名稱; flag:描述了節(jié)點的屬性,例如讀寫屬性等; param List:即為步驟I中定義的節(jié)點參數(shù)描述數(shù)組; param Num:是步驟I中節(jié)點參數(shù)的個數(shù); load Handle:當(dāng)該節(jié)點插件被加載時,執(zhí)行的回調(diào)函數(shù); unload Handle:當(dāng)該節(jié)點插件卸載時候,執(zhí)行的回調(diào)函數(shù); add Handle:添加該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù),即步驟2中對應(yīng)的回調(diào)函數(shù); edit Handle:編輯該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù),即步驟2中對應(yīng)的回調(diào)函數(shù); read Handle:讀取該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù),即步驟2中對應(yīng)的回調(diào)函數(shù); delete Handle:刪除該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù),即步驟2中對應(yīng)的回調(diào)函數(shù); 一個文件中可以定義多個節(jié)點的描述信息,將步驟3中定義的所有節(jié)點的節(jié)點描述 結(jié)構(gòu)信息存放到一個數(shù)組中,名稱為Object Notes Desc,該數(shù)組中的節(jié)點個數(shù)為Object Notes Num ;
步驟4、將步驟3中的數(shù)據(jù)模型節(jié)點編譯成動態(tài)庫,等待加載;
步驟5、TR098服務(wù)進程檢測新插件,加載新插件;
由于插件以動態(tài)庫形式存在,可以調(diào)用相應(yīng)的接口函數(shù)加載插件;
例如Iinux中調(diào)用dlopen函數(shù)(Linux的庫函數(shù),打開一個動態(tài)庫)加載插件,然后根據(jù)返回的句柄調(diào)用dlsym函數(shù)(Linux的庫函數(shù),獲取動態(tài)庫中某個符號的地址)獲取名稱為Object Notes Desc的節(jié)點描述數(shù)組,獲取該數(shù)組中描述的節(jié)點和參數(shù)信息后,便可以加載這些信息;
步驟6、外部進程對步驟5中加載的數(shù)據(jù)節(jié)點進行添加,修改,刪除,讀取等操作時,由TR069服務(wù)進程負責(zé)執(zhí)行添加,修改,刪除,讀取節(jié)點等實例,并調(diào)用對應(yīng)的回調(diào)函數(shù)執(zhí)行具體的功能。
[0013]本發(fā)明將數(shù)據(jù)模型的描述和TR098服務(wù)進程分離,將數(shù)據(jù)模型的描述編譯成動態(tài)庫,以插件的形式存在,在TR098服務(wù)進程中動態(tài)加載插件,從而實現(xiàn)系統(tǒng)的高度可擴展性和維護性。
[0014]盡管本發(fā)明的內(nèi)容已經(jīng)通過上述優(yōu)選實施例作了詳細介紹,但應(yīng)當(dāng)認識到上述的描述不應(yīng)被認為是對本發(fā)明的限制。在本領(lǐng)域技術(shù)人員閱讀了上述內(nèi)容后,對于本發(fā)明的多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護范圍應(yīng)由所附的權(quán)利要求來限定。
【權(quán)利要求】
1.一種基于插件的數(shù)據(jù)模型動態(tài)加載的方法,其特征在于,該方法包含以下步驟: 步驟S1、定義數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu); 所述的數(shù)據(jù)模型節(jié)點的描述結(jié)構(gòu)包含節(jié)點路徑、節(jié)點名稱、節(jié)點屬性、節(jié)點參數(shù)和節(jié)點的回調(diào)函數(shù); 步驟S2、將步驟SI中的數(shù)據(jù)模型節(jié)點編譯成動態(tài)庫,等待加載; 步驟S3、TR098服務(wù)進程檢測新插件,加載新插件; 步驟S4、外部進程對步驟S3中加載的數(shù)據(jù)節(jié)點進行添加,修改,刪除,讀取操作時,由TR069服務(wù)進程負責(zé)執(zhí)行添加,修改,刪除,讀取節(jié)點實例,并調(diào)用對應(yīng)的回調(diào)函數(shù)執(zhí)行具體的功能。
2.如權(quán)利要求1所述的基于插件的數(shù)據(jù)模型動態(tài)加載的方法,其特征在于,所述的步驟SI中,所述的回調(diào)函數(shù)包含: load Handle:當(dāng)該節(jié)點插件被加載時,執(zhí)行的回調(diào)函數(shù); unload Handle:當(dāng)該節(jié)點插件卸載時候,執(zhí)行的回調(diào)函數(shù); add Handle:添加該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); edit Handle:編輯該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); read Handle:讀取該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù); delete Handle:刪除該節(jié)點實例時,執(zhí)行的回調(diào)函數(shù)。
3.如權(quán)利要求2所述的基于插件的數(shù)據(jù)模型動態(tài)加載的方法,其特征在于,所述的數(shù)據(jù)模型節(jié)點的參數(shù)描述數(shù)組param List包含如下參數(shù): 參數(shù)名稱; 參數(shù)屬性標(biāo)志; 參數(shù)類型; 參數(shù)的默認值,如果參數(shù)沒有顯示設(shè)置,那么參數(shù)的值為默認值。
4.如權(quán)利要求2所述的基于插件的數(shù)據(jù)模型動態(tài)加載的方法,其特征在于,只有數(shù)據(jù)模型被實例化時才會調(diào)用的回調(diào)函數(shù)包含以下函數(shù): add Handle:當(dāng)節(jié)點被創(chuàng)建時,調(diào)用該函數(shù),在該函數(shù)中執(zhí)行初始化;edit Handle:當(dāng)節(jié)點被編輯時,調(diào)用該函數(shù),該函數(shù)是節(jié)點功能生效的主要函數(shù),當(dāng)節(jié)點的參數(shù)值改變后會調(diào)用該函數(shù),在該函數(shù)中根據(jù)參數(shù)值執(zhí)行具體的功能; read Handle:當(dāng)節(jié)點被讀取時,調(diào)用該函數(shù)來更新參數(shù)值,對于一些狀態(tài)相關(guān)的節(jié)點尤其需要; delete Handle:當(dāng)一個節(jié)點被刪除時,調(diào)用該函數(shù)。
【文檔編號】G06F9/445GK103761136SQ201410063854
【公開日】2014年4月30日 申請日期:2014年2月25日 優(yōu)先權(quán)日:2014年2月25日
【發(fā)明者】匡昌勝 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司