JES服务程序
                            
                            
                            JES,是Java嵌入服務器-Java Embedded Server的縮寫。在嵌入系統中使用Java,是Java跨平臺戰略的重要組成部分。國內目前并無比較系統的中文文獻。
從最簡單的包(bundle)開始
簡介
每個包(bundle)都至少需要一個包激活器類,用來激活包,還要有一個清單(manifest)文件。包激活器類是一個實現org.osgi.framework.BundleActivator 的類,它定義了start (開始)和stop (結束)方法的邏輯。JES框架使用start 和stop方法來啟動和停止包。
在這個例子里,我們建立一個簡單的包(bundle),在它里面沒有什么服務,僅僅在啟動的時候顯示Hello ,在停止的時候顯示Bye 。請按以下步驟進行:
用Java編寫一個包激活類
用文本文件的格式建立一個清單(Manifest)文件。
建立一個JAR文件,里面包含編譯好的激活器類以及清單(Manifest)文件。
啟動 JES框架,并安裝、運行、停止包。
稍后,如果要建立復雜的包,你將編寫服務,用服務處理處理框架工作的事件,利用JES核心服務;你還要給包激活器這個類增加功能。
BundleContext(包環境)對象
現在,是介紹BundleContext(包環境)對象的時候了。這個對象讓包能夠與JES框架相互作用。
在框架啟動一個包的時候,就建立一個BundleContext 對象,并把這個對象傳遞給包激活器的start 方法。利用BundleContext 對象里的方法,包可以安裝自己、登記服務、取得其它已經安裝的包的信息、取得對服務的引用、獲取或釋放服務對象、獲取或翻譯包(Bundle)對象和文件(File)對象、占用框架發布的事件。BundleContext 對象的內容,在本教程的后面還會詳細介紹。
現在,你對BundleContext 對象需要了解這些事情:
只有 JES框架能夠創建BundleContext對象,包不能創建它。
在包被激活的時候,BundleContext對象被傳遞給start方法。
在包停止的時候,BundleContext還被傳遞給stop方法。
現在,我們來看看,如何編寫包的激活器類。
包的生命周期
每個包都有一個生命周期。在生命周期里,包可以被安裝、激活、更新、滅活,直至最后卸載。生命周期就是我們從比較高的級別上觀察這一連串事件時,事件經歷的時間 (如果你對細節有興趣,可以查閱OSGi 服務網關規范,發行版1.0)。
生命周期運行的步驟就象這樣:
1. 安裝包
JES框架讀取包的內容,給包分配一個包ID,并且持續地緩存包的位置和狀態。會建立一個專門的類引導,以訪問包的資源。
2. 激活包
框架檢測這個包所要求的Java類是否已經由其它的包導入了。如果別的包已經導入了相應的類,框架就調用包激活器類里的start 方法,登記包的服務。這時,包的服務開始運行。
在這一步,JES框架還要解決包之間的依賴關系,這樣可以保證:如果包B依賴包A,那么在啟動包B之前,包A已經存在。
3. 滅活包
框架調用包的stop 方法,取消服務的登記。服務停止運行。
4. 卸載包。
包從計算機上刪除。
如果在包的生命周期期間出現錯誤, JES框架就會拋出一個BundleException(包異常),這是一種特殊的異常類型,只在包的生命周期當中發生。BundleException is是OSGI規范定義的一個標準異常 (在org.osgi.framework里),JES實現了這個異常。
第一步:編寫包的激活器類
我們要建立的greeting1 這個包,它的激活器類Activator.java非常簡單,只定義了start 和stop 二個方法。
代碼示例1-1 一個簡單的包激活器類(greeting1/Activator.java)
①
②
③
④
⑤
package greeting1;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws BundleException {
System.out.println( "Hello" );
}
public void stop(BundleContext context) throws BundleException {
System.out.println( "Bye" );
}
}
激活器類Activator 保存在包greeting1 里①。它從org.osgi.framework逐個導入了BundleActivator, BundleContext, 和BundleException 這幾個類②,而沒有導入整個org.osgi.framework包,這樣降低了JES裝載包激活器時占用的內存數量。
激活器Activator 實現BundleActivator (包激活器)這個接口③,定義了它的start 和stop 方法,所有的包激活器類都要實現這些功能。在start 方法④的實現里,用它拋出BundleException(包異常),而沒有用BundleActivator里聲明的java.lang.Exception 作為拋出異常的方法,因為BundleException (java.lang.Exception的子類) 是JES框架用來拋出有關包的生命周期問題的異常類型。start 的這個實現,在包啟動的時候,會顯示Hello。
stop 方法⑤也拋出BundleException ,在包停止的時候顯示Bye 。
第二步:建立清單文件
在JES框架里安裝的每個包,都包含一個清單(Manifest)文件。清單文件是標準的文本文件,它描述了JAR文件里的內容。清單文件是結構化組織的文件,每個段都由一個頭組成,每個頭都有一個屬性。例如,參見greeting1/Manifest文件,它的內容是:
BundleActivator: greeting1.Activator
這個清單文件只有一個頭,它告訴JES框架,用哪個類作為包的激活器類。
頭給JES框架提供了“鉤子”,可以鉤上包里包含的文件和資源。通過這種途徑,框架就能知道,當包在生命周期中移動的時候,在包里的什么地方去找到資源(例如:包激活器)。
OSGi 規范義了能夠在清單文件里供JES包使用的頭(如表1-1所示)。但是表1-1 只顯示了頭的名稱。每個頭都有一套規定好的語法,必須用它的語法給它指定屬性。不過,學習這份教程,并不需要了解語法的細節內容。如果你對細節感興趣,可以參閱Java 嵌入服務器 2.0 開發人員指南。
表 1-1 在包的清單文件里可以使用的頭
頭
說明
Bundle-Activator
包激活器
Bundle-ClassPath
包的類路徑
Bundle-ContactAddress
包的聯系人地址
Bundle-Description
包的描述
Bundle-Vendor
包的開發商
Bundle-DocURL
包的文檔URL
Bundle-Name
包名稱
Bundle-NativeCode
包的本機碼
Bundle-UpdateLocation
包的更新位置
Import-Service
導入服務
Bundle-Version
包的版本
Export-Package
導出包
Export-Service
導出服務
Import-Package
導入包
第三步:建立包的JAR文件
現在,我們有了一個包激活器類和一個清單文件,可以建立包了。建立包,可以使用gnumake (Solaris 平臺)或者nmake (Windows平臺)這兩個工具。
在Windows NT上的操作方法如下:
1.打開一個 MS-DOS 命令窗口
2.轉到greeting1目錄,就象這樣:
C:cd jes2.0docs utorialgreeting1
3. 建立 JAR 文件:
C: make
4. 檢測是否成功創建了JAR 文件:
C:cd jes2.0docs utorialuildundles
C:dir greeting1.jar
第四步:安裝、運行包
要啟動JES框架,單擊開始菜單,然后是程序>Java Embedded Server2.0>Java Embedded Server 2.0 Frame。
當JES框架啟動時,在MS-DOS窗口時,可以看到下面內容:
Java Embedded Server 2.0
Copyright 1998, 1999 and 2000 Sun Microsystems, Inc.
All rights reserved. Use is subject to license terms.
Type ‘h[elp]’ for a list of commands.
>
要打開JES工具包JES Tools Portal—單擊開始菜單,然后是程序>Java Embedded Server 2.0>Java Embdded Server 2.0 Tools Portal.
在Tools Portal里,單擊管理面板,打開JES的管理面板 JES Management Panel。
在管理面板里,單擊包(Bundles)標簽。
在要安裝的包文件(Bundle File to Install)里,找到greeting1 這個包(缺省是jes2.0/docs/tutorial/build/bundles/greeting1.jar),然后單擊安裝。
在右側面板的列表中看到greeting1 時,單擊開始。
檢查在右側面板中顯示的greeting1.jar的詳細內容.
                        
                        
                        從最簡單的包(bundle)開始
