J2ME 走向成熟(較早的一篇介紹J2ME平臺的文章)

J2ME 走向成熟

新的規範預示着 Java 2 平臺微型版的迅速增長

 
 
 

 

<script type="text/javascript"></script>
 

 


級別: 初級

Todd Sundsted ([email protected]), 首席工程師, PointFire Inc.

2001 年 5 月 04 日

原文鏈接:http://www.ibm.com/developerworks/cn/java/j-j2me/

長期隱藏在其明星同屬產品的陰影之下的 J2ME (Java 2,小型版)正開始進入作爲開發平臺的階段。但 J2ME 是否已處在其黃金時期了呢? Todd Sundsted 將帶您瀏覽 J2ME 的當前結構,講述使 J2ME 成爲今日平臺的每個規範。在講述的過程中,還將涉及 2 個要好的老友:PersonalJava 和 KJava,讓您瞭解這 2 種技術如今的發展情況。本文概述了 J2ME 的當前狀況,爲首次進入 J2ME 就獲得成功提供您所需的信息。

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、蜂窩式電話和尋呼機、電視機機頂盒、遠程遙控裝置和許多其他嵌入式設備。很明顯,要爲所有這些設備定義一種最優化,或者接近最優化的單一技術是不可能的。處理器能源、內存、固定存儲器和用戶界面的差異非常之大。

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

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

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

由於用戶界面、功能和用途中的這種極大差異,甚至在同一配置中,一個典型的配置不能像用戶界面工具包和固定存儲 API 那樣定義這樣的重要片斷。而該功能性的定義被稱爲簡檔。

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

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


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

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

 




回頁首


CLDC: 512 KB 以下的應用程序

讓我們首先來分析一下較小的二個配置。根據其規範,CLDC 服務於具有 512 KB 以下內存、有限能源供應(通常使用電池)、有限或非持續網絡連接和簡單(或無)用戶界面的設備。這是最適合用來創建蜂窩電話、尋呼機、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 加入創建諸如蜂窩電話、尋呼機和簡單 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 以及其他在無線和嵌入設備市場的商家明確我們的需求。


參考資料

  • George Weaver 和 Timothy Prickett Morgan 自 2001 年 3 月起在這篇論文中對 無線網絡以及 iSeries 和 AS/400 服務進行徹底分析 (PDF)。

  • JDBC driver 使連接網絡的 Palm OS 設備直接訪問 DB2/400 信息。

  • Sun 提供的幾個網站包含有關 J2ME 細節的相關主題:
    • 欲瞭解更多 J2ME 有關內容,請訪問 Sun 的 J2ME 主頁
    • 欲瞭解更多有關 CLDC 的信息,請訪問 CLDC 頁面
    • 欲瞭解有關 MIDP 的最新信息和有關 MIDlet 的更多信息,請訪問 Sun 的 MIDP 頁面
    • CDC 頁面,您將獲得更多有關 CDC 和 JSR #000036 的信息。
    • JSR #000046 描述了 基礎簡檔
    • 欲瞭解個人簡檔 PersonalJava 最新版本的信息,請參閱 JSR #000062
  • 若您想保持與有關 J2ME 和相關開發同步,Bill Day 的 J2ME 資源頁面是個好的開始。

  • 對通用設備感興趣?請參閱最新 developerWorks 上的 無線專題


關於作者

 

Todd Sundsted,從臺式機流行起就開始從事編程工作。起初興趣主要集中在使用 C++ 語言編寫分佈式程序,當 Java 語言成爲那些程序的必然選擇時,Todd 轉向 Java 編程語言。除了編程之外,Todd 還是 PointFire Inc. 的首席工程師以及創辦人之一。可以通過 [email protected] 和 Todd 聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章