Java嵌入式開發之二(下) [轉自yesky]
發表時間:2024-06-21 來源:明輝站整理相關軟件相關文章人氣:
[摘要]第五節 再談談一些J2ME規范 在 J2ME內還有很多子規范, J2ME的重要的部分如下:PersonalJava、K虛擬機 (KVM)、Java嵌入服務器以及 PersonalJava的兩個擴展規范: JavaPhone和 JavaTV應用程序接口。 你可以想象, JavaPhone是一個定位...
第五節 再談談一些J2ME規范
在 J2ME內還有很多子規范, J2ME的重要的部分如下:PersonalJava、K虛擬機 (KVM)、Java嵌入服務器以及 PersonalJava的兩個擴展規范: JavaPhone和 JavaTV應用程序接口。 你可以想象, JavaPhone是一個定位于無線電智能電話和互聯網絡可視電話的應用程序接口,而 JavaTV則滿足機頂盒市場的需求。
下面我想詳細的談一談以上的規范:
1、PersonalJava
PersonalJava應用程序環境目標是 Web連接消費設備----常常執行來自網絡的小應用程序。問題是 PersonalJava如何適合 J2ME的配置和簡表方案。 答案是 PersonalJava將被包容進 Connected Device Configuration中,最終將被定義為 Personal簡表,即前面所談到的Personal簡表。
另一方面,有一段時間將有兩個 Java應用程序接口為嵌入開發世界服務: PersonalJava和 EmbeddedJava。 PersonalJava偎依在 J2ME大傘之下, 可為什么 EmbeddedJava不呢? EmbeddedJava不和 PersonalJava同在 J2ME內,是因為在 PersonalJava和 EmbeddedJava應用程序之間有一個基本的差別。 PersonalJava應用程序期望連接到某類網絡中下載并執行小應用程序。 按照這種觀點, PersonalJava設備就是一般用途的消費設備; 它們的能力可以被擴展。
相比之下, EmbeddedJava設備則慘了點。 它們執行的功能都非常具體的,基本沒有必要提供下載新的代碼到 EmbeddedJava設備的能力。 Hence, PersonalJava設備使用可擴展 Java應用程序接口; 而EmbeddedJava設備則沒有,因為沒有必要使用。
PersonalJava可以以兩種形式得到: 由原碼形式的,提供給那些對把PersonalJava移植到其他設備感興趣的開發者,那些已經把 PersonalJava移植到某個具體的操作系統和處理機的組織提供二進制形式的 PersonalJava環境。有興趣探索 PersonalJava的開發者如果沒有二進制平臺也可以使用 PersonalJava模擬環境 ( PJEE )。 這個模擬器運行于 Solaris/SPARC或 Windows,并且在許多配置中可用。 這些多種多樣的配置基于“ look and feel”和類庫支持 (環境是否提供 PersonalJava規范中規定的最低限度的或最大的類庫)。PJEE包括類文件,一個應用程序 launcher和一個 appletviewer (兩者都是為了調試功能并使其最優化)和其它的附帶的文件 (例如字體敘述文件)。
J2ME家族的另一位成員 JavaCheck實用程序,提供了 PersonalJava的補充支持。 你把應用程序傳過 JavaCheck,它將告訴你你的應用程序在一個 PersonalJava環境中能否順利地執行。 JavaCheck檢查類之間的依賴關系,如果應用程序調用了一個在 PersonalJava不可用的應用程序接口,它就會給出一個警報信號。 (據我所知,目前有兩種JavaCheck的版本可用,一個是用于檢驗 PersonalJava 1.0版應用程序,另一個用于檢驗 1.1.x版程序。 當前的 PersonalJava應用程序接口規范是 1.2,用于這一版本的 JavaCheck還沒有。 讀者請去Sun相關網站去看看( http : file://java.sun.com/products/personaljava)。
2、KVM
前面我也說過,KVM是用于 J2ME平臺最小的虛擬機,并且是用于CLDC配置的虛擬機。可是J2ME應用程序并不一定非要使用 KVM,J2ME技術可以使用任何虛擬機,不過至少應當有 KVM這樣的功能。
為了滿足基于KVM的設備一般只有狹小的內存空間和有限的處理能力的事實, KVM使用 C編寫 (它不是現有的VM改進了的以后的產品)。 此外, KVM是模塊化的, 也就是說,它是由模塊構建的,當某個模塊實現了預先設定的目標后,就可以很容易地把這一模塊卸載。 可選的某塊包括: 大的數據類型 ( long、 float和 double ),多維數組、類文件驗證等。
KVM的本地界面以輕便性為原則構建,所以在KVM中任務切換不依賴硬件產生的記時器中斷,因此在這種意思上來說不是搶先式。任務切換發生在虛擬機執行了一個預設編號的字節碼之后。 并且, KVM的無用單元收集利用一個標記清掃(mark and sweep)算法來實現無用單元釋放。 因此,對象引用是直接的,就像標準 Java一樣。
當然,除了虛擬機以外還有許多可用的執行環境,在小型設備中,虛擬機必須要么被擴展,要么在附加工具協助下提供一個更加完整的運行期環境,正是這個原因, KVM需要附帶的工具,比如說, JavaCodeCompact工具提供了預鏈接和預加載類, 允許Java類被直接地鏈接進虛擬機中。((設備上所有的應用程序使用的類 can直接地嵌入虛擬機。)
KVM一個可選的附件就是 Java Application Manager ( Java應用程序管理器,簡稱 JAM )。JAM的工作就是處理下載、安裝、執行和卸載 CLDC設備上的應用程序的細節問題,因為資源有限,在CLDC設備上有可能不存在這些功能。JAM也處理更新安裝應用程序的操作。(如果更新過程失敗,它甚至可以重新使用舊的應用程序。 )
3、Java Embedded Server(Java嵌入服務器)
Java Embedded Server( Java嵌入服務器,簡稱 JES),在 PersonalJava基礎上建立,是一個用于嵌入式網絡設備的運行期環境。為了理解 JES,你必須理解兩個核心概念:服務和服務空間結構。后者是前者的容器。服務程序是運行于一個 JES服務器上的組件化程序;服務空間結構是為服務程序提供生命周期 支持的環境。
技術上說,服務程序是界面的實現,事實上,它是一個實現特定活動的Java類集合。比如說,假如把 JES配置為一個家庭的氣候控制系統的服務器,可以把從模數轉換器讀到的溫度數據放進一個數據組件程序中。我就可以稱這個組件為ReadThermostats服務程序。
在 JES的領域,服務的封裝媒介稱為 bundle。簡單地說,bundle就是一個帶有特殊內容的JAR文件。服務程序和bundle之間有一對一關系,一個bundle帶有一個服務程序。服務程序和 bundle之間有一對一關系,一個 bundle帶有一個服務程序。可這也不一定,一個 bundle可以設置多個服務程序索引 (注意, JES提供的所有的核心服務,每個 bundle中只有一個 )。
正如前面提到的那樣,服務空間的一項工作就是管理服務程序的生命周期,這個工作的很大的部分包括解決服務隸屬關系。bundle內容的一個重要的部分是bundle服務的依賴信息。所以,當服務空間打開一個bundle安裝它的服務時,服務空間就可以確定外部需要什么服務。而且,一個服務的依賴關系并不是靜止不變的,它們可以隨某些事件改變。比如說當服務程序更新時的變化就是一個很好的例子。一個服務的新的版本可以添加或去除依賴關系。服務空間跟蹤并解決這樣的動態依賴關系。如果服務空間處理所有服務程序的生命周期,這就暗示了服務空間被賦予知曉一切的能力,那就是說,它能夠推論結構、依賴、安裝的細微差別等所有它負責的服務。服務空間通過在 bundle內伴隨服務的 Java代碼模塊處理一些任務,這些模塊被稱作 wizard(向導)。JES向導是根據它們完成的任務命名的:
Dependencies -向導告訴調用者一個bundle依賴關系是什么。
Installer-向導處理bundle中服務的安裝和刪除操作。
Activator -向導知道如何啟動和終止服務。
Updater -向導控件更新bundle中的服務。(更新向導不僅知道更新一個服務,而且知道在何時和什么情況下更新服務。 )
About -這個向導,就像它名稱意味的那樣,返回關于 bundle內容的信息。
Dispatcher -這是一種元向導(meta-wizard)。服務空間調用dispatcher向導定位一個bundle的其他向導。
當一個 JES服務器啟動的時候,服務空間并不是完全沒有啟動服務。JES定義一組核心服務(可選),這些都是任何 JES服務器的組成部分。這些核心服務包含:
HTTP服務
日志 -記錄錯誤和事件日志
日期 -精確到秒的日期/時間服務
連接管理器 -提供網絡服務和Socket綁定,也處理連接接收。
線程管理器 -管理服務器提供的線程。thread管理器支持線程池并允許有效使用線程上界的規范。
計劃程序 -提供未來的事件計劃安排 (可用于告訴服務器某某動作必須在某某事件發生 )
RMI
SNMP
控制臺 -提供遠程管理服務器功能
基于 HTTP的遠程應用程序接口實現
基于 RMI的遠程應用程序接口實現
如果你把服務空間結構當成 JavaBean中的容器的話, JES就變得容易理解了。在這種類比關系中,服務程序就相當 JavaBean。那么,正象組件容器提供一個環境供 JavaBeans實例化、運行一樣,服務空間就是以實例化的服務的聚集地。服務空間管理安裝、實例化、執行、終止以及卸載服務;它也提供應用程序接口供服務交互作用。