偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OSGi Bundle之Hello World

開發(fā) 后端
本文介紹如何開發(fā)OSGi Bundle,使用Hello World做為范例。開發(fā)工具為Eclipse,使用容器為Equinox。

本文是《你好,OSGi》系列的第二部分。之前曾介紹過OSGi是什么,下面將繼續(xù)上篇介紹的內(nèi)容,講述一個(gè)簡單的OSGi Bundle:Hello World是如何開發(fā)的。

51CTO編輯推薦:OSGi入門與實(shí)踐全攻略

開發(fā)一個(gè)簡單的Hello World的OSGi Bundle(OSGi綁定包)

在OSGi中,軟件是以Bundle的形式發(fā)布的。一個(gè)Bundle由Java類和其它資源構(gòu)成,它可為其它的Bundle提供服務(wù),也可以導(dǎo)入其它Bundle中的Java包;同時(shí),OSGi的Bundle也可以為其所在的設(shè)備提供一些功能。Eclipse為開發(fā)OSGiBundle提供了優(yōu)秀的支持,它不僅提供了向?qū)韯?chuàng)建OSGi Bundle,而且還提供了內(nèi)嵌的Equinox容器,您可以使用該容器執(zhí)行和調(diào)試OSGi插件。請注意每一個(gè)Eclipse插件,從本質(zhì)上說,都是一個(gè)OSGi Bundle,只是這個(gè)OSGiBundle多加了一些Eclipse專用的代碼而已。下面我們來看看如何使用Eclipse開發(fā)一個(gè)簡單的OSGi的HelloWorld Bundle。

3.1.新建Bundle

1) 在Eclipse中,點(diǎn)擊“File->New->Project”菜單,您將會(huì)看到新項(xiàng)目創(chuàng)建對話框;

2) 在新項(xiàng)目對話框中,選擇“Plug-inProject(插件項(xiàng)目)”并點(diǎn)擊“Next(下一步)”按鈕,您將看到插件項(xiàng)目對話框;

3) 在插件項(xiàng)目對話框中,請鍵入下列值:

Project Name(項(xiàng)目名稱):com.javaworld.sample.HelloWorld

Target Platform(目標(biāo)平臺(tái)):an OSGiFramework->Standard (OSGi框架->標(biāo)準(zhǔn))

4) 對其它的要求輸入值采用缺省值,并點(diǎn)擊“Next(下一步)”按鈕,您將會(huì)看到插件上下文對話框;

5) 在插件上下文對話框中,請選擇缺省值并點(diǎn)擊“Next(下一步)”按鈕;

6) 在模板對話框中,請選擇“Hello OSGiBundle(你好,OSGi包)”模板,然后點(diǎn)擊“Finish(完成)”按鈕完成該項(xiàng)目。

Eclipse將花幾秒鐘生成HelloWorld Bundle模板代碼,它將新建兩個(gè)文件:Activator.java和MANIFEST.MF,下面,讓我們看看這兩個(gè)文件:

3.1.1. Activator.java文件

源代碼清單1.Activator.java

  1. package com.javaworld.sample.helloworld;  
  2. importorg.osgi.framework.BundleActivator;  
  3. importorg.osgi.framework.BundleContext;  
  4. publicclass Activator implements BundleActivator {  
  5. public void start(BundleContext context)throws Exception {  
  6. System.out.println("Helloworld");  
  7. }  
  8. public void stop(BundleContext context)throws Exception {  
  9. System.out.println("GoodbyeWorld");  
  10. }  
  11. }  
  12.  

如果您想讓您開發(fā)的Bundle能在其啟動(dòng)或關(guān)閉時(shí)通知自身,那么您應(yīng)新建一個(gè)類,讓它實(shí)現(xiàn)BundleActivator接口,同時(shí),您還需要遵行下列規(guī)則:

這個(gè)實(shí)現(xiàn)了BundleActivator接口的類必須有一個(gè)public的、不帶參數(shù)的構(gòu)造函數(shù),這樣,OSGi框架就能調(diào)用該類的Class.newInstance()方法創(chuàng)建這個(gè)BundleActivator對象;

