關(guān) 閉

新聞中心

EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于OSGI的智能家庭系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

基于OSGI的智能家庭系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2011-08-03 來源:網(wǎng)絡(luò) 收藏


3 服務(wù)網(wǎng)關(guān)的
OSGi服務(wù)框架利用Java的平臺(tái)獨(dú)立和動(dòng)態(tài)代碼裝載特性,可以更容易地開發(fā)和動(dòng)態(tài)配置小內(nèi)存設(shè)備的應(yīng)用程序。它運(yùn)行于Java虛擬機(jī)上,而各種各樣的應(yīng)用服務(wù)則運(yùn)行于具體的OSGi服務(wù)框架軟件之上。
根據(jù)圖3的層次結(jié)構(gòu),需要解決3方面問題:

本文引用地址:http://butianyuan.cn/article/161671.htm

c.jpg


1)在JVM之上OSGi服務(wù)框架;
2)對(duì)于每個(gè)具體的設(shè)備,提供將設(shè)備服務(wù)封裝成Bundle并發(fā)布的技術(shù);
3)設(shè)備的靈活接入。
3.1 OSGi服務(wù)框架——equinox
利用eclipse的equinox的OSGi框架,它安裝在JVM之上,是與OSGi release 3兼容的OSGi服務(wù)框架的一個(gè)實(shí)現(xiàn)。它提供了各種服務(wù)的執(zhí)行環(huán)境,并提供一組核心服務(wù)集,負(fù)責(zé)所有服務(wù)的生命期管理,注冊(cè)等功能。
3.2 設(shè)備服務(wù)的封裝——Bundle的
OSGi兼容的具體設(shè)備通過各種本地總線(如Ethenet,Bluetooth,Lonworks,無線等)接入網(wǎng)關(guān),具有不同的硬件特性,只有將設(shè)備相關(guān)的服務(wù)打包成Bundle后,由服務(wù)提供商發(fā)布,網(wǎng)關(guān)從服務(wù)提供商下載、安裝并注冊(cè)后,才能使用設(shè)備相應(yīng)的服務(wù),從而滿足靈活接入的要求。
3.3 設(shè)備的靈活接入
服務(wù)框架中的設(shè)備管理器模塊負(fù)責(zé)對(duì)接入的設(shè)備進(jìn)行管理,接受服務(wù)的注冊(cè)、更改和注銷,這個(gè)過程對(duì)用戶是透明的:設(shè)備管理器檢測(cè)到某些設(shè)備服務(wù)被注冊(cè)到服務(wù)網(wǎng)關(guān)后,利用驅(qū)動(dòng)定位器服務(wù)或驅(qū)動(dòng)選擇器服務(wù)查找與這些服務(wù)最匹配的驅(qū)動(dòng)服務(wù),建立關(guān)聯(lián)關(guān)系。如果所需的驅(qū)動(dòng)服務(wù)還不存在,設(shè)備管理器會(huì)自動(dòng)查找、安裝并啟動(dòng)驅(qū)動(dòng)服務(wù)對(duì)應(yīng)的Bundle。若找不到,則該設(shè)備服務(wù)就處于閑置(idle)狀態(tài)。
在這里,設(shè)備服務(wù)反映了設(shè)備的某一方面特性,一般可以映射到某個(gè)硬件設(shè)備,也可以體現(xiàn)設(shè)備在不同的抽象層上的特性,提供某個(gè)功能。它要么從屬于某個(gè)特定的設(shè)備類別,要么就是通用型的。設(shè)備類別給出了這類服務(wù)必須實(shí)現(xiàn)的接口,即與設(shè)備服務(wù)通信的方法,以允許相同底層技術(shù)(如Lonworks,IEEE1394,Jini)的Bundle間進(jìn)行互操作。驅(qū)動(dòng)服務(wù)負(fù)責(zé)完成實(shí)際的底層通信,控制硬件設(shè)備。因此,對(duì)每個(gè)具體的設(shè)備,至少要有兩個(gè)Bundle:DeviceBundle和Driver Bundle,對(duì)于同一類的設(shè)備可以連接到相同的Driver Bundle上。

4 設(shè)備封裝——Bundle的具體實(shí)現(xiàn)
平臺(tái)上,服務(wù)是由一個(gè)iava Interface來定義的。Bundle可以實(shí)現(xiàn)這個(gè)接口并且把服務(wù)注冊(cè)到服務(wù)注冊(cè)表中去,并且框架管理Bundle的安裝和更新,同時(shí)管理Bundle和服務(wù)直接的關(guān)系。
在這里,設(shè)備服務(wù)的Bundle流程如下:
1)編寫服務(wù)接口及對(duì)應(yīng)的Java類實(shí)現(xiàn);
2)實(shí)現(xiàn)相應(yīng)的BundleAetivator和ServiceListener接口。這是兩個(gè)必須實(shí)現(xiàn)的特殊接口。其中BundleActivator接口包含start和stop兩個(gè)方法,start方法注冊(cè)服務(wù)和資源,而stop取消注冊(cè),start類似于普通Java類中的public main函數(shù);
3)編寫一個(gè)manifest文件描述該JAR文件的內(nèi)容;
4)將上述的所有接口、Java類、manifest文件以及其他資源文件打包成一個(gè)JAR文件;
5)在需要時(shí)將該Bundle安裝到OSGi服務(wù)網(wǎng)關(guān),完成注冊(cè)。如果要獲取由其他Bundle提供的某個(gè)服務(wù),可以從該Bundle對(duì)應(yīng)的Bundle Con-text對(duì)象調(diào)用getServieeReference方法來獲得特定服務(wù)的引用,然后就可以以該引用為參數(shù)調(diào)用getService方法得到服務(wù)對(duì)象。
在此基礎(chǔ)上開發(fā)了多個(gè)場(chǎng)景應(yīng)用程序,下面以室內(nèi)光強(qiáng)亮度環(huán)境調(diào)節(jié)應(yīng)用和紅外無線自動(dòng)報(bào)警為例,說明相應(yīng)Bundle的開發(fā)方法。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