亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

OSGi架構研究

系統(tǒng) 1764 0

OSGi 架構研究

OSGi 概述

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

?

OSGi 體系結構

以下是一張 OSGi 的體系結構圖:

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

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

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

名稱 ( )

職責或功能

Security (安全層)

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

Modules (模塊層)

主要負責 bundle 的安裝部署,更新和卸載。

Life Cycle( 生命周期層)

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

Services( 服務層 )

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

Actual Services( 實際的服務 )

OSGi 定義的一些標準的服務接口如日志服務( Log Service ),包管理服務( Package Admin Service )、啟動級別服務( Start Level Service )、 HTTP 服務( Http Service )、配置服務( Config Admin Service )、用戶管理服務 (User Admin Service) 等。

?

OSGi 容器

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

?

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

?

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

?

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

?

?


OSGi 項目實踐

技術是做出來的,不是想出來的。

以下,我將使用 Equonix 作為 OSGi 容器,來做一個小項目,將一天以來學習到的知識用到具體實踐之中。

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

?

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

?

?

pratice.domain ???? ? 用來放實體類

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

pratice.uri ????????????? 界面相關的類

?

完成 1.0 版時的包結構如下:



?

?

其中, Expense 是代表一條消費記錄的實體類,其定義如下:

public class Expense {

???

??? private int id ; ????????? // 消費 ID

??? private String date ; // 消費時間

??? private String item ; // 消費項目

??? private float money ; ?? ? // 消費額

???

??? public String getDate() {

?????? return date ;

??? }

??? public void setDate(String date) {

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

??? }

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

}

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





?

?
?
?

ExpenseManagerService 是系統(tǒng)的服務接口,定義系統(tǒng)可以向外提供的功能,在 1.0 版中只實現(xiàn)了增加支出記錄功能,以后可逐步增加諸如,刪除,修改,統(tǒng)記等功能。下面給出接口及其實現(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 ,同時實現(xiàn) BundleActivator 接口。只要在 MANIFEST.MF 中指定

Bundle-Activator: pratice.uri.ExpenseManagerURI

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

?????? AddExpenseDialog 是增加支出記錄的對話框。

?

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í)行效果見下圖:




?
?

?

點擊添加記錄,跳出加支出記錄的對話框。



?

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

?

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

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

?

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架構研究


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 综合 欧美 国产 视频二区 | 亚洲精品国产综合一线久久 | 黄色成人毛片 | 3级毛片| 麻豆久久精品免费看国产 | 四虎影视永久在线 | 国产色网址 | 久久亚洲国产的中文 | 国产看色免费 | 欧美日韩亚洲国内综合网香蕉 | 日日摸夜夜欧美一区二区 | 亚洲精品国产字幕久久不卡 | 色汉综合| 国产99热在线观看 | 亚州激情视频在线播放 | 国产成人精品一区二三区在线观看 | 亚洲国产99在线精品一区二区 | 九九在线精品 | 欧美在线成人午夜网站 | 国产香蕉98碰碰久久人人 | 国产一区二区在免费观看 | 国产女人天堂 | 午夜亚洲精品久久久久久 | 91精品刘玥在线播放 | 黄色小视频在线免费观看 | 日本一级片在线观看 | 亚洲爱爱视频 | 国产一级淫片a视频免费观看 | 操视频网站 | 国产精品一在线观看 | 亚洲高清国产一区二区三区 | 我不卡老子影院午夜伦我不卡四虎 | 国产乱码精品一区二区三区四川 | 夜色91| 精品免费久久久久国产一区 | 欧洲成人全免费视频网站 | 日韩视频一 | 99国产精品免费视频观看 | 99久久日本一区二区波多野结衣 | 色综合久久六月婷婷中文字幕 | 欧美在线成人午夜影视 |