OSGi-開發環境的創建和HelloWorld(04)

1 OSGi開發環境的創建

1.1 Equinox是什麼

從代碼角度來看,Equinox其實就是OSGi核心標準的完整實現,而且還在這個基礎上增長了一些額外的功能(好比爲框架增長了命令行和程序執行的入口)。咱們在以前入門篇講解的都東西其實都是OSGi核心標準的一小部分。其實它的核心就是一個jar包,這個jar包既能執行(做爲標準Java包的特性),也是一個bundle(Manifest裏面含有OSGi bundle特有的元數據)。
咱們可以利用Equinox項目的代碼來運行一個實實在在的OSGi框架,框架啓動後,你就能夠將你開發好bundle放到裏面運行。java

1.2 下載Equinox

Equinox在http://download.eclipse.org/equinox上有官方下載,裏面列出了各個版本供咱們選擇:web

在這裏,咱們使用3.7版本的Equinox,下載好之後放在一個單獨的文件夾下(這裏個人路徑是D:\develop-tools):框架

1.3 從命令行啓動框架

若是啓動這個框架的話,有了上面的jar包就足夠了,咱們進入命令行輸入以下命令:java –jar org.eclipse.osgi_3.7.2.v20120110-1415.jar -console ,而後就會進入Equinox的控制檯:eclipse

若是出現osgi>的提示符,就說明啓動成功了。
Equinox的控制檯的部分基本命令以下(區分大小寫):ui

install [URL] 將URL表示的bundle安裝到框架中
uninstall [bundleID] 將id=bundleID的bundle卸載
start [bundleID] 啓動一個bundle
stop [bundleID] 中止一個bundle
refresh [bundleID] 刷新bundle
update [bundleID] 更新bundle 的內容
ss 簡單顯示全部bundle的狀態
status 展現安裝的bundle和註冊的服務
headers [bundleID] 展現bundle 的manifest中的元數據

 

1.4 在Eclipse中創建開發環境

1.4.1 設置

進入Eclipse的window-->preferences-->Plug-in Development-->Target Platform:spa

初始狀態只有一個Runing Platform,   點擊「Add…」按鈕來增長一個咱們本身的的platform,進入以下界面:命令行

選擇默認的第一個就好,點擊next;code

 

再點擊這裏的「Add…」;orm

選擇Directory;對象

選擇你的Equinox的jar包所在的路徑,而後點擊finish,回到剛纔的界面:

這時候你就會發現裏面多出來了你剛剛設置的路徑,路徑後面描述的「1 plug-ins available」則就是說的咱們放置的Equinox的jar包。
繼續點擊finish,回到最開始的界面:

這時候多出來了一個新的target platform,勾選上,而後肯定。

 

1.4.2 啓動

 

打開菜單項Run->Run configurations…,在OSGi Framework項中,新建一個Run configuration:

點擊run按鈕

Eclipse的控制檯中也出現來了osgi的提示符,說明你已經成功啓動了。

你能夠試試剛纔講的那些命令,看看能輸出些什麼(好比上圖中我輸入了ss)。

1.4.3 新建一個project

打開新建project的界面,選擇Plug-in Project:

而後輸入project的名字,TargetPlatform處選擇an OSGi framework->Equinox或者standard都行,點擊下一步:

 

這裏其實是對bundle的Manifest文件的設置,其中的ID就是Bundle-SymbolicName,Version就是bundle的版本號,下面還能決定是否認義BundleActivator,點擊finish就建立了一個project:

至此,開發環境已經創建完畢(這個project只是爲了演示怎麼創建,不會在接下來的內容中用到,可刪之)。

 

2 HelloWorld

 

如今可謂是萬事具有,只欠Helloworld了。爲了將OSGi框架的三個層次都涵蓋到,這個Helloworld可能會比其餘你見到的OSGi Helloworld程序要複雜一點點。若是對代碼中的一些API感到生疏,記得回到以前的入門篇中找到對應的內容,這樣對你理解代碼會有幫助。裏面的關鍵代碼已經用黃色高亮顯示。(出於篇幅考慮,代碼中的import語句都省略)

2.1 HelloWorld的定義與實現

首先咱們建立一個工程HelloWorld,在這個工程裏面,咱們建立一個包含sayHello方法的接口,準備做爲服務接口:

而後,對這個接口進行實現:

 

 

了將這個接口暴露出來,咱們須要在MANIFEST文件中加入以下條目:

接下來,爲了把這個服務註冊到框架中,咱們定義了一個Activator:

 

 

爲這個HelloImpl傳入了"Hello, OSGi"的字符串 爲了讓這個Activator可以工做,須要在MANIFEST文件中作以下定義:

Bundle-Activator: com.yangw.helloworld.activator.Activator

2.2 得到並執行SayHello服務

建立一個工程HelloClient,建立一個叫HelloUser的BundleActivator,其中的start方法會得到接口爲Hello的服務對象,而且經過這個對象來調用sayHello方法:

爲了得到Hello這個接口的定義,咱們還須要在MANIFEST文件中import Hello所在的package:



2.3 HelloWorld程序的流程

下圖表示了這幾個類的各個功能的相互依賴關係,整個關係從Hello接口的定義開始;而後到Hello接口被實現,獲得HelloImpl;再到Activator將HelloImpl註冊爲框架中的一個服務,再到HelloUser經過與框架交互獲得剛纔註冊的服務,而且使用這個服務從而輸出字符串;最後一個可選流程是當咱們stop org.serc.helloworld這個bundle的時候,程序會將以前註冊的服務註銷掉。

2.4 程序的執行

經過上面的工做,咱們獲得了兩個本身定義的bundle: org.serc.helloworld org.serc.helloworld.client 如今打開Run configurations界面,咱們會看見Bundles標籤裏面多出來了這兩個bundle:

run 便可,使用ss,start stop等命令便可看到效果

相關文章
相關標籤/搜索