簡介
每個包(bundle)都至少需要一個包激活器類,用來激活包,還要有一個清單(manifest)文件。包激活器類是一個實現org.osgi.framework.BundleActivator 的類,它定義了start (開始)和stop (結束)方法的邏輯。JES框架使用start 和stop方法來啟動和停止包。
在這個例子里,我們建立一個簡單的包(bundle),在它里面沒有什么服務,僅僅在啟動的時候顯示Hello ,在停止的時候顯示Bye 。請按以下步驟進行:
用Java編寫一個包激活類
用文本文件的格式建立一個清單(Manifest)文件。
建立一個JAR文件,里面包含編譯好的激活器類以及清單(Manifest)文件。
啟動 JES框架,并安裝、運行、停止包。
稍后,如果要建立復雜的包,你將編寫服務,用服務處理處理框架工作的事件,利用JES核心服務;你還要給包激活器這個類增加功能。
BundleContext(包環境)對象
現在,是介紹BundleContext(包環境)對象的時候了。這個對象讓包能夠與JES框架相互作用。
在框架啟動一個包的時候,就建立一個BundleContext 對象,并把這個對象傳遞給包激活器的start 方法。利用BundleContext 對象里的方法,包可以安裝自己、登記服務、取得其它已經安裝的包的信息、取得對服務的引用、獲取或釋放服務對象、獲取或翻譯包(Bundle)對象和文件(File)對象、占用框架發布的事件。BundleContext 對象的內容,在本教程的后面還會詳細介紹。
現在,你對BundleContext 對象需要了解這些事情:
只有 JES框架能夠創建BundleContext對象,包不能創建它。
在包被激活的時候,BundleContext對象被傳遞給start方法。
在包停止的時候,BundleContext還被傳遞給stop方法。
現在,我們來看看,如何編寫包的激活器類。
包的生命周期
每個包都有一個生命周期。在生命周期里,包可以被安裝、激活、更新、滅活,直至最后卸載。生命周期就是我們從比較高的級別上觀察這一連串事件時,事件經歷的時間 (如果你對細節有興趣,可以查閱OSGi 服務網關規范,發行版1.0)。
生命周期運行的步驟就象這樣:
1. 安裝包
JES框架讀取包的內容,給包分配一個包ID,并且持續地緩存包的位置和狀態。會建立一個專門的類引導,以訪問包的資源。
2. 激活包
框架檢測這個包所要求的Java類是否已經由其它的包導入了。如果別的包已經導入了相應的類,框架就調用包激活器類里的start 方法,登記包的服務。這時,包的服務開始運行。
在這一步,JES框架還要解決包之間的依賴關系,這樣可以保證:如果包B依賴包A,那么在啟動包B之前,包A已經存在。
3. 滅活包
框架調用包的stop 方法,取消服務的登記。服務停止運行。
4. 卸載包。
包從計算機上刪除。
如果在包的生命周期期間出現錯誤, JES框架就會拋出一個BundleException(包異常),這是一種特殊的異常類型,只在包的生命周期當中發生。BundleException is是OSGI規范定義的一個標準異常 (在org.osgi.framework里),JES實現了這個異常。
第一步:編寫包的激活器類
我們要建立的greeting1 這個包,它的激活器類Activator.java非常簡單,只定義了start 和stop 二個方法。
代碼示例1-1 一個簡單的包激活器類(greeting1/Activator.java)
①
②
③
④
⑤
package greeting1;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws BundleException {
System.out.println( "Hello" );
}
public void stop(BundleContext context) throws BundleException {
System.out.println( "Bye" );
}
}
激活器類Activator 保存在包greeting1 里①。它從org.osgi.framework逐個導入了BundleActivator, BundleContext, 和BundleException 這幾個類②,而沒有導入整個org.osgi.framework包,這樣降低了JES裝載包激活器時占用的內存數量。
激活器Activator 實現BundleActivator (包激活器)這個接口③,定義了它的start 和stop 方法,所有的包激活器類都要實現這些功能。在start 方法④的實現里,用它拋出BundleException(包異常),而沒有用BundleActivator里聲明的java.lang.Exception 作為拋出異常的方法,因為BundleException (java.lang.Exception的子類) 是JES框架用來拋出有關包的生命周期問題的異常類型。start 的這個實現,在包啟動的時候,會顯示Hello。
stop 方法⑤也拋出BundleException ,在包停止的時候顯示Bye 。
第二步:建立清單文件
在JES框架里安裝的每個包,都包含一個清單(Manifest)文件。清單文件是標準的文本文件,它描述了JAR文件里的內容。清單文件是結構化組織的文件,每個段都由一個頭組成,每個頭都有一個屬性。例如,參見greeting1/Manifest文件,它的內容是:
BundleActivator: greeting1.Activator
這個清單文件只有一個頭,它告訴JES框架,用哪個類作為包的激活器類。
頭給JES框架提供了“鉤子”,可以鉤上包里包含的文件和資源。通過這種途徑,框架就能知道,當包在生命周期中移動的時候,在包里的什么地方去找到資源(例如:包激活器)。
OSGi 規范義了能夠在清單文件里供JES包使用的頭(如表1-1所示)。但是表1-1 只顯示了頭的名稱。每個頭都有一套規定好的語法,必須用它的語法給它指定屬性。不過,學習這份教程,并不需要了解語法的細節內容。如果你對細節感興趣,可以參閱Java 嵌入服務器 2.0 開發人員指南。
表 1-1 在包的清單文件里可以使用的頭
頭
說明
Bundle-Activator
包激活器
Bundle-ClassPath
包的類路徑
Bundle-ContactAddress
包的聯系人地址
Bundle-Description
包的描述
Bundle-Vendor
包的開發商
Bundle-DocURL
包的文檔URL
Bundle-Name
包名稱
Bundle-NativeCode
包的本機碼
Bundle-UpdateLocation
包的更新位置
Import-Service
導入服務
Bundle-Version
包的版本
Export-Package
導出包
Export-Service
導出服務
Import-Package
導入包
第三步:建立包的JAR文件
現在,我們有了一個包激活器類和一個清單文件,可以建立包了。建立包,可以使用gnumake (Solaris 平臺)或者nmake (Windows平臺)這兩個工具。
在Windows NT上的操作方法如下:
1.打開一個 MS-DOS 命令窗口
2.轉到greeting1目錄,就象這樣:
C:cd jes2.0docs utorialgreeting1
3. 建立 JAR 文件:
C: make
4. 檢測是否成功創建了JAR 文件:
C:cd jes2.0docs utorialuildundles
C:dir greeting1.jar
第四步:安裝、運行包
要啟動JES框架,單擊開始菜單,然后是程序>Java Embedded Server2.0>Java Embedded Server 2.0 Frame。
當JES框架啟動時,在MS-DOS窗口時,可以看到下面內容:
Java Embedded Server 2.0
Copyright 1998, 1999 and 2000 Sun Microsystems, Inc.
All rights reserved. Use is subject to license terms.
Type ‘h[elp]’ for a list of commands.
>
要打開JES工具包JES Tools Portal—單擊開始菜單,然后是程序>Java Embedded Server 2.0>Java Embdded Server 2.0 Tools Portal.
在Tools Portal里,單擊管理面板,打開JES的管理面板 JES Management Panel。
在管理面板里,單擊包(Bundles)標簽。
在要安裝的包文件(Bundle File to Install)里,找到greeting1 這個包(缺省是jes2.0/docs/tutorial/build/bundles/greeting1.jar),然后單擊安裝。
在右側面板的列表中看到greeting1 時,單擊開始。
檢查在右側面板中顯示的greeting1.jar的詳細內容.
總結
                            
                        - 上一篇: VR和3D设备
 - 下一篇: 计算机教室灭火器配置标准,学校灭火器配置