Sung in Blog

           一些技术文章 & 一些生活杂碎
 

J2ME (Java 2, Micro Edition) 於 1999 年 6 月由 Sun Microsystems 第一次推向 Java 團體,它是一項能滿足 Java 開發人員的不同需求的廣泛倡議的一部分。 在 Java 2 平台下,Sun 重新定義了 Java 技術的架構,將其分為三個版本。標準版 (J2SE) 為桌面開發和低階商務應用提供了可行的解決方案。企業版 (J2EE) 是為導向以企業為環境而開發應用程式的專門開發人員而準備的。而小型版是致力於消費產品和嵌入式設備開發人員的最佳選擇。儘管早期人們對它看好而且 Java 開發人員團體中的熱衷人士也不少,然而,J2ME 最近才開始從其影響更大的同屬產品 J2EE 和 J2SE 的陰影中走出其不成熟期。

J2ME 的嶄露頭角對 Sun,對跨通訊產業、資訊產業和消費類電子產品業的公司,還有對 Java 開發人員來說的確是個好訊息。Java 技術將一大批設備(從伺服器到主機式和移動設備)集中到一種語言和一種技術之下。雖然這些設備的應用不同,但 Java 技術為這些不同點建起了一座橋樑,使原本致力於單一領域的開發人員能將其技能發揮到跨越不同設備和應用的領域。

如果您是初次接觸 J2ME,您會驚奇地發現 J2ME 沒有技術規範。這是因為 J2ME 不是一個單獨的技術規範,而是相關技術規範的一個家族,這些規範定義了 Java 技術在資源限制的設備(即能源消耗少於普通主機式的設備)中的形態。

在本文中,我們將討論今日的 J2ME。我會講述定義 J2ME 目前結構的各個元件,並為那些對是否使用 J2ME 持觀望態度的使用者提供該技術近期發展的概覽。我還將為您提供針對嵌入式設備的 Java 平台的二種早期實現方法:KJava 和 PersonalJava 的最新狀況。我們首先講述 J2ME 目前的二項順序原則:設定和簡檔。

了解 J2ME

首先考慮一下可能用到 J2ME 的各類設備。這類設備包括 PDA、蜂巢式電話和 B.B Call 、電視機機上盒、遠端遙控裝置和許多其他嵌入式設備。很明顯,要為所有這些設備定義一種最最佳化,或者接近最最佳化的單一技術是不可能的。處理器能源、記憶體、固定記憶體和使用者介面的差異非常之大。

為解決這一問題,Sun 將適合 J2ME 的設備的定義劃分成各個部分,然後再進一步細分。在第一步的劃分中,Sun 將各種設備按照處理效能、記憶體和儲存能力劃分成兩大類,此時並不考慮使用目的。公司然後定義 Java 語言的一個剝離版本,它能夠在每一類設備的限制下工作,而同時提供最低限度的 Java 語言功能性。

然後,Sun 在這二個種類別中找出功能類似的設備類 -- 比如說所有的蜂巢電話無論哪個生產廠商都歸為一類。透過 Java Community Process 中的合作夥伴的協助,Sun 然後再針對每個縱向分類定義了附加的功能性。

第一部分建立 J2ME 目前的二種設定:連接設備設定 (CDC) 和連接限制設備設定 (CLDC)。 設定是 Java 的虛擬機 (JVM) 和為選擇的一組設備提供執行環境的最小類別庫集和 API。設定指定了 Java 語言的最小公分母子集,它符合為其而開發的設備家族所強制的資源限制。

由於使用者介面、功能和用途中的這種極大差異,甚至在同一設定中,一個典型的設定不能像使用者介面工具套件和固定儲存 API 那樣定義這樣的重要片斷。而該功能性的定義被稱為簡檔。

J2ME 簡檔是由從事例如 B.B Call 或蜂巢電話的特定種類設備的某業界領先集團指定的一系列 Java API。每個簡檔建立在由其設定提供的 Java 語言的最小共分母子集的頂部,並補充該設定。目前有二個簡檔:補充 CDC 的基礎簡檔和補充 CLDC 的移動資訊設備簡檔 (MIDP)。更多的簡檔正處於開發階段,規範和參考實現方法即將出台。

圖 1 說明了 J2ME 及其設定和簡檔與 J2SE 和 J2EE 之間的關係。


圖 1. J2EE、J2SE 和 J2ME 之間的關係
J2EE、J2SE 和 J2ME 之間的關係

如上所述,J2ME 不是單一的規範而是一系列規範,每一項適用於特定的一系列要求。在下文中,我將講述在 Java 2 平台下每一項規範和它與其他規範之間的關係。



回到頂端


CLDC: 512 KB 以下的應用程式

讓我們首先來分析一下較小的二個設定。根據其規範,CLDC 服務於具有 512 KB 以下記憶體、有限能源供應(通常使用電池)、有限或非持續網路連接和簡單(或無)使用者介面的設備。這是最適合用來建立蜂巢電話、 B.B Call 、PDA 和類似設備的設定。

