J2ME(Java 2 Platform Micro Edtion)是什么?它既不是一个软件,又不是一个规范。这样说可能会令人糊涂,甚至某些已经熟悉J2SE的开发人员都感到困惑。实际上,我们可以把J2ME看成是一个技术和规范的集合。与J2SE针对桌面应用开发不同,J2ME针对多种多样的嵌入式设备,由于这类设备的多样性,期望有一种能适合所有设备的方案并不现实, J2ME只是一个统称,是所有与嵌入式设备相关技术的集合。
J2ME的组成
J2ME平台并没有定义一种新语言,它仅仅是把已有的Java技术移植到手持设备和嵌入式设备上,它尽可能地维护了与J2SE的兼容性。事实上,J2ME并没有定义一些新类去满足资源受限设备的应用需求,而是去掉了J2SE(或者J2EE)中不必要的部分,从而适合于这类资源受限设备的需求。
如果要深入地了解J2ME,我们就必须弄清楚J2ME与EmbeddedJava应用环境和PersonalJava应用环境的关系(图1)。
从图中可以看出,EmbeddedJava应用环境和PersonalJava应用环境与J2ME平台是完全分离的,它们都基于JDK 1.1,而J2ME平台的来源则完全不同。Java Card是J2ME的补充,但并不是它的一部分。
自Oak出现以后,Java技术经过了漫长的发展历程:从Embedded Java到PersonalJava应用环境,再到MIDP 1.0。直到不久以前,“Java 2平台微型版(J2ME)”一词还是“移动信息设备概要(MIDP)”的同义词,因为MIDP 1.0是当时市场上惟一的J2ME Profile,也是惟一针对电子设备编程的J2ME API。而现在J2ME已经进化成为一种有组织的架构,其中包括一组针对高端PDA和嵌入式设备的Java API,以及一组针对诸如手机、低端PDA和智能卡等资源严重受限设备的Java API。J2ME平台规范(JSR 68)定义了所有关键元素,这些元素尽可能地提高了可重用性,包括概要、配置、可选包和构件。图2显示了J2ME的组织结构,这是一种软件栈结构,新的功能可以被不断地增添上去。
图2中并没有显示出与厂商有关的API,它们并不是标准概要和配置的一部分,比如控制无线电传输器或其他给定设备的API,你可以把它们看成是对标准概要的扩展。
在这里,Configuration是一个规范,它定义了基本的J2ME运行环境,包括虚拟机和一组源自J2SE的核心类子集。Profile是建立在某个Configuration之上的特定API集合,它是对Configuration的扩展,提供基本Configuration所缺少的功能,包括应用程序生命周期、用户界面、网络连接、存储、安全等。为了在不改动Profile的前提下增加设备的功能,J2ME在Profile之外又提供了可选包,您可将它们看成Profile的扩展,每个可选包为某个或某些Profile增加特定的功能。
J2ME的这种结构很好地适应了嵌入式设备的巨大多样性。从低到高,你可根据设备的情况采用不同的Configuration,在同一Configuration中你又可以根据设备的用途选用不同的Profile,你还可以在同一设备中采用多个Profile,如果你还嫌功能不够,尚有可选包可用。
到现在,我们已经非常清楚地了解了J2ME的结构,让我们来看看已经发布的Configuration和Profile有哪些?
已发布的Configuration
截止到目前,已发布了两个Configuration:连接受限设备配置 ( Connected Limited Device Configuration,简称CLDC) 和连接设备配置(Connected Device Configuration,简称CDC)。这两个Configuration的共性是它们都是针对有网络连接的设备定义的,无论它是高速的固定连接,还是低速的无线连接;另一方面,两者之间也存在很多差别,包括各自所采用的Java虚拟机,以及可提供的特性和API。
无论是CLDC还是CDC,其核心都是Java虚拟机。CLDC采用了KVM,它是一个真正的最小的而又基本上完整的Java虚拟机,小到可以装入几十KB的内存中。CDC则采用了CVM,它是一个具有完整的J2SE 1.3 VM支持能力的Java虚拟机,因此也更适合使用、更有效,但又比标准的J2SE VM小。作为一个全功能的Java虚拟机,CVM几乎支持J2SE VM的所有先进特性,包括最底层的调错处理和本地语言接口。
1.CLDC
CLDC(Connected Limited Device Configuration )是最小的J2ME配置,它直接源自Spotless System,针对非常小、资源有限、有网络连接的设备,诸如低端手机、PDA、双向寻呼机等。这些设备计算能力较低、内存少、电池寿命不长、网络带宽小。
CLDC对硬件的要求不高,可以运行在采用16位或32位处理器、最少拥有160KB ROM和32KB RAM,并能提供某种网络连接的设备上。CLDC采用J2SE核心API的子集,还增加了特定的GCF (Generic Connection Framework)包——javax .microedition.io。
2.CDC
与CLDC相比,CDC是为资源更宽裕的设备定义的规范,诸如高端手机、高端PDA、机顶盒、信息家电、甚至汽车导航系统等。支持CDC的设备需要32位处理器、至少2MB内存以及某种网络连接。CDC是CLDC的超集,它包括CLDC定义的所有类,甚至包括J2SE未包括的类,诸如GCF等。它是一个具有与J2SE 1.3 VM相同功能但规模更小的虚拟机。由于CDC包括了更多的J2SE 核心类,因此编程更加方便。
已发布的Profile
J2ME中第一个正式发布的Profile是MIDP,而且随后比较长的时间内未有其他Profile发布,以至有人把MIDP等同于J2ME了,但实际上,MIDP只是J2ME中的一部分。目前已经发布的Profile包括基于CLDC的MIDP和PDAP(Personal Digital Assistant Profile);基于CDC的FP(Foundation Profile)、PBP(Personal Basis Profile)和PP(Personal Profile)。
1.基于CLDC的Profile
基于CLDC的Profile包括MIDP和PDAP,但已经正式发布的只有MIDP。MIDP (The Mobile Information Device Profile)是最早发布且最成熟的J2ME Profile。它主要是针对手机设备提出的,目前几乎所有的主流厂商都支持MIDP,包括摩托罗拉、诺基亚、爱立信、西门子等主要手机生产商;支持MIDP的电信运营商包括SprintPCS、 Nextel和NTT DoCoMo。许多独立
软件开发商也支持MIDP,表1描述了MIDP 2.0对设备的需求。
MIDP规范最早由摩托罗拉提出,被JSR 37定义。它定义了MIDP应用程序的生命周期类、网络类、用户界面包、存储包,具体包括java.io、java.lang、java.lang、javax.microedition.io、javax.microedition.lcdui、javax.microedition.midlet和javax.microedition.rms。
2.基于CDC的Profile
CDC针对更高端的手持或嵌入式设备,这些设备有更多的内存和更强的处理能力,但其配置和概要是相同的。CDC为设备提供了通用的、底层的界面;基于CDC的Profile则提供了适合特定设备的类。截止到目前,基于CDC的Profile有FP、PBP和PP。
(1)FP
FP(The Foundation Profile)规范不像其他的Profile那样提供运行环境,而是为其他基于CDC的Profile 提供一个基础,本规范编号为JSR 46。 它为基于CDC的Profile提供了更好的安全性、更多的工具包。该规范并没有包含任何用户界面包,因此该规范适合于某些无用户界面但有网络连接的专用嵌入设备。
(2) PBP
PBP(The Personal Basic Profile)规范针对有网络连接并有基本图形界面的设备。潜在的市场包括交互数字电视、信息电话亭等。这些设备需要一个基本的图形界面,但并不需要完整的AWT支持。该规范与PP的主要区别是:PP要考虑移植PersonalJava ,因此必须支持以前PersonalJava中的所有特性。该规范对硬件的要求如下:最少2MB的ROM、1MB的 RAM(应用程序和本地化资源所需的内存不包括在内)、稳定的网络连接、基本的图形界面。PBP规范的编号为JSR 129,它定义了最小的AWT用户界面包、JavaBeans支持相关包、应用程序生命周期类。PBP应用程序也叫Xlet。
(3)PP
PP(PersonalProfile)是PersonalJava环境的具体实现,由JSR 62定义。它是PBP的超集,提供了CDC、FP和PBP中描述的所有Java包。它还增加了其他Profile缺少的AWT类和小程序支持。PP主要针对高端设备,其内存应该不少于2MB。
已发布的可选包
截止到目前,正式发布的可选包有WMA(The Wireless Messaging API)、MMAPI(The Mobile Media API)和RMI API。
(1)WMA可选包
它由JSR 120定义, 为某些具有收发无线信息的设备提供API。它定义了一组收发信息的API,信息既可以是文本信息也可以是二进制信息,最典型的就是SMS(短信服务)。它可用于CLDC和CDC。该API只有一个包javax.wireless.messaging 。
(2)MMAPI可选包
MMAPI由JSR 135定义,它为某些具有高级音响和多媒体功能的设备提供了一个通用但灵活的多媒体处理API。该可选包以CLDC为最低需求,因此也可用于CDC。该API定义的包如表2所示。
(3)RMI可选包
RMI由JSR 66定义, 它为某些需要RMI功能的编程提供了支持。该API是J2SE中相应API的改进版本。 包名为java.rmi。
未来发展
在三个Java 2平台中,J2ME可能是变化最快的。随着手持设备、嵌入式设备的增多,许多新的Profile、可选包也即将发布,让我们来看一些即将发布的最令人兴奋的Profile和可选包。
● MIDP2.0