第一節 引言 J2ME概述
到目前為止,大部分人都已非常熟悉 Java 2平臺,以及 Sun如何把 Java技術分成三個版本(標準版、袖珍版以及企業版),Sun 在1999年6月時推出瞭 Java 2袖珍版 (J2ME)來滿足消費電子和嵌入設備的需要。J2ME是為瞭那些使用有限的能源、有限的網絡連接 (常常是無線連接)以及有限圖形用戶界面能力的設備開發的。它最初的目標是 16位或 32位處理器,16 MHz時鐘頻率,512K或更少內存的設備。乍一看之下,J2ME就像一個沒有綁定明顯主題的松散的應用程序接口和技術規范。我們想通過說它不是什麼東西的方法來描述它,它不是一組用於臺式機Java應用程序規范,如果你再觀察仔細一些,你會發現所有的 J2ME組件都圍繞一個中心,這些中心被稱為configuration(配置 ,Sun的市場營銷資料也稱它們 design centers,設計中心),它們中間的每一個都是用於消費電子和嵌入設備的特別的類。
Connected limited device configuration(有限連接設備配置,簡稱 CLDC ) 這個配置定義瞭 Java應用程序接口以及支持手持設備的技術,就像 Sun的文檔中所描述的那樣, ” devices that you hold in your hand(你握在手中的設備) ” Palm序列手持設備可能是這一領域的設備的最好的例子,特別是它有開發 CLDC的功能以及 Palm設備運行期系統可用。
Connected device configuration(連接設備配置 CDC ) 這個配置定義支持象 Sun文檔中所說, ” devices that you plug into plug into the wall(你插入墻的設備)的設備的應用程序接口和技術,這樣的設備的一個例子可能就是機頂盒。
這兩種配置不同的地方就在於它們應用於的裝置的能力, CLDC設備的處理器能力有限 (與臺式機系統比較 ),並且存儲器大小一般也隻在128 KB到 512 KB之間, 與此同時, CDC系統就不同瞭,它可能有 32位或 64位處理器,以及有限的存儲容量,不過它的下限也得超過512K。 它遵循的原則就是,每個不同的能力硬件的配置都將被不同的虛擬機支持。 基於 CDC的系統使用一個功能強勁的虛擬機,而基於 CLDC系統的使用 KVM (我過會兒會介紹)。
每個配置代表一種低水平的,基本的應用程序接口,在這兩個相似基礎之上是 profile用於特殊設備的額外的應用程序接口。
J2ME現在定義兩個配置, Connected Device configuration(連接設備配置 CDC )和限制性更強的 Connected Limited Device Configuration (有限連接設備配置)。 簡表的實現是 Java 應用程序接口的一個集合,用於適應被定義配置的應用程序接口提供的服務,簡表是一個完整的運行環境,一個在簡表上執行的應用程序不需要額外的支持類。
J2ME沒有定義滿足這兩種配置的標準化用戶接口,Sun也承認現在的消費設備多種多樣,用戶界面也各不一樣,所以定義一個可用於所有用戶的界面是一場失敗的戰爭。J2ME中的用戶界面定義在簡表中。
第二節 J2ME的體系結構
現在個人計算機系統的數量和種類已經發展到無法控制的地步,請你想一想,你編寫的程序運行在“信息傢電”舞臺的情景吧,這些信息傢電包括呼叫器,行動電話,像Palm這樣的個人數字助手(PDA),電視機頂盒,POS終端以及其他的消費電子設備。現在全世界上光是手提電話生產商就有許多,更不用說別的傢電設備瞭,而且每一種傢電設備又有不同的特性和界面。所以,你可以想到, Java應用程序的輕便性以及能夠解決開發這麼許多不同的設備程序的能力,使大傢對J2ME有很大的期許。當然,為瞭更好的開發這些信息傢電,就要求把Java的精髓壓縮進一個非常小的程序包中,這就是J2ME。
J2ME是一種通過許多部件和規范的技術, 這眾多的部件和規范幫助 J2ME來滿足這眾多的消費產品的不同的需要。和所有的爪哇程式語言技術一樣,在它的核心屬於一種虛擬機。 就像使用所有 Java技術一樣,J2ME的核心也在一種虛擬機中。 最初,用於 J2ME應用程序虛擬機的被稱作 Kilobyte virtual machine或簡稱 KVM。就像它名稱的含義, KVM比較小,通常隻有 128K或更少。這比起我們通常瞭解和使用的 Java 2標準版 Java虛擬機 ( JVM )的 32 MB來說就小得多瞭。
用於連接虛擬機的是一系列配置和簡表,它們提供瞭用於特定 J2ME環境的類應用程序接口(見圖二)。 每個配置和簡表處理一般或具體的消費產品,配置和簡表規范是由多種多樣的設備生產商和用戶共同開發並建立的。配置是用於一組通用設備的最小的 Java平臺, 常常歸為一種橫向的設備分組,相對來說,橫向分組設備是那些共享相同的內存安排,通信帶寬,能量需求以及用戶能力的設備,一般認為配置能夠提供這眾多的設備的所有需求。J2ME領域的新的開發者常常被這些事實困惑的, 事實上, Sun的第一個配置(現在隻是一種配置的引用實現 )帶有稱為KVM的虛擬機引用實現, KVM滿足配置的虛擬機的必要條件。然而, Sun的 KVM也可以被另外一個虛擬機所代替,現在, 正是因為配置和虛擬機結合得有點緊密,因此導致瞭這麼多的混亂。
另一方面,簡表完善瞭 配置,為某個具體的設備傢族或某個具體的工業片段應用程序提供更高的性能。 換言之, 簡表為具體的縱向市場的設備比如說行動電話提供更多的性能。這裡的關鍵就是 簡表必須完善 配置, 沒有 配置和虛擬機提供核心類應用程序接口和運行期環境的話,簡表也不會工作。
通常,簡表為一種給定的垂直分組設備提供用戶界面、輸入法、持久性機制。這類 簡表被認為是發展這些設備應用程序的完整的工具包。我們見到最多的應用程序簡表的例子就移動電話簡表和個人數字助手(PDA)簡表,其他簡表為范圍寬廣的設備提供非常特殊的功能或應用程序可移植性,這方面的例子就是提供遠程方法調用 ( RMI )功能的簡表和提供統一銀行事務的簡表。
虛擬機、 配置、 簡表…你是不是已經被搞迷糊瞭? 如果這樣的話,我們就來簡化一下J2ME體系結構吧。 如果你想為小型信息傢電編寫Java應用程序的話,你就需要兩個前提:一個配置和至少一個 簡表。 現在, 一般是配置捆綁瞭虛擬機和一套針對你的平臺所能夠用的橫向分組設備的Java類庫。其次,你至少還需要一個 簡表來為你的平臺提供附加的 Java類,這個 簡表通常會為你的設備提供用戶界面、輸入和數據庫類。有瞭這兩個前提,你就瞭使用 Java為你的設備編寫應用程序的基本的J2ME環境。
第三節 詳細談談J2ME配置
J2ME可以在好幾個不同的配置中進行配置。 就像先前提到的,每個配置為一組通用設備提供最小的 Java平臺,到目前為止,隻有兩種配置規范。通過 Java規范定義的這兩種配置是Connected Limited Device Configuration (有限連接設備配置, CLDC )和 Connected Device Configuration (連接設備配置 CDC )。
CLDC是為使用較小的存儲容量的設備設計的。 CLDC用於內存在128到 512K之間的消費電子設備, 這一類別中典型代表的設備包含呼叫器、行動電話、PDA和POS終端;而另一方面, CDC用於比 PC機小但是具有比 512K內存多的設備,這一類設備包括互聯網絡電視系統、機頂盒、POS系統、汽車導航以及娛樂系統。一般來說, CDC使小型設備隻要具有少量的資源,至少比臺式機要少的資源就能進行Java編程,而CLDC使小型設備所擁有的資源隻要比一張智能卡多一點就可以進行Java編程瞭。
除瞭在容量大小和能力上對虛擬機規定瞭必要條件,配置還規定瞭類應用程序接口要包含常見的java.io、 java.net、 java.util和 java.lang包,配置可能還要包括其他需要的程序包。
CLDC
CLDC起源可以追溯到1999年JavaOne大會上介紹的Sun的第一個袖珍版 Java和第一個 KVM以及相關的類庫,雖然 CLDC和所有的配置都滿足成為虛擬機的條件,可它本身還不是虛擬機,CLDC的引用實現隻是包含在當前的分佈中的 KVM。
根據規范中所說,運行 CLDC的設備應該有 512K或更少的內存空間、一個有限的電源供給(通常是使用電池)、有限的或斷斷續續的網絡連接性 ( 9600 bps或更少 )以及多樣化的用戶界面甚至沒有用戶界面。 通常說來,這個配置是為個人化的、移動的、有限連接信息設備而設計,比如呼叫器、移動電話和 PDA等。
與 J2SE相比, CLDC缺少下列所說的這些特征:
AWT(抽象窗口開發包), Swing或其他圖形庫
用戶定義類裝載器
類實例的最終化
弱的引用
RMI
Reflection(映射)
CLDC有四個包: java.lang、 java.util、 java.io和 javax.microedition。 除瞭microedition包以外,其他的這幾個包都是J2SE包的核心子集,CLDC采用這些J2SE類庫,但是把其中一些在微型設備中用不到類、屬性、方法去掉瞭。因此 CLDC類庫有許多細微的差別。 如果
您想研究J2SE和 CLDC類庫之間的差別,請參閱相關文檔,在此就不詳細說明瞭。
想要理解為什麼CLDC去除這麼多J2SE中重要的類和特征,請回想一下與 CLDC相關的兩條基本原理。首先,它隻有 512K的內存空間, 而像RMI和映射需要的內存太大瞭。 其次,配置必須滿足為一組通用設備提供最小的 Java平臺。 在個人移動信息設備領域中,許多系統都不能支持J2SE中的眾多的高級特征。 例如,許多消費電子產品不能支持浮點數; 因此 Float(浮點類)和 Double(雙精度類)就被刪除瞭。 再看另外一個例子,許多系統沒有或不提供訪問一個文件系統的功能或權限。 因此與文件有關的類也被丟棄瞭。又如,錯誤處理是一個代價非常高的過程處理,在許多消費電子設備中,故障恢復是很難的甚至是不可能的。 所以在 CLDC中,許多錯誤處理類也被刪除瞭。
java.microedition程序包提供瞭一個一般的結構來替代許多 J2SE網絡輸入/輸出類。CLDC一般連接器結構還定義瞭一個 Connector類,允許許多不同類型的連接能夠使用靜態方法,下表列出使用同一個Connector類創建和打開五種不同類型的連接的方