為了使 CLDC 適應如此嚴格的限制,開發人員不得不放棄 J2SE 中的許多功能。實際上,當完成設計後,CLDC 只包括四個套件:其中三個來自標準 Java 規範(java.lang、java.util 和 java.io),另一個專門針對 CLDC (javax.microedition)。

甚至這三個標準套件的內容也被縮減了。在 J2SE 中包含 47 個類別和介面的 java.util 包在 CLDC 中縮減至 10 個類。那些被保留的類的功能性足以建構應用程式 -- 省略的功能性由 MIDP 提供,我將在下文中講述。

表 1 羅列了類的數量,以及每個 CLDC 包的介面,讓您清楚地了解 CLDC 有多小。

表 1. 每個 CLDC 套件中類別和介面的數量

套件 描述 類別和介面
java.io 系統輸入輸出 18
java.lang Java 程式設計語言的基本類 38
java.util 集合、日期和時間支援、各式實用工具類別 10
javax.microedition 類屬連接 10

CLDC 不需要一致的實現方法來支援例如反映、結束、使用者定義的類裝載器或浮點演算法等功能,這毫無價值。然而,CLDC 並不能提供建構有用應用程式的所有功能性。很明顯,它缺少使用者介面這一大多數應用程式必需的功能。CLDC 從來就不是一個完整的解決方案。它的設計只是個開頭,是可建立提供附加功能性和定位特定產品類的簡檔的通用基礎。MIDP 就是這樣一個簡檔。



回到頂端


已定義的 MIDP -- 那麼 MIDlet 又是什麼呢?

MIDP 為 CLDC 加入建立諸如蜂巢電話、 B.B Call 和簡單 PDA 應用程式必需的功能性。MIDP 的功能性包括支援計時器、簡單固定記憶體、透過 HTTP 的連網和使用者介面。

CLDC 中 3 項丟失的類別已加入到 java.lang 和 java.util 包中,使 MIDP 支援計時器。這些類別是:

  • java.util.Timer
  • java.util.TimerTask
  • java.lang.IllegalStateException

所有 MIDP 剩餘的功能包含在 J2ME 中唯一的四個套件中。表 2 羅列了這四個剩餘的套件,以及包的描述和包中含有的類別和介面。

表 2. 組成 MIDP 的 4 個 javax.microedition 包

描述 類別和介面
javax.microedition.rms 固定記錄儲存 10
javax.microedition.midlet MIDlet 和其環境之間的介面 2
javax.microedition.io 支援 HTTP 協定 1
javax.microedition.lcdui 使用者介面工具套件 24

javax.microedition.midlet 包保證了進一步的觀察,它為 Java 開發引入了一個新特性。 MIDlet 這一名稱提供給寫入 MIDP 規範的應用程式。所有這些應用必須適合 javax.microedition.midlet 包中定義的框架。

MIDlet 框架類似 J2SE 提供的小應用程式框架。MIDlet 是相關類別的集合,其中一類別擴充了 javax.microedition.midlet.MIDlet 類。由 MIDlet 所在設備提供的 MIDlet 環境透過傳遞使其開始、暫停和自毀的事件來控制 MIDlet。圖 2 展示了 MIDlet 的生命週期。


圖 2. MIDlet 的生命週期
MIDlet 的生命週期

請參閱 參考資料了解更多 MIDlet 的相關內容。



回到頂端


CDC 補充 CLDC 留下的問題

目前 2 個已定義的 J2ME 的設定的大部分是 CDC,它最適合用來建立電視機機上盒、娛樂系統、汽車導航系統和其他這類規模的應用程式。

在資源限制的條件下,CDC 補充了 CLCD 的不足,並針對大於 2 MB 記憶體的設備,它能支援標準 Java 虛擬機和 Java 程式設計語言的完整實現。簡而言之,CDC 非常接近您熟悉的 Java 規範。

當只需要相容 CLDC 的虛擬機來支援標準 Java 虛擬機功能性的一個子集時,那麼 CDC 指定的虛擬機必須和標準 JVM 特性相容。這意味著如果包括對本地方法呼叫的支援,CDC JVM (或 CVM)必須符合 JNI (Java 本地介面) 1.1。如果包括對調試的支援,那就必須符合 JVMDI (Java 虛擬機調試介面)。如果需要包括簡檔支援,那就必須遵從 JVMPI (Java 虛擬機簡檔介面)。

在類別庫中,CDC 提供支援全相容 Java 2 虛擬機所必需的最小 API 集。這一 API 集包括所有為 CLCD 定義的 API 和針對檔 I/O、連網、進階安全性、物件序列等 API。表 3 羅列了在 CDC 規範下提供的包、每個套件中的類別和介面的數量和每個包的描述。

表 3. 在 CDC 規範下的所有套件

