欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

OSGi架構(gòu)研究

系統(tǒng) 1620 0

OSGi 架構(gòu)研究

OSGi 概述

?????? OSGi Open Service Gateway Initiative 的簡(jiǎn)稱,該組織建立于 1999 年,是一個(gè)非贏利機(jī)構(gòu),旨在建立一個(gè)開放的服務(wù)規(guī)范,為通過(guò)網(wǎng)絡(luò)向設(shè)備提供服務(wù)建立開放的標(biāo)準(zhǔn)。 OSGi 并不是專為家庭網(wǎng)絡(luò)而制定的,除了住宅網(wǎng)關(guān),像車載電腦等其他移動(dòng)嵌入式設(shè)備也都可以通過(guò) OSGi 接入 Internet ,獲取不同的應(yīng)用服務(wù)。它為服務(wù)供應(yīng)商、軟件供應(yīng)商、網(wǎng)關(guān)開發(fā)人員以及設(shè)備供應(yīng)商提供了一個(gè)開放、通用的架構(gòu),使它們能互動(dòng)地開發(fā)、部署和管理服務(wù)。其軟件環(huán)境基于 Sun JAVA 虛擬機(jī),并不涉及具體的連接協(xié)議。對(duì)于任何新設(shè)備,它都能夠靈活地將其納入現(xiàn)有網(wǎng)絡(luò)。可以使用 OSGi 的對(duì)象包括各種數(shù)字和模擬的機(jī)頂盒、服務(wù)網(wǎng)關(guān)、有線電視電纜調(diào)制解調(diào)器、消費(fèi)類電子產(chǎn)品、 PC 、工業(yè)計(jì)算機(jī)、汽車等。

?

OSGi 體系結(jié)構(gòu)

以下是一張 OSGi 的體系結(jié)構(gòu)圖:

從上圖的層次結(jié)構(gòu)可以看出, Native Operating System 層代表的是本地硬件與操作系統(tǒng), Java VM 層為跨平臺(tái)應(yīng)用提供了可能。 而再往上,就是 OSGi framework 了。

Bundle 實(shí)際就是一個(gè)具有 jar(Java ARchive) 格式的文件,其中包含了 java class 文件和其他資源文件(比如圖標(biāo),配置文件等等)。 Bundle 可以在自己的 manifest 文件中說(shuō)明自己能夠提供哪些 java 包,其他 bundle 如果在自己的 manifest 文件中指定了它需要這個(gè)包,那他們之間就可能產(chǎn)生 java 包的依賴關(guān)系,這樣多個(gè) bundle 之間就可以共享 java 包。

OSGi R4 中將功能分為幾層,包括:安全層、模塊層、生命周期層、服務(wù)層和實(shí)際的服務(wù)。 OSGi 的核心實(shí)現(xiàn)即為 OSGi 框架,它本身也是一個(gè) OSGi Bundle

名稱 ( )

職責(zé)或功能

Security (安全層)

對(duì) OSGi 環(huán)境中應(yīng)用的部署和管理提供更好的安全控制。

Modules (模塊層)

主要負(fù)責(zé) bundle 的安裝部署,更新和卸載。

Life Cycle( 生命周期層)

Bundle 組件的安全和生命周期操作提供了 API 定義,該層位于安全層和模塊層之上。

Services( 服務(wù)層 )

定義了一個(gè)與生命周期層緊密結(jié)合的組件動(dòng)態(tài)交互模型。 OSGi 中的服務(wù)是實(shí)現(xiàn)了一個(gè)或多個(gè) Java 接口的 Java 對(duì)象,通過(guò)將這些對(duì)象依據(jù)其實(shí)現(xiàn)的接口注冊(cè)到服務(wù)注冊(cè)表中, Bundle 組件可以發(fā)布自己的服務(wù),查找使用服務(wù),注冊(cè)監(jiān)聽處理服務(wù)的狀態(tài)變更等。

Actual Services( 實(shí)際的服務(wù) )

OSGi 定義的一些標(biāo)準(zhǔn)的服務(wù)接口如日志服務(wù)( Log Service ),包管理服務(wù)( Package Admin Service )、啟動(dòng)級(jí)別服務(wù)( Start Level Service )、 HTTP 服務(wù)( Http Service )、配置服務(wù)( Config Admin Service )、用戶管理服務(wù) (User Admin Service) 等。

