專利名稱:一種對開放服務(wù)網(wǎng)關(guān)中組件的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)及計算機領(lǐng)域,尤其涉及一種對開放服務(wù)網(wǎng)關(guān)中組件的控制方法。
背景技術(shù):
隨著信息技術(shù)的不斷演進,用戶需求不斷提高,對于嵌入式設(shè)備,特別是終端設(shè)備 的業(yè)務(wù)需求不斷提升,為了更好地進行模塊管理以及服務(wù)升級,在嵌入式設(shè)備中開始引入 OSGi框架。
OSGi (Open Service Gateway Initiative,公共服務(wù)平臺)是一種基于 Java 語言 的服務(wù)(業(yè)務(wù))平臺規(guī)范。該服務(wù)平臺是一種為多種環(huán)境下的所有類型的網(wǎng)絡(luò)設(shè)備的應(yīng)用程 序和服務(wù)進行傳遞和遠程管理的開放式平臺。該規(guī)范的核心部分是一個框架,其中定義了 應(yīng)用程序的生命周期模式和服務(wù)注冊,并且OSGi強調(diào)模塊化與服務(wù)化,技術(shù)人員可以在基 于OSGi應(yīng)用的情況下切換服務(wù),實現(xiàn)動態(tài)更新的目的。
OSGi可以將具體的應(yīng)用劃分為各個獨立的Bundle (應(yīng)用集合),并進行非常靈活 的組合,在運行時還可以對每個Bundle進行獨立的控制,如利用start、stop、uninstalI等 命令。
OSGi的實現(xiàn)框架有很多,對于Bundle的控制也略有不同,但是主要都以命令行及 配置文件為主,有些實現(xiàn)框架,如Eclipse的Equinox,還提供了 telnet的控制方式。但 是很明顯,命令行方式對于C任務(wù)并不方便,配置文件只能在啟動時起作用,靈活性大打折 扣,而telnet方式不但不方便,而且會引入安全性問題。發(fā)明內(nèi)容
針對上述存在的問題,本發(fā)明的目的是提供一種對開放服務(wù)網(wǎng)關(guān)中組件的控制 方法,基于偽終端的控制方式,實質(zhì)上對OSGi的命令行控制方式進行了封裝,即獲得了對 Bundle的靈活控制,又使C環(huán)境的任務(wù)能夠方便的進行操作。
本發(fā)明的目的是通過下述技術(shù)方案實現(xiàn)的
一種對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,應(yīng)用于Linux操作系統(tǒng),其中,用戶通過 Linux的消息機制向一控制任務(wù)發(fā)送消息,實現(xiàn)對Linux系統(tǒng)中可執(zhí)行文件的安裝和控制管理;
所述控制任務(wù)包括一管理進程和一運行進程,在內(nèi)核中設(shè)置相互通信的一 PTY主 設(shè)備和一 PTY從設(shè)備;
所述管理進程打開所述PTY主設(shè)備,并調(diào)出所述運行進程作為所述管理進程的子 進程,接收來自用戶任務(wù)的消息輸入并轉(zhuǎn)化為FeliX命令行輸入后向所述運行進程發(fā)送;
所述運行進程打開所述PTY從設(shè)備,接收來自于所述管理進程的輸入,重定向標 準輸入,標準輸出和標準錯誤至所述PTY從設(shè)備,然后運行所述Felix命令行命令;
所述管理進程和所述運行進程通過所述PTY主設(shè)備和所述PTY從設(shè)備進行通信。
上述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,所述Linux系統(tǒng)中可執(zhí)行文件的 狀態(tài)包括 Installed 狀態(tài)、Resolved 狀態(tài)、Starting 狀態(tài)、Active 狀態(tài)、Stopping 狀態(tài) 和Uninstalled狀態(tài),其中,所述Installed狀態(tài)表示可執(zhí)行文件已經(jīng)被成功安裝,所述 Resolved狀態(tài)表示可執(zhí)行文件所需要的所有類已經(jīng)可用,所述Starting狀態(tài)表示可執(zhí)行 文件正在啟動且開始方法已經(jīng)被調(diào)用但是還未返回,所述Active狀態(tài)表示可執(zhí)行文件已 被激活,所述Stopping狀態(tài)表示可執(zhí)行文件正在被停用,所述Uninstalled狀態(tài)表示可執(zhí) 行文件已經(jīng)被卸載。
上述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,在所述管理進程中,當用戶任務(wù)卸 載狀態(tài)為Uninstalled的可執(zhí)行文件時,所述可執(zhí)行文件將從所述管理進程的內(nèi)部數(shù)據(jù)中 刪除。
上述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,在安裝所述可執(zhí)行文件時,所述管 理進程接受參數(shù)為本地文件的請求或者為遠端文件的請求,當為遠端文件時,所述管理進 程先完成對此文件的下載,再進行安裝。
上述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,在所述管理進程和所述運行進程 中,所有的操作的參數(shù)均為所述可執(zhí)行文件對應(yīng)的文件名稱,在所述命令行命令中,在安裝 所述可執(zhí)行文件時使用的參數(shù)是文件名稱,此時將返回一個Bundle ID,之后對所述可執(zhí)行 文件的操作均使用所述Bundle ID作為參數(shù)。
上述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,在所述管理進程中,在收到來自用 戶任務(wù)安裝所述可執(zhí)行文件的請求后,將該請求轉(zhuǎn)化為對應(yīng)的Felix命令行命令,發(fā)送給 所述PTY主設(shè)備,并且讀取所述PTY主設(shè)備的輸出,解析其中返回的所述Bundle ID,保存為 內(nèi)部數(shù)據(jù);在收到用戶任務(wù)對于所述可執(zhí)行文件進行非安裝操作的請求時,根據(jù)所述可執(zhí) 行文件的文件名稱,找到對應(yīng)的所述Bundle ID,再轉(zhuǎn)化為相應(yīng)的Felix命令行命令,發(fā)向 所述PTY主設(shè)備。
上述任意一項對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其中,所述Linux系統(tǒng)中可執(zhí) 行文件表示所有除Felix框架所需要的系統(tǒng)可執(zhí)行文件以外的可執(zhí)行文件。
與已有技術(shù)相比,本發(fā)明的有益效果在于
在當前的嵌入式設(shè)備中,依然是以Linux作為操作系統(tǒng),而且大部分的管理任務(wù) 依然是工作在C環(huán)境下,因此本發(fā)明方案對于環(huán)境的適應(yīng)性強,能夠方便的對Bundle進行 靈活的控制,安全性高。
圖1示出了本發(fā)明對開放服務(wù)網(wǎng)關(guān)中組件的控制方法的框架結(jié)構(gòu)示意圖2示出了本發(fā)明對開放服務(wù)網(wǎng)關(guān)中組件的控制方法的Bundle狀態(tài)的遷移狀況 示意圖3示出了本發(fā)明對開放服務(wù)網(wǎng)關(guān)中組件的控制方法的管理進程的流程示意圖。
具體實施方式
下面結(jié)合原理圖和具體操作實施例對本發(fā)明作進一步說明。
本發(fā)明對開放服務(wù)網(wǎng)關(guān)中組件的控制方法主要應(yīng)用于Linux操作系統(tǒng),用戶通過Linux的消息機制向一控制任務(wù)發(fā)送消息,實現(xiàn)對Linux系統(tǒng)中可執(zhí)行文件的安裝和控制管理。
如圖1所示,控制任務(wù)包括一管理進程和一運行進程,與常見的偽終端任務(wù)類似, 控制任務(wù)分為父子兩個進程,管理進程為父進程,運行進程為子進程。管理進程打開PTY主 設(shè)備,并通過fork函數(shù)調(diào)出運行進程在內(nèi)核中設(shè)置相互通信的一 PTY主設(shè)備和一 PTY從設(shè) 備,管理進程打開PTY主設(shè)備,并調(diào)出運行進程作為管理進程的子進程,接收來自用戶任務(wù) 的消息輸入并轉(zhuǎn)化為Felix命令行輸入后向運行進程發(fā)送。
運行進程打開PTY從設(shè)備,接收來自于管理進程的輸入,重定向標準輸入,標準輸 出和標準錯誤至PTY從設(shè)備,然后運行Felix命令行命令。
對于外部用戶任務(wù)來說,通過Linux的消息機制向控制任務(wù)發(fā)送消息,對可執(zhí)行 文件,即Bundle進行控制管理,實際上就是控制Bundle的生命周期的變化。
理論上來說,Bundle的狀態(tài),即生命周期分為六種
Installed Bundle 已經(jīng)被成功安裝
Resolved Bundle所需要的所有類已經(jīng)可用
Starting Bundle正在啟動,start方法已經(jīng)被調(diào)用,但還未返回
Active Bundle 已被激活
Stopping Bundle 正在被停用
Uninstalled Bundle 已經(jīng)被卸載。
上述六種狀態(tài)的遷移狀況如圖2所示。
管理進程的主要任務(wù)是接收來自用戶任務(wù)的消息輸入,轉(zhuǎn)化為Felix的命令行輸 入。
如圖3所示,在安裝Bundle時,管理進程不但可以接受參數(shù)為本地文件的請求,還 是接受參數(shù)為遠端文件的請求。當為遠端文件時,管理進程先完成對此文件的下載,再進行 安裝。
從上文中介紹的管理接口可以看到,為了方便用戶任務(wù),所有的操作的參數(shù)均為 Bundle對應(yīng)的文件名稱。實際上,在Felix的命令行命令中,在安裝Bundle時使用的參數(shù) 是文件名稱,此時會返回一個Bundle ID。之后對此Bundle的操作,如Start、Stop等都使 用此Bundle ID作為參數(shù)。
因此在管理進程中,在收到來自用戶任務(wù)安裝Bundle的請求后,將此請求轉(zhuǎn)化為 對應(yīng)的Felix命令行命令,發(fā)送給PTY主設(shè)備。并且,讀取PTY主設(shè)備的輸出,解析其中返 回的Bundle ID,保存為內(nèi)部數(shù)據(jù)。在收到用戶任務(wù)對于某Bundle進行非安裝操作的請求 時,根據(jù)此Bundle的文件名稱,找到對應(yīng)的Bundle ID,再轉(zhuǎn)化為相應(yīng)的Felix命令行命令, 發(fā)向PTY主設(shè)備。
在管理進程中,并不保留狀態(tài)為Uninstalled的Bundle,也就是說,當用戶任務(wù) Uninstall某個Bundle時,此Bundle將會被從管理進程的內(nèi)部數(shù)據(jù)中刪除。
運行進程與普通偽終端的子進程基本相同,即打開PTY從設(shè)備,重定向標準輸入, 標準輸出和標準錯誤至PTY從設(shè)備,然后運行Felix。
實際上在OSGi框架中一般至少有兩種方式,配置文件和命令行,F(xiàn)elix也不例外。 控制任務(wù)需要了解特定Bundle在Felix中對應(yīng)的Bundle ID,才能對此Bundle進行操作,在實現(xiàn)中是在安裝此Bundle時讀取Felix的返回信息來獲得的。雖然實際上控制任務(wù)可 以通過主動向Felix發(fā)送一個Bundle狀態(tài)獲取命令來得到Bundle的信息,但是為了簡化 邏輯,在實際部署中,所有的用戶Bundle均通過向控制任務(wù)發(fā)送消息的方式進行安裝。用 戶任務(wù)Bundle指的是所有除Felix框架所需要的系統(tǒng)Bundle以外的Bundle,系統(tǒng)Bundle 一般均與命令行操作相關(guān),常見的有
org. apache, felix. go go. command_0. 8. 0. jar
org. apache, felix. go go. runtime_0. 8. 0. jar
org. apache, felix. go go. shell_0. 8. 0. jar
Bundle依然需要通過配置文件啟動,因為在這些Bundle啟動之前,F(xiàn)elix無法接 受命令行命令。
本發(fā)明在當前的嵌入式設(shè)備中,依然是以Linux作為操作系統(tǒng),而且大部分的 管理任務(wù)依然是工作在C環(huán)境下,因此本發(fā)明方案對于環(huán)境的適應(yīng)性強,能夠方便地對 Bundle進行靈活的控制,安全性高。
以上對本發(fā)明的具體實施例進行了詳細描述,但本發(fā)明并不限制于以上描述的具 體實施例,其只是作為范例。對于本領(lǐng)域技術(shù)人員而言,任何等同修改和替代也都在本發(fā)明 的范疇之中。因此,在不脫離本發(fā)明的精神和范圍下所作出的均等變換和修改,都應(yīng)涵蓋在 本發(fā)明的范圍內(nèi)。
權(quán)利要求
1.一種對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,應(yīng)用于Linux操作系統(tǒng),其特征在于,用戶通過Linux的消息機制向一控制任務(wù)發(fā)送消息,實現(xiàn)對Linux系統(tǒng)中可執(zhí)行文件的安裝和控制管理;所述控制任務(wù)包括一管理進程和一運行進程,在內(nèi)核中設(shè)置相互通信的一 PTY主設(shè)備和一 PTY從設(shè)備;所述管理進程打開所述PTY主設(shè)備,并調(diào)出所述運行進程作為所述管理進程的子進程,接收來自用戶任務(wù)的消息輸入并轉(zhuǎn)化為Felix命令行輸入后向所述運行進程發(fā)送;所述運行進程打開所述PTY從設(shè)備,接收來自于所述管理進程的輸入,重定向標準輸入,標準輸出和標準錯誤至所述PTY從設(shè)備,然后運行所述Felix命令行命令;所述管理進程和所述運行進程通過所述PTY主設(shè)備和所述PTY從設(shè)備進行通信。
2.如權(quán)利要求1所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于,所述Linux系統(tǒng)中可執(zhí)行文件的狀態(tài)包括Installed狀態(tài)、Resolved狀態(tài)、Starting狀態(tài)、Active狀態(tài)、 Stopping狀態(tài)和Uninstalled狀態(tài),其中,所述Installed狀態(tài)表示可執(zhí)行文件已經(jīng)被成功安裝,所述Resolved狀態(tài)表示可執(zhí)行文件所需要的所有類已經(jīng)可用,所述Starting狀態(tài)表示可執(zhí)行文件正在啟動且開始方法已經(jīng)被調(diào)用但是還未返回,所述Active狀態(tài)表示可執(zhí)行文件已被激活,所述Stopping狀態(tài)表示可執(zhí)行文件正在被停用,所述Uninstalled狀態(tài)表示可執(zhí)行文件已經(jīng)被卸載。
3.如權(quán)利要求2所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于,在所述管理進程中,當用戶任務(wù)卸載狀態(tài)為Uninstalled的可執(zhí)行文件時,所述可執(zhí)行文件將從所述管理進程的內(nèi)部數(shù)據(jù)中刪除。
4.如權(quán)利要求2所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于,在安裝所述可執(zhí)行文件時,所述管理進程接受參數(shù)為本地文件的請求或者為遠端文件的請求,當為遠端文件時,所述管理進程先完成對此文件的下載,再進行安裝。
5.如權(quán)利要求4所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于,在所述管理進程和所述運行進程中,所有的操作的參數(shù)均為所述可執(zhí)行文件對應(yīng)的文件名稱,在所述命令行命令中,在安裝所述可執(zhí)行文件時使用的參數(shù)是文件名稱,此時將返回一個Bundle ID,之后對所述可執(zhí)行文件的操作均使用所述Bundle ID作為參數(shù)。
6.如權(quán)利要求5所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于,在所述管理進程中,在收到來自用戶任務(wù)安裝所述可執(zhí)行文件的請求后,將該請求轉(zhuǎn)化為對應(yīng)的Felix 命令行命令,發(fā)送給所述PTY主設(shè)備,并且讀取所述PTY主設(shè)備的輸出,解析其中返回的所述Bundle ID,保存為內(nèi)部數(shù)據(jù);在收到用戶任務(wù)對于所述可執(zhí)行文件進行非安裝操作的請求時,根據(jù)所述可執(zhí)行文件的文件名稱,找到對應(yīng)的所述Bundle ID,再轉(zhuǎn)化為相應(yīng)的Felix 命令行命令,發(fā)向所述PTY主設(shè)備。
7.如權(quán)利要求1至6中任意一項所述對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,其特征在于, 所述Linux系統(tǒng)中可執(zhí)行文件表示所有除Felix框架所需要的系統(tǒng)可執(zhí)行文件以外的可執(zhí)行文件。
全文摘要
本發(fā)明公開了一種對開放服務(wù)網(wǎng)關(guān)中組件的控制方法,應(yīng)用于Linux操作系統(tǒng),控制任務(wù)包括一管理進程和一運行進程,在內(nèi)核中設(shè)置相互通信的一PTY主設(shè)備和一PTY從設(shè)備;管理進程打開PTY主設(shè)備,并調(diào)出運行進程,接收來自用戶任務(wù)的消息輸入并轉(zhuǎn)化為Felix命令行輸入后向運行進程發(fā)送;運行進程打開PTY從設(shè)備,接收來自于管理進程的輸入,重定向標準輸入,標準輸出和標準錯誤至PTY從設(shè)備,然后運行Felix命令行命令。本發(fā)明在當前的嵌入式設(shè)備中,依然是以Linux作為操作系統(tǒng),而且大部分的管理任務(wù)依然是工作在C環(huán)境下,因此本發(fā)明方案對于環(huán)境的適應(yīng)性強,能夠方便地對Bundle進行靈活的控制,安全性高。
文檔編號H04L12/66GK103064676SQ20121056777
公開日2013年4月24日 申請日期2012年12月24日 優(yōu)先權(quán)日2012年12月24日
發(fā)明者葉波 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司