網絡是這個領域最重要的增值特性。當手機可以隨時隨地無線上網,PDA可以和個人PC同步,車載PC可以獲得網上GPS地圖數據時,這些孤立的設備才能夠發揮最大的作用。
而平台無關性和網絡功能正是Java的設計目標和能力(事實上,Java最初的設計目標就是用於消費電子領域,但是後來在PC和服務器上得到了發展)。"一次編寫,到處運行"的平台無關性,對網絡,多重設備間聯網的機制(JINI)顯然對這個領域是至關重要的軟件條件。這個領域內的Java標准就是J2ME。
J2ME的由來
Java的最大目標和特點,就是"一次編寫,到處運行"的平台無關性。但是,很自然的,正如Sun認識到的,"One size does'nt fit all",一套標准無法適應各種不同的需求。因此,Java技術目前共有三套,分別針對不同的平台和應用。
Standard Edition(J2SE,標准版):針對桌面端PC和工作站的個人和低端商務應用。
Enterprise Edition(J2EE,企業版):針對服務器端企業級應用,支持Servlets, JSP和XML等等。
Micro Edition(J2ME,袖珍版,也有翻譯為小型版或者移動版的。)針對有限內存,顯示和處理能力的設備,主要是消費電子和嵌入式設備領域(這實際正是Java語言設計最初的目標領域)。
在消費電子和嵌入式設備領域,內存從幾百K到幾十M,從沒有屏幕到Web-TV,CPU從低功耗的嵌入式處理器到206MHz的RISC處理器,硬件條件的差異是相當大的。這就使得J2ME的標准需要有不同的層次和類別來適應這個復雜的領域,因此相比之下J2ME就比J2SE和J2EE的標准要復雜得多。關於J2ME標准的文章已經有了不少,但是很少有文章清晰扼要地講清楚J2ME的體系結構劃分的原因,而只有清楚了劃分的根據和為什麼這麼劃分,才能夠更好地理解標准。尤其是因為硬件發展速度是很快的,很有可能一段時間之後,如果還按最初標准的字面定義區劃分設備就會陷於迷惘。作者閱讀和浏覽了相當多的文章和介紹,但有些問題也還是最近才認識得比較清楚,在此和讀者分享我的認識,也希望得到建議和指正。因此,下面的介紹盡量不去重復其他文章中都已介紹過的一些具體細節,不去翻譯規范的字面定義,而是分析規范制定的原因,類別劃分的真正標准,從開發者的角度,讓讀者能夠在這個復雜而多變的領域中更准確地把握技術的區別和趨勢脈搏,更好地為將來廣闊的機會做好准備。
J2ME體系結構――Configuration和Profiles
針對消費電子和嵌入式設備領域豐富多樣的設備和彼此相差極大的計算能力及各種硬件條件,J2ME首先根據最基本的一些特征把它們劃分為兩類。
具備間斷網絡通訊能力的個人移動信息設備:如手機,雙向呼機,PDA(Personal Digital Assistant,個人數字助理,也稱掌上電腦)等等。
有固定的不間斷網絡連接的共享連接信息設備:如置頂盒(set-top boxes),Web-TV,支持Internet的有屏幕電話,汽車娛樂/導航系統等等。
Sun的J2ME FAQ(常見問題集)裡有一個很好的概括:J2ME技術有兩個設計中心�D�D手持的設備,和可以插到牆上插座的設備。第一類設備往往是個人化的,移動的,使用電池,體積和功耗都有限制,因此功能和計算能力有限。第二類設備一般是固定的,因此體積沒有太大限制。由於固定,可以有持續電源供應,因此功耗沒有太大問題,計算能力相對充裕。
計算能力是這兩類設備的主要區別,對其上可能的應用和環境顯然有著本質影響,不同類別的設備不可能采用同樣的Java平台,必須分別定義。針對這兩大類設備的平台規范就是Configuration(有譯為配置的,不過我認為最好不譯)。第一類設備的Configuration稱為CLDC(Connected, Limited Device Configuration),第二類稱為CDC(Connected Device Configuration)。
屬於同一類的設備計算能力是相似的,但是其他功能和條件還有非常大的區別。作為Java平台必須保證相容性,這就必須捨棄所有的設備特殊性。因此,Configuration就是支持一組通用設備的最小Java平台,作為這些設備的最小公分母來保證不同設備間的平台相容性。這裡的Java平台主要是指Java虛擬機(JVM)和核心庫。
在Configuration中捨棄了設備的特殊性來保證Java平台的相容性,但是僅僅有Configuration顯然是不夠的,特殊的具體設備其獨有的功能和硬件條件都沒有得到支持。為此,在Configuration的基礎上,根據設備具體功能再進行一次劃分,比如智能手機,PDA等等。功能的劃分也就是其他硬件條件的劃分,比如屏幕大小,內存,計算能力,電力供應等等都是從屬於功能的,因此同功能的設備的硬件條件都是非常相似的。Profile(譯為簡表或者簡檔)就是針對每一類功能設備的特殊性定義的與設備特性相關的API,建築於Configuration之上,作為Configuration的擴展和補充。例如MIDP(Mobile Information Device Profile,移動信息設備Profile)就定義了關於移動信息設備(主要指智能手機和一部分具有無線通信功能的PDA)的圖形界面,輸入和時間處理,持久性存儲,短消息等等的API,並且考慮到了移動信息設備的屏幕和內存限制。而正在制定中的PDA Profile則定義了針對PDA的API,其屏幕,內存條件都要大於MIDP,但是網絡方面的要求則顯然和手機有所不同。如下圖所示,同屬於一個Configuration的設備根據功能不同由不同的Profile來支持,Profile體現設備的特殊性,但是都建築在一個共同的基礎Configuration平台之上。
關於J2ME的體系結構,我們可以這樣總結:
Configuration的分類是根據計算能力的不同來劃分的,同類設備的計算能力相近。Configuration是一個規范,定義了這類設備的共同Java平台,定義與設備無關的Java虛擬機和核心庫,是平台相容性的基礎。Profile的分類是根據設備功能劃分的,同類功能的設備其他各種硬件條件和需求也相近。Profile是一組API,在某一Configuration的基礎上擴展了針對設備特定功能的API,使得標准能夠完全適應特殊的設備,徹底發揮設備的功能。
J2ME體系的一般結構是:由Configuration定義的Java虛擬機運行於設備的宿主操作系統之上,構成整個平台的基礎。Configuration提供了基本的語言特性,Profile提供針對設備的特殊功能API和擴展類庫。應用程序的運行環境需要一個Configuration和至少一個Profile,多個Profile可以共存,也可以疊加。
我們用兩個具體設備的實現作為例子說明。在一個運行Palm OS的PDA上,Configuration采用CLDC,虛擬機采用KVM(虛擬機和Configuration是緊密相連的,KVM只是CLDC定義的一個參考實現(reference implementation),並不是唯一的選擇),然後采用PDA Profile的Profile。在另一個運行SymBian的智能手機上,則可以采用KVM,CLDC,MIDP。
注:在JCP(Java Community Process,J2ME標准在這裡制定)的網站上已經提出了JSR 68(Java Specification Request,標准提案),將在下一代J2ME標准中用Building Block概念來取代Configuration。其原因是,Profile經常需要提供J2SE中已有的功能,為了能夠利用已有的J2SE API而不是重新制定新API,引入了Building Block概念。一個Building Block定義一個來自J2SE或者J2EE的API以用於J2ME。這樣,Profile就可以通過Building Block來利用已有的API。