?

OSGi 容器

現(xiàn)在比較流行的開放源碼的 OSGi 容器有以下三種 :

?

a) ? Equinox 容器是參照 OSGi 規(guī)范第 4 版實(shí)現(xiàn)的,它構(gòu)成了 Eclipse IDE 的核心—模塊化的 Java 運(yùn)行時(shí);它實(shí)現(xiàn)了 OSGi 規(guī)范 4 中規(guī)定的必須強(qiáng)制實(shí)現(xiàn)的功能,同時(shí),它也實(shí)現(xiàn)了 OSGi 規(guī)范中大部分的可選功能;

?

b) Knoflerfish OSGi 規(guī)范第 3 版和第 4 版的開源實(shí)現(xiàn),它實(shí)現(xiàn)了 OSGi 規(guī)范規(guī)定的必須實(shí)現(xiàn)的功能及部分可選功能;

?

c) Apache Felix Apache 軟件基金會(huì)實(shí)現(xiàn)的 OSGi 開源容器。

?

?


OSGi 項(xiàng)目實(shí)踐

技術(shù)是做出來(lái)的,不是想出來(lái)的。

以下,我將使用 Equonix 作為 OSGi 容器,來(lái)做一個(gè)小項(xiàng)目,將一天以來(lái)學(xué)習(xí)到的知識(shí)用到具體實(shí)踐之中。

便攜設(shè)備越來(lái)越多,連家庭主婦身邊都可能有個(gè) PDA 或者智能手機(jī),優(yōu)秀的家庭主婦都是管帳的高手,相信做一個(gè)支出管理系統(tǒng)會(huì)大賣特賣。現(xiàn)在忽略 PDA 或是智能機(jī)用的是什么硬件配置以及接口,用 Swing 來(lái)模擬前端界面。

?

我把這個(gè)系統(tǒng)命名為 ExpenseManager, 下面是系統(tǒng)的包結(jié)構(gòu):

?

?

pratice.domain ???? ? 用來(lái)放實(shí)體類

pratice.service ????? 存放支出管理系統(tǒng)提供服務(wù)的接口及其實(shí)現(xiàn)類

pratice.uri ????????????? 界面相關(guān)的類

?

完成 1.0 版時(shí)的包結(jié)構(gòu)如下:



?

?

其中, Expense 是代表一條消費(fèi)記錄的實(shí)體類,其定義如下:

public class Expense {

???

??? private int id ; ????????? // 消費(fèi) ID

??? private String date ; // 消費(fèi)時(shí)間

??? private String item ; // 消費(fèi)項(xiàng)目

??? private float money ; ?? ? // 消費(fèi)額

???

??? public String getDate() {

?????? return date ;

??? }

??? public void setDate(String date) {

?????? this . date = date;

??? }

……// 省略其它屬性 get,set 方法

}

ExpenseDB 類代表一個(gè)存儲(chǔ)消費(fèi)記錄的數(shù)據(jù)庫(kù)表,提供插入,檢索數(shù)據(jù),查詢列名等操作,類圖如下:





?

?
?
?

ExpenseManagerService 是系統(tǒng)的服務(wù)接口,定義系統(tǒng)可以向外提供的功能,在 1.0 版中只實(shí)現(xiàn)了增加支出記錄功能,以后可逐步增加諸如,刪除,修改,統(tǒng)記等功能。下面給出接口及其實(shí)現(xiàn)類代碼:

?

public interface ExpenseManagerService {

??? public void addExpense(Expense expense);

}

?

public class ExpenseManagerServiceImpl implements ExpenseManagerService {

??? private ExpenseDB expenseDB ;

??? public ExpenseManagerServiceImpl(ExpenseDB expenseDB ) {

?????? this . expenseDB = expenseDB ;

??? }

??? public void addExpense(Expense expense) {

?????? expenseDB .addExpense(expense);

??? }

}

?

ExpenseManagerURI 類是界面類,也是 bundle 中的 Activator ,繼續(xù)自 JFrame ,同時(shí)實(shí)現(xiàn) BundleActivator 接口。只要在 MANIFEST.MF 中指定

Bundle-Activator: pratice.uri.ExpenseManagerURI

