Getting Started with OSGi_ Part1

前言:

      從今天起,我開始翻譯Neil Bartlett先生的《Getting Started with OSGi》。我覺得相對於《OSGi實戰》與《OSGi進階》,Neil Bartlett先生講的更加明白易懂。因此,拿出來,給大家分享一下。本人的英語能力有限,但我會盡力將作者的意思說清楚。如果哪裏有翻譯不好的地方,請各位指出!附件爲作者的原文。

 

第一章:第一個Bundle

 

       在接下來的兩個星期裏,EclipseZone將爲員工舉行一系列OSGi短期培訓。經過這樣,他們將順利的掌握OSGi的編程藝術。他們將在每一期課程中瞭解到一些新的知識,並且通過10分鐘的學習,將知識運用在工作中。同樣,我們也將展示開發OSGi是多麼的容易。爲此,我們將不使用Eclipse進行開發,我們只用文本編輯器和基本的命令行來開發。現在,歡迎走入“Getting Started with OSGi”系列。

 

       實際上,第一堂課可能要比後面的課多花點時間,因爲我們需要搭建基本的工作環境。在開始之前,我們需要將OSGi框架運行起來。目前有三個開源的框架可以讓我們選擇:Apache Felix,Knopflerfish,和Equinox。無亂選擇什麼框架,對我們將要寫的代碼沒有影響,只不過運行過程中的提示可能有所不同。既然這裏是EclipseZone,那我們選擇Equinox——Eclipse自己建立的OSGi框架。你可以在你的Eclipse安裝根目錄中,找到plugins文件夾,然後將其中的org.eclipse.osgi_…….jar(省略號表示它的版本號,Eclipse版本不一樣,版本號也不一樣。如果你實在找不到,可以從http://download.eclipse.org/eclipse/equinox/ 中下載equinox並從中找到這個jar包 )拷貝到一個空的文件夾中(最好是C盤的根目錄下的空文件夾中,這樣不會由於其他因素造成不必要的困惑)。爲了更加方便的進行學習,我們將這個org.eclipse.osgi_…….jar改名爲equinox.jar。然後在我們的開發環境下打開命令行並且輸入以下命令(先用cd命令將工作目錄切換到該文件夾下):

java -jar equinox.jar -console 

 

       然後,在命令行控制檯中便會出現“osgi> ”。恭喜你,你已經成功的啓動了OSGi!

 

        “osgi> ”爲我們提供了一個進入命令以便我們對equinox框架進行控制。如果你喜歡,可以輸入“help”來查看命令列表,並且嘗試一下這些命令。現在,我們試一下“ss”。這個是常用的命令,它是“short status”的簡寫。它會列出所有已經安裝好的bundle以及這些bundle的狀態。(bundle是OSGi中的模式,如果你是一名Eclipse開發者,那麼你可能以插件來稱呼它們。實際上,bundle和插件是相同的東西。)當我們輸入“ss”之後,Equinox將會在命令行中打印出一下的內容:

 

Framework is launched.

id            State                  Bundle
0             ACTIVE               system.bundle_3.2.1.R32x_v20060919

 

        這是告訴我們已經有一個bundle被安裝並且並執行了。它是一個系統的bundle,並在OSGi運行的過程中,將永遠存在,它代表了框架本身。現在,我們將寫一個自己的bundle。在剛纔存放equinox.jar 的文件夾中,新建一個文件,並且取名HelloActivator.java,並將一下代碼粘貼過去。

import org.osgi.framework.*;

public class HelloActivator implements BundleActivator {
	public void start(BundleContext context) {
		System.out.println("Hello EclipseZone Readers!");
	}

	public void stop(BundleContext context) {
		System.out.println("Goodbye EclipseZone Readers!");
	}
}

 

      每一個bundle需要一個manifest文件來聲明bundle中的各種數據,例如:它的名字,版本等。因此我們需要建立一個名爲HelloWorld.MF的文件(注意:後綴名爲.MF),然後輸入以下內容,並且確定在文件結尾留一個空行,否則的話,jar命令將會截斷此文件,造成錯誤。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloWorld Plug-in
Bundle-SymbolicName: Login_ConfigFileLoginBundle
Bundle-Version: 1.0.0
Bundle-Activator: HelloActivator
Import-Package: org.osgi.framework;version="1.3.0"

 

      然後我們新打開一個命令行窗口(待會再返回剛纔的命令行窗口進行OSGi操作)用以下的命令來打一下包(先將工作目錄切換到該文件夾下),

> javac -classpath equinox.jar HelloActivator.java
> jar -cfm HelloWorld.jar HelloWorld.mf HelloActivator.class  

 

       打完包後,返回到剛纔的OSGi命令行控制檯,輸入“install file:HelloWorld.jar”。控制檯裏將會打印出“Bundle id is 1”。然後輸入“ss” 你將會看到以下的內容:

Framework is launched.
id          State                Bundle
0           ACTIVE             system.bundle_3.2.1.R32x_v20060919
1           INSTALLED       HelloWorld_1.0.0

 

      我們的HelloWorld Bundle已經安裝上去了。但是它還沒有被運行。我們將在以後會思考這個狀態是什麼意思,但是現在我們需要通過“start 1”來運行這個Bundle。這個“1”是每個Bundle的ID編號,就是上面第一列的內容。當你看到了“Hello EclipseZone Readers! ”的信息後,輸入“stop 1”,你又會看到“Goodbye EclipseZone Reader!”,重複這個操作,直到你厭倦。不要忘記了偶爾通過“ss”命令查看每一個Bundle的狀態(State)有沒有發生變化。

 

       這裏面發生了什麼?我們的類實現了BundleActivator接口,允許框架通知我們重要的Bundle的生命活動。當我們啓動Bundle的時候,框架執行“start”這個方法;當我們停止Bundle的時候,框架執行“stop”這個方法。只是因爲在manifest文件中,也就是我們剛纔的“HelloWorld.MF”文件中有這樣一句話“Bundle-Activator: HelloActivator”,他告訴了框架哪一個Bundle類被激活。正常情況下我們會給出規範的名稱,但是我們很懶惰所以我們使用默認的軟件包。

 

       到這裏我們就此結束第一次課。下節課見!

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 1196
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章