容器將調(diào)用Activator類的start()方法來啟動(dòng)Bundle,因此,我們可以在start()方法中執(zhí)行一些資源初始化的操作,例如,我們可以在該方法中獲取數(shù)據(jù)庫連接,以備后用。這個(gè)start()方法的唯一參數(shù)是一個(gè)BundleObject對象,Bundles可以通過該對象和OSGi框架通訊,我們可以從該對象中獲取OSGi容器相關(guān)的一些信息;如果某個(gè)Bundle拋出異常,容器將之置為“stopped(已停止)”狀態(tài),此時(shí),這個(gè)Bundle就不能對外提供服務(wù)。

如果我們要關(guān)閉一個(gè)Bundle,容器將調(diào)用Activator類中的stop()方法。因此,我們可在stop()方法中執(zhí)行一些資源清理任務(wù),比如釋放數(shù)據(jù)庫連接。

一旦Activator類準(zhǔn)備就緒,您就可以通過MANIFEST.MF文件把該包的合法名稱傳給容器。下面,我們就看看這個(gè)MANIFEST.MF文件。

3.1.2. MANIFEST.MF文件

該文件是Bundle的部署描述文件,其格式和正常JAR文件包中的MANIFEST.MF文件相同,因此它由一系列的屬性及這些屬性對應(yīng)的值組成,屬性名位于每一行的開頭,我們可以稱其為屬性頭。OSGi規(guī)范規(guī)定,您可以使用屬性頭向容器描述您的Bundle。您的HelloWorld Bundle的MANIFEST.MF文件看起來應(yīng)該如清單2所示:

源代碼清單2. Hello World Bundle中的MANIFEST.MF文件

  1. Manifest-Version:1.0 
  2. Bundle-ManifestVersion:2 
  3. Bundle-Name:HelloWorld Plug-in  
  4. Bundle-SymbolicName:com.javaworld.sample.HelloWorld  
  5. Bundle-Version:1.0.0 
  6. Bundle-Activator:com.javaworld.sample.helloworld.Activator  
  7. Bundle-Vendor:JAVAWORLD  
  8. Bundle-Localization:plugin  
  9. Import-Package:org.osgi.framework;version="1.3.0" 
  10.  

我們來看看這個(gè)文件中使用的屬性頭:

Bundle-ManifestVersion

該屬性頭告訴OSGi容器,本Bundle將遵循OSGi規(guī)范,數(shù)值2表示本Bundle和OSGi規(guī)范第4版本兼容;如果該屬性的數(shù)值為1,那么則表示本包和OSGi版本3或更早版本兼容。

Bundle-Name

該屬性頭為本Bundle定義了一個(gè)簡短的、可以閱讀的名稱;

Bundle-SymbolicName

這個(gè)屬性頭為本Bundle定義了一個(gè)唯一的、非本地化的名字;當(dāng)您需要從別的Bundles中訪問某一指定的Bundle時(shí),您就要使用這個(gè)名字。

Bundle-Version

該屬性頭給出了本Bundle的版本號。

Bundle-Activator

該屬性頭給出了本Bundle中使用的監(jiān)聽器類名字,這個(gè)屬性值是可選的。監(jiān)聽器將對Activator中的start()和stop()方法監(jiān)聽。在程序清單2中,該屬性頭的值為com.javaworld.sample.helloworld.Activator。

Bundle-Vendor

該屬性頭是對本Bundle發(fā)行商的表述。

Bundle-Localization

該屬性頭包含了本Bundle的本地化文件所在的位置,我們的HelloWorld Bundle中并沒有本地化文件,但Eclipse IDE仍自動(dòng)產(chǎn)生這個(gè)屬性頭

Import-Package

該屬性頭定義了本Bundle中引入的Java包,我將在本文后面的依賴性管理小節(jié)中詳細(xì)講解這個(gè)問題?,F(xiàn)在,HelloWorld Bundle已經(jīng)準(zhǔn)備就緒,讓我們來運(yùn)行并看看它的輸出結(jié)果。

3.2. 運(yùn)行Bundle

我在前面提到,Eclipse IDE中有一個(gè)內(nèi)嵌的EquinoxOSGi容器,您可以利用它來執(zhí)行或調(diào)試OSGi Bundle。請按照下面步驟執(zhí)行剛才的HelloWorld Bundle:

1 ) 單擊RunàRun… 菜單(譯者注,在Eclipse3.3中,請單擊RunàOpen Run Diglog…菜單);

2) Eclipse會(huì)打開“Create,manage and run configuration(新建、管理和運(yùn)行配置)”對話框,請雙擊”EquinoxOSGi Framework”按鈕,Eclipse將打開運(yùn)行時(shí)配置對話框;