framework 就能通過(guò) ClassLoader 找到 pratice.uri.ExpenseManagerURI .class 并加載后,就可以通過(guò) newInstance() 方法創(chuàng)建一個(gè) BundleActivator 的實(shí)例,然后調(diào)用 public void start(BundleContext context) 方法和 void stop(BundleContext context) 方法來(lái)管理 bundle 的生命周期。代碼略。

?????? AddExpenseDialog 是增加支出記錄的對(duì)話框。

?

MANIFEST.MF 文件內(nèi)容如下:

Manifest-Version : 1.0

Bundle-ManifestVersion : 2

Bundle-Name : ExpenseManager Plug-in

Bundle-SymbolicName : ExpenseManager

Bundle-Version : 1.0.0

Bundle-Activator : pratice.uri.ExpenseManagerURI

Bundle-Localization : plugin

Import-Package : org.osgi.framework; version ="1.3.0 "

?

布署到 Equonix 容器后,執(zhí)行效果見下圖:




?
?

?

點(diǎn)擊添加記錄,跳出加支出記錄的對(duì)話框。



?

輸入數(shù)據(jù)提交后,在管理系統(tǒng)界面點(diǎn)擊支出列表,羅列出支出記錄。

?

為顯示 OSGi 架構(gòu)支持即插即用,動(dòng)態(tài)部署的特性,在 1.1 版中增加統(tǒng)計(jì)消費(fèi)額的功能,只要 執(zhí)行 Equonix 框架 提供的更新命令, framework 就完成對(duì) bundle 的升級(jí)工作。為此,對(duì)源代碼進(jìn)行相應(yīng)修改。

ExpenseManagerService 接口增加統(tǒng)計(jì)方法,實(shí)現(xiàn)類與 ExpenseDB 類作相應(yīng)修改。

?

public interface ExpenseManagerService { ?

??? public void addExpense(Expense expense);

??? public float sumAllCost ();

}

public class ExpenseManagerServiceImpl implements ExpenseManagerService {

??? private ExpenseDB expenseDB ;

??? public ExpenseManagerServiceImpl(ExpenseDB expenseDB) {

?????? this . expenseDB = expenseDB;

??? }

??? public void addExpense(Expense expense) {

?????? expenseDB .addExpense(expense);

??? }

??? public float sumAllCost() {

?????? return expenseDB .sumAllCost();

??? }

}

public class ExpenseDB {

???

??? private List<Expense> expenseList ;

……// 其余代碼省略

??? public float sumAllCost() {

?????? float sum = 0;

?????? for ( int i = 0; i <= expenseList .size(); i++ ){

?????????? sum += ((Expense) expenseList .get(i)).getMoney();

?????? }

?????? return sum;

??? }

}

MANIFEST.MF 文件內(nèi)容如下:

Manifest-Version : 1.0

Bundle-ManifestVersion : 2

Bundle-Name font-size: 10pt; color: black; font-family:

OSGi架構(gòu)研究


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 成人在线免费观看 | 久久久久久国产精品免费免费狐狸 | 99成人| 久草在线视频网 | 久草网站| 日本高清视频在线 | 久久中文字幕视频 | 拍真实国产伦偷精品 | 欧美性生交zzzzzxxxxx | 久久精品中文字幕 | 国产福利区一区二在线观看 | 欧美高清极品videossex | 99精品免费久久久久久久久日本 | 亚洲一级在线观看 | 激情奇米 | 男女超猛烈啪啦啦的免费视频 | 国产视频观看 | 日韩五月天 | 黄在线免费 | 亚洲一区二区三区高清 | 三级高清| 久久久久久免费视频 | 咪咪色在线视频 | aaaaaaa片毛片免费观看 | 久久久久国产一区二区三区 | 亚洲综合精品一区 | 精品午夜久久网成年网 | 日韩啊啊啊 | 久久婷五月 | 日本高清香蕉色视频在线观看 | 成人二区 | 中国精品久久 | 日本一区二区三区免费观看 | 亚洲高清国产品国语在线观看 | 人人综合网 | 久久久久久久久久久久久久久久久久久 | 亚洲人6666成人观看 | 精品免费国产一区二区三区 | 一级做a爱片特黄在线观看yy | 日韩一区欧美 | 极品尤物一区二区三区 |