J2ME (Java 2, Micro Edition) 於 1999 年 6 月由 Sun Microsystems 第一次推向 Java 團(tuán)體,它是一項(xiàng)能滿足 Java 開發(fā)人員的不同需求的廣泛倡議的一部分。 在 Java 2 平臺(tái)下,Sun 重新定義了 Java 技術(shù)的架構(gòu),將其分為三個(gè)版本。標(biāo)準(zhǔn)版 (J2SE) 為桌面開發(fā)和低階商務(wù)應(yīng)用提供了可行的解決方案。企業(yè)版 (J2EE) 是為導(dǎo)向以企業(yè)為環(huán)境而開發(fā)應(yīng)用程式的專門開發(fā)人員而準(zhǔn)備的。而小型版是致力於消費(fèi)產(chǎn)品和嵌入式設(shè)備開發(fā)人員的最佳選擇。儘管早期人們對(duì)它看好而且 Java 開發(fā)人員團(tuán)體中的熱衷人士也不少,然而,J2ME 最近才開始從其影響更大的同屬產(chǎn)品 J2EE 和 J2SE 的陰影中走出其不成熟期。
J2ME 的嶄露頭角對(duì) Sun,對(duì)跨通訊產(chǎn)業(yè)、資訊產(chǎn)業(yè)和消費(fèi)類電子產(chǎn)品業(yè)的公司,還有對(duì) Java 開發(fā)人員來(lái)說(shuō)的確是個(gè)好訊息。Java 技術(shù)將一大批設(shè)備(從伺服器到主機(jī)式和移動(dòng)設(shè)備)集中到一種語(yǔ)言和一種技術(shù)之下。雖然這些設(shè)備的應(yīng)用不同,但 Java 技術(shù)為這些不同點(diǎn)建起了一座橋樑,使原本致力於單一領(lǐng)域的開發(fā)人員能將其技能發(fā)揮到跨越不同設(shè)備和應(yīng)用的領(lǐng)域。
如果您是初次接觸 J2ME,您會(huì)驚奇地發(fā)現(xiàn) J2ME 沒(méi)有技術(shù)規(guī)範(fàn)。這是因?yàn)?J2ME 不是一個(gè)單獨(dú)的技術(shù)規(guī)範(fàn),而是相關(guān)技術(shù)規(guī)範(fàn)的一個(gè)家族,這些規(guī)範(fàn)定義了 Java 技術(shù)在資源限制的設(shè)備(即能源消耗少於普通主機(jī)式的設(shè)備)中的形態(tài)。
在本文中,我們將討論今日的 J2ME。我會(huì)講述定義 J2ME 目前結(jié)構(gòu)的各個(gè)元件,並為那些對(duì)是否使用 J2ME 持觀望態(tài)度的使用者提供該技術(shù)近期發(fā)展的概覽。我還將為您提供針對(duì)嵌入式設(shè)備的 Java 平臺(tái)的二種早期實(shí)現(xiàn)方法:KJava 和 PersonalJava 的最新狀況。我們首先講述 J2ME 目前的二項(xiàng)順序原則:設(shè)定和簡(jiǎn)檔。
了解 J2ME
首先考慮一下可能用到 J2ME 的各類設(shè)備。這類設(shè)備包括 PDA、蜂巢式電話和 B.B Call 、電視機(jī)機(jī)上盒、遠(yuǎn)端遙控裝置和許多其他嵌入式設(shè)備。很明顯,要為所有這些設(shè)備定義一種最最佳化,或者接近最最佳化的單一技術(shù)是不可能的。處理器能源、記憶體、固定記憶體和使用者介面的差異非常之大。
為解決這一問(wèn)題,Sun 將適合 J2ME 的設(shè)備的定義劃分成各個(gè)部分,然後再進(jìn)一步細(xì)分。在第一步的劃分中,Sun 將各種設(shè)備按照處理效能、記憶體和儲(chǔ)存能力劃分成兩大類,此時(shí)並不考慮使用目的。公司然後定義 Java 語(yǔ)言的一個(gè)剝離版本,它能夠在每一類設(shè)備的限制下工作,而同時(shí)提供最低限度的 Java 語(yǔ)言功能性。
然後,Sun 在這二個(gè)種類別中找出功能類似的設(shè)備類 -- 比如說(shuō)所有的蜂巢電話無(wú)論哪個(gè)生產(chǎn)廠商都?xì)w為一類。透過(guò) Java Community Process 中的合作夥伴的協(xié)助,Sun 然後再針對(duì)每個(gè)縱向分類定義了附加的功能性。
第一部分建立 J2ME 目前的二種設(shè)定:連接設(shè)備設(shè)定 (CDC) 和連接限制設(shè)備設(shè)定 (CLDC)。 設(shè)定是 Java 的虛擬機(jī) (JVM) 和為選擇的一組設(shè)備提供執(zhí)行環(huán)境的最小類別庫(kù)集和 API。設(shè)定指定了 Java 語(yǔ)言的最小公分母子集,它符合為其而開發(fā)的設(shè)備家族所強(qiáng)制的資源限制。
由於使用者介面、功能和用途中的這種極大差異,甚至在同一設(shè)定中,一個(gè)典型的設(shè)定不能像使用者介面工具套件和固定儲(chǔ)存 API 那樣定義這樣的重要片斷。而該功能性的定義被稱為簡(jiǎn)檔。
J2ME 簡(jiǎn)檔是由從事例如 B.B Call 或蜂巢電話的特定種類設(shè)備的某業(yè)界領(lǐng)先集團(tuán)指定的一系列 Java API。每個(gè)簡(jiǎn)檔建立在由其設(shè)定提供的 Java 語(yǔ)言的最小共分母子集的頂部,並補(bǔ)充該設(shè)定。目前有二個(gè)簡(jiǎn)檔:補(bǔ)充 CDC 的基礎(chǔ)簡(jiǎn)檔和補(bǔ)充 CLDC 的移動(dòng)資訊設(shè)備簡(jiǎn)檔 (MIDP)。更多的簡(jiǎn)檔正處?kù)堕_發(fā)階段,規(guī)範(fàn)和參考實(shí)現(xiàn)方法即將出臺(tái)。
圖 1 說(shuō)明了 J2ME 及其設(shè)定和簡(jiǎn)檔與 J2SE 和 J2EE 之間的關(guān)係。
圖 1. J2EE、J2SE 和 J2ME 之間的關(guān)係
如上所述,J2ME 不是單一的規(guī)範(fàn)而是一系列規(guī)範(fàn),每一項(xiàng)適用於特定的一系列要求。在下文中,我將講述在 Java 2 平臺(tái)下每一項(xiàng)規(guī)範(fàn)和它與其他規(guī)範(fàn)之間的關(guān)係。
CLDC: 512 KB 以下的應(yīng)用程式
讓我們首先來(lái)分析一下較小的二個(gè)設(shè)定。根據(jù)其規(guī)範(fàn),CLDC 服務(wù)於具有 512 KB 以下記憶體、有限能源供應(yīng)(通常使用電池)、有限或非持續(xù)網(wǎng)路連接和簡(jiǎn)單(或無(wú))使用者介面的設(shè)備。這是最適合用來(lái)建立蜂巢電話、 B.B Call 、PDA 和類似設(shè)備的設(shè)定。
為了使 CLDC 適應(yīng)如此嚴(yán)格的限制,開發(fā)人員不得不放棄 J2SE 中的許多功能。實(shí)際上,當(dāng)完成設(shè)計(jì)後,CLDC 只包括四個(gè)套件:其中三個(gè)來(lái)自標(biāo)準(zhǔn) Java 規(guī)範(fàn)(java.lang、java.util 和 java.io),另一個(gè)專門針對(duì) CLDC (javax.microedition)。
甚至這三個(gè)標(biāo)準(zhǔn)套件的內(nèi)容也被縮減了。在 J2SE 中包含 47 個(gè)類別和介面的 java.util 包在 CLDC 中縮減至 10 個(gè)類。那些被保留的類的功能性足以建構(gòu)應(yīng)用程式 -- 省略的功能性由 MIDP 提供,我將在下文中講述。
表 1 羅列了類的數(shù)量,以及每個(gè) CLDC 包的介面,讓您清楚地了解 CLDC 有多小。
表 1. 每個(gè) CLDC 套件中類別和介面的數(shù)量
套件 |
描述 |
類別和介面 |
java.io |
系統(tǒng)輸入輸出 |
18 |
java.lang |
Java 程式設(shè)計(jì)語(yǔ)言的基本類 |
38 |
java.util |
集合、日期和時(shí)間支援、各式實(shí)用工具類別 |
10 |
javax.microedition |
類屬連接 |
10 |
CLDC 不需要一致的實(shí)現(xiàn)方法來(lái)支援例如反映、結(jié)束、使用者定義的類裝載器或浮點(diǎn)演算法等功能,這毫無(wú)價(jià)值。然而,CLDC 並不能提供建構(gòu)有用應(yīng)用程式的所有功能性。很明顯,它缺少使用者介面這一大多數(shù)應(yīng)用程式必需的功能。CLDC 從來(lái)就不是一個(gè)完整的解決方案。它的設(shè)計(jì)只是個(gè)開頭,是可建立提供附加功能性和定位特定產(chǎn)品類的簡(jiǎn)檔的通用基礎(chǔ)。MIDP 就是這樣一個(gè)簡(jiǎn)檔。
已定義的 MIDP -- 那麼 MIDlet 又是什麼呢?
MIDP 為 CLDC 加入建立諸如蜂巢電話、 B.B Call 和簡(jiǎn)單 PDA 應(yīng)用程式必需的功能性。MIDP 的功能性包括支援計(jì)時(shí)器、簡(jiǎn)單固定記憶體、透過(guò) HTTP 的連網(wǎng)和使用者介面。
CLDC 中 3 項(xiàng)丟失的類別已加入到 java.lang 和 java.util 包中,使 MIDP 支援計(jì)時(shí)器。這些類別是:
- java.util.Timer
- java.util.TimerTask
- java.lang.IllegalStateException
所有 MIDP 剩餘的功能包含在 J2ME 中唯一的四個(gè)套件中。表 2 羅列了這四個(gè)剩餘的套件,以及包的描述和包中含有的類別和介面。
表 2. 組成 MIDP 的 4 個(gè) javax.microedition 包
包 |
描述 |
類別和介面 |
javax.microedition.rms |
固定記錄儲(chǔ)存 |
10 |
javax.microedition.midlet |
MIDlet 和其環(huán)境之間的介面 |
2 |
javax.microedition.io |
支援 HTTP 協(xié)定 |
1 |
javax.microedition.lcdui |
使用者介面工具套件 |
24 |
javax.microedition.midlet 包保證了進(jìn)一步的觀察,它為 Java 開發(fā)引入了一個(gè)新特性。 MIDlet 這一名稱提供給寫入 MIDP 規(guī)範(fàn)的應(yīng)用程式。所有這些應(yīng)用必須適合 javax.microedition.midlet 包中定義的框架。
MIDlet 框架類似 J2SE 提供的小應(yīng)用程式框架。MIDlet 是相關(guān)類別的集合,其中一類別擴(kuò)充了 javax.microedition.midlet.MIDlet
類。由 MIDlet 所在設(shè)備提供的 MIDlet 環(huán)境透過(guò)傳遞使其開始、暫停和自毀的事件來(lái)控制 MIDlet。圖 2 展示了 MIDlet 的生命週期。
圖 2. MIDlet 的生命週期
請(qǐng)參閱 參考資料了解更多 MIDlet 的相關(guān)內(nèi)容。
CDC 補(bǔ)充 CLDC 留下的問(wèn)題
目前 2 個(gè)已定義的 J2ME 的設(shè)定的大部分是 CDC,它最適合用來(lái)建立電視機(jī)機(jī)上盒、娛樂(lè)系統(tǒng)、汽車導(dǎo)航系統(tǒng)和其他這類規(guī)模的應(yīng)用程式。
在資源限制的條件下,CDC 補(bǔ)充了 CLCD 的不足,並針對(duì)大於 2 MB 記憶體的設(shè)備,它能支援標(biāo)準(zhǔn) Java 虛擬機(jī)和 Java 程式設(shè)計(jì)語(yǔ)言的完整實(shí)現(xiàn)。簡(jiǎn)而言之,CDC 非常接近您熟悉的 Java 規(guī)範(fàn)。
當(dāng)只需要相容 CLDC 的虛擬機(jī)來(lái)支援標(biāo)準(zhǔn) Java 虛擬機(jī)功能性的一個(gè)子集時(shí),那麼 CDC 指定的虛擬機(jī)必須和標(biāo)準(zhǔn) JVM 特性相容。這意味著如果包括對(duì)本地方法呼叫的支援,CDC JVM (或 CVM)必須符合 JNI (Java 本地介面) 1.1。如果包括對(duì)調(diào)試的支援,那就必須符合 JVMDI (Java 虛擬機(jī)調(diào)試介面)。如果需要包括簡(jiǎn)檔支援,那就必須遵從 JVMPI (Java 虛擬機(jī)簡(jiǎn)檔介面)。
在類別庫(kù)中,CDC 提供支援全相容 Java 2 虛擬機(jī)所必需的最小 API 集。這一 API 集包括所有為 CLCD 定義的 API 和針對(duì)檔 I/O、連網(wǎng)、進(jìn)階安全性、物件序列等 API。表 3 羅列了在 CDC 規(guī)範(fàn)下提供的包、每個(gè)套件中的類別和介面的數(shù)量和每個(gè)包的描述。
表 3. 在 CDC 規(guī)範(fàn)下的所有套件
套件 |
描述 |
類別和介面 |
java.io |
系統(tǒng)輸入與輸出 |
62 |
java.lang |
Java 程式設(shè)計(jì)語(yǔ)言基本類 |
77 |
java.lang.ref |
特別參考類別 |
5 |
java.lang.reflect |
反映支援 |
12 |
java.math |
Math 支援 |
1 |
java.net |
網(wǎng)路類別和工具 |
23 |
java.security |
安全支援 |
36 |
java.security.cert |
憑證支援 |
4 |
java.text |
文件處理類別 |
13 |
java.util |
集合、日期和時(shí)間支援,各種實(shí)用工具類別 |
47 |
java.util.jar |
Jar 檔支援 |
7 |
java.util.zip |
Zip 檔支援 |
9 |
javax.microedition |
類屬連接 |
10 |
很明顯,表 3 中缺少屬於 java.awt 套件中的類別和介面。與 CLDC 的情形相同,CDC 不支援任何使用者介面。這還是由於設(shè)備與設(shè)備之間的使用者介面差異很大所造成的。必須為 CDC 加入合適的簡(jiǎn)檔以獲得使用者介面支援。
CVM 是指定和 CDC 一起使用的 Java 虛擬機(jī),它具有許多超出支援 CDC 所必需的有趣功能。它的移植性很強(qiáng)、支援可 ROM 的類別、允許快速執(zhí)行緒同步操作,並提供對(duì)本地執(zhí)行緒的支援。簡(jiǎn)而言之,它是為支援經(jīng)常出現(xiàn)在嵌入式應(yīng)用中的作業(yè)系統(tǒng)而設(shè)計(jì)的。
基礎(chǔ)簡(jiǎn)檔
基礎(chǔ)簡(jiǎn)檔是唯一的為 CDC 而定義的簡(jiǎn)檔。它大大地?cái)U(kuò)充了 CDC 提供的 API。然而,它並不提供使用者介面 API。正如其名“基礎(chǔ)”所示,該簡(jiǎn)檔必須透過(guò)一個(gè)或多個(gè)提供使用者介面支援的附加簡(jiǎn)檔來(lái)擴(kuò)充 -- 例如個(gè)人簡(jiǎn)檔 (JSR 62),它正處?kù)堕_發(fā)階段並有可能最終替代 PersonalJava 的簡(jiǎn)檔。
表 4 羅列了基礎(chǔ)簡(jiǎn)檔中的,也包括 CDC 中的所有類別和介面的數(shù)量。這一設(shè)定及其主要簡(jiǎn)檔提供的所有類別和介面與我們習(xí)慣使用的 Java 平臺(tái)類似。
表 4. 基礎(chǔ)類別和介面(包括 CDC 套件)
包 |
描述 |
類別和介面 |
java.io |
系統(tǒng)輸入與輸出 |
74 |
java.lang |
Java 程式設(shè)計(jì)語(yǔ)言基本類 |
79 |
java.lang.ref |
特別參考類別 |
5 |
java.lang.reflect |
反映支援 |
12 |
java.math |
Math 支援 |
1 |
java.net |
網(wǎng)路類別和工具 |
35 |
java.security |
安全支援 |
63 |
java.security.acl |
存取控制表支援 |
8 |
java.security.cert |
憑證支援 |
15 |
java.security.interface |
安全介面類 |
9 |
java.security.spec |
關(guān)鍵規(guī)範(fàn)和運(yùn)算法則參數(shù)規(guī)範(fàn) |
14 |
java.text |
文件處理類別 |
23 |
java.util |
收集、日期和時(shí)間支援,各種實(shí)用工具類別 |
54 |
java.util.jar |
Jar 檔支援 |
8 |
java.util.zip |
Zip 檔支援 |
17 |
javax.microedition |
類屬連接 |
11 |
舊的規(guī)範(fàn):KJava 和 PersonalJava 重新露面
如果近兩年一直關(guān)注著 Sun 對(duì)資源限制設(shè)備的支援,那麼您一定對(duì) KJava 和 PersonalJava 很了解。PersonalJava 是 Sun 首次為資源限制設(shè)備建立 Java 平臺(tái)版本的嘗試。Sun 的 Spotless 研究計(jì)畫產(chǎn)生的 KJava 是 Sun 在 1999 年 JavaOne 中為 Palm 而開發(fā)的 Java 平臺(tái)版本。
由於為 PersonalJava 和 KJava 撰寫的程式很多,許多開發(fā)人員非常關(guān)切這兩種平臺(tái)未來(lái)的發(fā)展如何。因?yàn)樗鼈兏髯远吉?dú)立地發(fā)展,所以關(guān)於這兩種平臺(tái)的資訊並不多,但我會(huì)告訴您我所知道的資訊。
PersonalJava 正逐漸轉(zhuǎn)變成 CDC 的個(gè)人簡(jiǎn)檔。尚處?kù)堕_發(fā)階段的這一簡(jiǎn)檔將處?kù)痘A(chǔ)簡(jiǎn)檔的頂部,並且將與 PersonalJava 版本 1.1 和 1.2 向後相容。
KJava 的情形就不十分明朗。Sun 非常關(guān)注 KJava 的實(shí)驗(yàn)狀態(tài),並提醒開發(fā)人員注意它對(duì) API 的不斷變化,甚至重大變化。Palm Inc. 目前正為 CLDC 定義 PDA 簡(jiǎn)檔,它將取代 KJava。不幸的是,現(xiàn)在尚無(wú)法明確地知道要對(duì)現(xiàn)有的 KJava 應(yīng)用程式做出多少修改才能使其與新簡(jiǎn)檔協(xié)同工作。
總結(jié)
J2ME 的前景很明顯要比 J2SE 甚至 J2EE 來(lái)的複雜,但是複雜性也預(yù)告著 J2ME 能夠支援的設(shè)備的多樣性。總之,以我的方法論習(xí)一種特定的設(shè)定和簡(jiǎn)檔並不很困難。許多情況下,J2ME 讓我想起 1995 年的 Java 語(yǔ)言。
如果試圖決定是否在嵌入式應(yīng)用程式中使用 J2ME,您會(huì)發(fā)現(xiàn)有許多無(wú)法回答的問(wèn)題。例如,我仍然不清楚何時(shí) J2ME 的優(yōu)勢(shì)能超越它的成本,特別是鑒於虛擬機(jī)和 API 在已經(jīng)資源限制的環(huán)境下使用的資源。
然而,隨著規(guī)範(fàn)的成型和更多簡(jiǎn)檔的加入,我確信答案會(huì)出現(xiàn),而且 J2ME 將鞏固其在嵌入式設(shè)備領(lǐng)域的地位。透過(guò) CDC 和 CLDC,Sun 已採(cǎi)取重要的步驟為該領(lǐng)域的開發(fā)人員的各種需求提供各種重要的服務(wù)。基礎(chǔ)簡(jiǎn)檔剛開始鞏固,個(gè)人簡(jiǎn)檔將在幾個(gè)月內(nèi)出臺(tái)。作為開發(fā)人員,我們將與 J2ME 一同發(fā)展,如果僅是實(shí)驗(yàn)性的,並且使 Sun 以及其他在無(wú)線和嵌入設(shè)備市場(chǎng)的商家明確我們的需求。
posted on 2005-10-28 19:58
Sung 閱讀(561)
評(píng)論(1) 編輯 收藏 所屬分類:
Java