套件 描述 類別和介面
java.io 系統輸入與輸出 62
java.lang Java 程式設計語言基本類 77
java.lang.ref 特別參考類別 5
java.lang.reflect 反映支援 12
java.math Math 支援 1
java.net 網路類別和工具 23
java.security 安全支援 36
java.security.cert 憑證支援 4
java.text 文件處理類別 13
java.util 集合、日期和時間支援,各種實用工具類別 47
java.util.jar Jar 檔支援 7
java.util.zip Zip 檔支援 9
javax.microedition 類屬連接 10

很明顯,表 3 中缺少屬於 java.awt 套件中的類別和介面。與 CLDC 的情形相同,CDC 不支援任何使用者介面。這還是由於設備與設備之間的使用者介面差異很大所造成的。必須為 CDC 加入合適的簡檔以獲得使用者介面支援。

CVM 是指定和 CDC 一起使用的 Java 虛擬機,它具有許多超出支援 CDC 所必需的有趣功能。它的移植性很強、支援可 ROM 的類別、允許快速執行緒同步操作,並提供對本地執行緒的支援。簡而言之,它是為支援經常出現在嵌入式應用中的作業系統而設計的。



回到頂端


基礎簡檔

基礎簡檔是唯一的為 CDC 而定義的簡檔。它大大地擴充了 CDC 提供的 API。然而,它並不提供使用者介面 API。正如其名“基礎”所示,該簡檔必須透過一個或多個提供使用者介面支援的附加簡檔來擴充 -- 例如個人簡檔 (JSR 62),它正處於開發階段並有可能最終替代 PersonalJava 的簡檔。

表 4 羅列了基礎簡檔中的,也包括 CDC 中的所有類別和介面的數量。這一設定及其主要簡檔提供的所有類別和介面與我們習慣使用的 Java 平台類似。

表 4. 基礎類別和介面(包括 CDC 套件)

描述 類別和介面
java.io 系統輸入與輸出 74
java.lang Java 程式設計語言基本類 79
java.lang.ref 特別參考類別 5
java.lang.reflect 反映支援 12
java.math Math 支援 1
java.net 網路類別和工具 35
java.security 安全支援 63
java.security.acl 存取控制表支援 8
java.security.cert 憑證支援 15
java.security.interface 安全介面類 9
java.security.spec 關鍵規範和運算法則參數規範 14
java.text 文件處理類別 23
java.util 收集、日期和時間支援,各種實用工具類別 54
java.util.jar Jar 檔支援 8
java.util.zip Zip 檔支援 17
javax.microedition 類屬連接 11



回到頂端


舊的規範:KJava 和 PersonalJava 重新露面

如果近兩年一直關注著 Sun 對資源限制設備的支援,那麼您一定對 KJava 和 PersonalJava 很了解。PersonalJava 是 Sun 首次為資源限制設備建立 Java 平台版本的嘗試。Sun 的 Spotless 研究計畫產生的 KJava 是 Sun 在 1999 年 JavaOne 中為 Palm 而開發的 Java 平台版本。

由於為 PersonalJava 和 KJava 撰寫的程式很多,許多開發人員非常關切這兩種平台未來的發展如何。因為它們各自都獨立地發展,所以關於這兩種平台的資訊並不多,但我會告訴您我所知道的資訊。

PersonalJava 正逐漸轉變成 CDC 的個人簡檔。尚處於開發階段的這一簡檔將處於基礎簡檔的頂部,並且將與 PersonalJava 版本 1.1 和 1.2 向後相容。

KJava 的情形就不十分明朗。Sun 非常關注 KJava 的實驗狀態,並提醒開發人員注意它對 API 的不斷變化,甚至重大變化。Palm Inc. 目前正為 CLDC 定義 PDA 簡檔,它將取代 KJava。不幸的是,現在尚無法明確地知道要對現有的 KJava 應用程式做出多少修改才能使其與新簡檔協同工作。



回到頂端


總結

J2ME 的前景很明顯要比 J2SE 甚至 J2EE 來的複雜,但是複雜性也預告著 J2ME 能夠支援的設備的多樣性。總之,以我的方法論習一種特定的設定和簡檔並不很困難。許多情況下,J2ME 讓我想起 1995 年的 Java 語言。

如果試圖決定是否在嵌入式應用程式中使用 J2ME,您會發現有許多無法回答的問題。例如,我仍然不清楚何時 J2ME 的優勢能超越它的成本,特別是鑒於虛擬機和 API 在已經資源限制的環境下使用的資源。

然而,隨著規範的成型和更多簡檔的加入,我確信答案會出現,而且 J2ME 將鞏固其在嵌入式設備領域的地位。透過 CDC 和 CLDC,Sun 已採取重要的步驟為該領域的開發人員的各種需求提供各種重要的服務。基礎簡檔剛開始鞏固,個人簡檔將在幾個月內出台。作為開發人員,我們將與 J2ME 一同發展,如果僅是實驗性的,並且使 Sun 以及其他在無線和嵌入設備市場的商家明確我們的需求。

posted on 2005-10-28 19:58 Sung 阅读(544) 评论(1)  编辑  收藏 所属分类: Java

FeedBack:
# re: J2ME 走向成熟
2005-11-03 16:06 | 备忘录
据说j2me将有大变动  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: