J2ME综述
游安弼(本人导师)
1 J2ME诞生之前
90年代初SUN公预测到嵌入设备的巨大市场,开始了一项代号为“Green project”的秘密工程,该工程计划对嵌入设备研制出一整套的方案,包括设备,OS,图形界面,应用软件等。考虑到嵌入设备的多样性,该小组分析了已有语言后发现它们都不适合,应该重新设计一种新的语言,使得编写的程序不作改动就能在不同设备上运行,这就是“一次编写,到处运行”的首次提出。该工程完成时,嵌入市场尚在萌芽,其产品Star7 (*7)手持设备太超前了,在与日本几家公司的谈判中都未成功,该成果几乎夭折。此时INTERNET正是红火时,SUN公司的领导人以敏锐的目光发现该成果中的OAK语言很适合INTERNET,遂将其少许改进,命名为JAVA语言,应用到INTERNET上。由于JAVA语言的跨平台、短小、安全等特点而很快在INTERNET上走红,成为动态网页的主力军。
时间在推移,到了1996年嵌入市场渐渐启动,很多嵌入设备厂家要求与SUN公司合作,SUN公司才将JAVA重新应用到嵌入设备中,于1997年推出了PersonalJava,于1998年推出了EmbeddedJava,于1999年推出了KVM(The K Virtual Machine)。
PersonalJava应用环境针对有网络连接、有用户界面的设备(如机顶盒等)。为了减少对内存的需求,PersonalJava规范定义了两种包:一种是所有设备都必须有的强制包、一种是可选包。与JDK相比,PersonalJava应用环境不包括SWING用户界面API,而是提供了一个精简了的AWT API,还有一些特定的API。PersonalJava现已并入到PersonalProfile中。
表 1. PersonalJava 规范1.2a 核心包
强制包 |
|
可选包 |
|
注:当某个程序使用一个未包括的包时会引发一个NoClassDefFoundError 或 UnsupportedOperationException 例外。
EmbeddedJava应用环境是针对功能专一而且内存很有限的嵌入设备(如汽车、自动控制设备等)而提出的。它也是基于JDK 1.1,与PersonalJava很相似,但是它不像PersonalJava为特定设备定义特定的JAVA子集,而是允许用户仅使用需要的部分,您不别在您的设备中嵌入任何用不到的东西。EmbeddedJava将融入到基于CDC的某些(注意:不是某个)Profile中。
KVM是SUN公司的一项代号为“Spotless System”研究工程的成果,于1999年发布。该研究将JAVA技术移植到相对于PersonalJava类说资源更有限的运行环境中。 该研究的成果是一个最小的完整JVM(支持完整的字节码指令集,支持类装载,支持标准非图形类库和基本的文件支持)。该小组最关心的是可移植性和代码大小,而不是执行速度。为了测试该成果,该小组将其移植到PALM中,包括如下组件: KVM、核心类库、设备特定的数据库及用户界面API以及用于在PALM与电脑间传送文件的工具。该成果一公布,即在JCP中获得好评。如今它已成为CLDC的一部分。
到1999年时,嵌入市场已趋于成熟,日本推出的I-MODE JAVA手机迅速发展,几乎所有日本的手机厂商都推出了JAVA手机(由于I-MODE在MIDP之前,所以尽管也是JAVA手机,但开发方式与MIDP稍有不同)。
与此同时,JAVA在服务器端的开发中也迅猛发展,相对于CGI、服务器端API的开发技术来讲显示出了巨大的优越性,JAVA语言的平台独立性、安全性的特点在此再次得到充分发挥,其市场份额迅速提高。
到此时,以前的JAVA产品管理方式已不能适应迅速发展的市场,1999年下半年SUN公司决定将JAVA兵分三路,推出了针对嵌入开发的J2ME、针对桌面端的J2SE、针对服务器端的J2EE。下面我们来看看J2ME究竟有什么。
2 J2ME的组成
X应用程序 Y应用程序 Z应用程序
XProfile YProfile ZProfile
XConfiguration YConfiguration ZConfiguration
XOS YOS ZOS
X设备 Y设备 Z设备 |
图1 J2ME组成结构图
注:对于特定类型的设备选用特定的操作系统,特定的configuration,特定的profile,特定的应用程序。同类型的设备应用程序可通用。对于某一个设备,其configuration只能在已发布的configuration选用一个,但profile可以选用多个。尽管到目前为止只有两个configuration可用,但不排除会发布更多configuration的可能性。
Configurations是一个规范,它定义了针对特定类设备的一个虚拟机和专用的基本API集合。例如某一Configuration可能被定义为针对内存比较富裕而且有网络连接的嵌入设备,其虚拟机可能是一个完整的JVM,其API可能为J2SE中API的一个比较大的子集。而另一个Configuration可能被定义为针对内存较少且只有简单网络连接的设备,其虚拟机可能是JVM的一个子集,其API可能为J2SE中API的一个最小子集再加其它少量特定API。
Profile是建立在某个configuration之上的特定API集合。一个configuration只定义虚拟机和基本的API集合,不定义建立应用程序的细节。因此Profiles往往包括应用程序生命周期的API,用户界面API以及存储API。一个Profile既可直接建立在Configuration上,也可建立在另一个Profile之上。
为了在不改动Profile的前提下增加设备的功能,在Profile之外又提出了可选包,可将它们看成Profile的扩展,每个可选包对某个或某些profiles增加特定的功能。当对某个profile需要增加一个新的API时首先将它定义为可选包。如果随着时间的推移该可选包被广泛采用,它则可能成为某个或某些profiles的一部分。某些厂家特定的API与可选包起相似功能。
J2ME的这种结构很好的适应了嵌入设备的巨大多样性。从低到高,您可根据设备的情况可采用不同的configuration,在同一configuration中您又可根据设备的用途选用不同的Profile,在您的设备中您还可采用多个Profile,如果您还嫌功能不够,尚有可选包可用。那么有哪些configuration、Profile和可选包呢,我们介绍如下。
3 J2ME的现状
J2ME如今在嵌入市场可谓左右逢缘。在手机市场方面,几乎所有大型手机厂商都推出了JAVA手机,仅NOKIA在2002年就计划生产5000万部JAVA手机,型号达十几种,已开发出的JAVA应用程序更是不记其数。在数字电视方面,美国、欧盟以及我国的标准组织都采纳了JAVA,其前景可谓不可估量。我们在此仅从技术方面看看J2ME的现状。
3.1 已发布的configurations
到本文为止,已发布了两个configurations: CLDC( the Connected, Limited Device Configuration) 和 CDC (the Connected Device Configuration)。这两个configurations都是针对有网络连接的设备定义的。
3.1.1 CLDC
CLDC(The Connected Limited Device Configuration )是“Spotless”的延续,它针对很小、资源有限、有网络连接的设备如手机、个人数字助理、双向寻呼机等。这些设备计算能力较低、内存少、用电池供电、网络带宽小。其对硬件的要求较低,如可采用16位或32位处理器,最少160KB ROM,至少32KB RAM,某种网络连接。CLDC采用的虚拟机是KVM,其采用J2SE核心API的子集,还增加了特定的GCF (Generic Connection Framework)包, javax.microedition.io
。 下表列出了在CLDC中的包。
表 2. CLDC 包
包名
|
描述
|
|
J2SE 中相应包的CDLC 子集
|
|
J2SE 中相应包的CDLC子集
|
|
J2SE 中相应包的CDLC子集
|
|
J2SE 中相应包的CDLC子集
|
|
基于GCF的网络支持
|
3.1.2 CDC
CDC( The Connected Device Configuration )与CLDC相比是针对资源更宽裕的设备定义的规范,如高挡手机、高档PDA,电视机顶盒、信息家电等。CDC需要32位处理器,至少2M内存,某种网络连接。CDC使用的虚拟机是CVM,它是一个具有与J2SE 1.3 VM相同功能的但更小的虚拟机。CDC与CLDC相比包括了更多的J2SE 核心类库,编程更加方便,下表列出了CDC中定义的包.
表3. CDC 包
包名
|
描述
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
J2SE 中相应包的CDC 子集
|
|
基于GCF的网络支持
|
[此贴子已经被作者于2004-06-02 09:29:01编辑过]