3) 在上面的對話框中,將Name(名稱)輸入框的值改為HelloWorld Bundle;

4) 您會(huì)注意到在Workspace插件目錄下,有一個(gè)名為com.javaworld.sample.HelloWorld的插件,請選中它;在TargetPlatform(目標(biāo)平臺(tái))下,請確保org.eclipse.osgi插件被選中。您的Run(運(yùn)行)對話框應(yīng)該看起來如圖1所示:

HelloWorld Bundle的運(yùn)行配置 

圖1. HelloWorld Bundle的運(yùn)行配置

5) 現(xiàn)在,請單擊Run(運(yùn)行)按鈕,您應(yīng)該看到控制臺(tái)視圖上打印出“HelloWorld”。其實(shí),Eclipse是在控制臺(tái)視圖中打開OSGi控制臺(tái)。

3.2.1. OSGi控制臺(tái)

OSGi控制臺(tái)是OSGi容器的命令行界面,您可以在這個(gè)控制臺(tái)上啟動(dòng)、停止、安裝、更新和刪除Bundles。在EclipseIDE中,請點(diǎn)擊該控制臺(tái)視圖獲得焦點(diǎn),然后按回車鍵,這時(shí)您可以看到OSGi提示符,如圖2所示:(譯者注,在Eclipse3.3中,如果您沒有看到OSGi提示符,請?jiān)趫D1的運(yùn)行配置中,點(diǎn)擊Arguments標(biāo)簽,然后在ProgramArguments(程序參數(shù))輸入框中鍵入“-console”,然后再次運(yùn)行該Bundle)。

OSGi控制臺(tái)和HelloWorldActivator.java 

圖2. OSGi控制臺(tái)和HelloWorldActivator.java

下面是幾個(gè)經(jīng)常使用的OSGi命令,您可以使用這些命令與OSGi容器進(jìn)行交互。

  1. ss: 該命令顯示所有已安裝的Bundles及它們的狀態(tài),它將顯示Bundle ID,Bundle的簡短名稱及Bundle狀態(tài);  
  2. start< bundleid>: 該命令將啟動(dòng)一個(gè)Bundle;  
  3. stop< bundleid>: 該命令將停止一個(gè)Bundle;  
  4. update< bundleid>: 該命令使用新的JAR文件更新一個(gè)Bundle;  
  5. install< bundleid>: 該命令將一個(gè)新的Bundle安裝到OSGi容器;  
  6. uninstall< bundleid>: 從OSGi容器中卸載一個(gè)已安裝的Bundle。   

請注意,這些命令是OSGi規(guī)范中規(guī)定的,因此,您可以使用它們和任何OSGi容器交互。

讀到這里,希望您對OSGi Bundle的開發(fā)有了一個(gè)大致的了解。

【編輯推薦】

  1. OSGi是什么:Java語言的動(dòng)態(tài)模塊系統(tǒng)
  2. OSGi 4.2將于8月發(fā)布 新版特性預(yù)覽
  3. Spring Tool Suite開始支持OSGi
  4. 基于OSGi的動(dòng)態(tài)化系統(tǒng)搭建
  5. 初探OSGi Web容器:控制Web程序的生命周期
責(zé)任編輯:yangsai 來源: Carl的博客
相關(guān)推薦

2009-09-28 14:49:08

Spring DMOSGi服務(wù)

2023-01-06 08:18:44

2009-10-19 14:14:19

OSGi Web應(yīng)用

2011-09-08 10:41:12

Node.js

2009-09-29 09:16:23

啟動(dòng)bundleOSGi

2011-12-05 15:44:45

Knockout

2014-12-19 10:07:10

C

2017-11-23 17:45:46

Yii框架IntelYii框架深度剖析

2021-01-20 07:48:28

TechFlow前端網(wǎng)站

2012-02-20 14:26:48

JavaPlay Framew

2009-09-17 11:19:34

OSGi依賴性管理

2009-07-30 13:21:17

Scala入門Hello World

2009-08-11 10:32:23

什么是Groovy

2023-09-04 07:30:03

Wasm匯編語言

2011-06-08 14:39:06

Qt 教程

2009-08-14 16:54:19

C# Hello Wo

2021-11-26 08:22:01

Java動(dòng)態(tài)開發(fā)

2011-08-05 09:48:46

iPhone Interface

2024-04-11 13:13:27

2014-04-11 11:36:42

NDKAndroid開發(fā)終端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號