本文作者:王森
台湾交通大学科技管理研究所
moli.mt88g@nctu.edu.tw
█Java 版本的演进
相信熟悉Java历史的人或多或少都听说过,Java技术一开始并非就叫做Java,而是叫做OAK,而且最早的时候就是为了嵌入式系统而设计的产品。后来因为网际网络的发达,而OAK的诸多特性刚好又适合用在网络上(例如可移植性、编译后程序代码很小),因此被改名成Java,从此因缘际会地成了网络上的闪亮巨星。随着时间越来越成熟,也慢慢地产生了许多非原本预期中的相关运用。虽然Java已经被用到许多企业级软件上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
Java版本的历史演进如下图所示:
从图中大家可以发现,虽然从Java 1.0发表之后,Java就被广泛地使用在桌上型应用程序以及Applet的开发上,但是,从Java 1.1开始,Java又回到了它一开始的老路--也就是嵌入式系统上面的应用,在当时Sun Microsystems发表了Embedded Java与Personal Java(也有人简称为PJava)这两项规格。
其中Embedded Java是为了资源十分有限,而且没有显示设备的装置而设计; Personal Java则是为在能够与网际网络联机、并拥有显示系统(例如彩色LCD)的消费性电子装置而设计。
接着Java的版本演进到Java 2,这时为了再明显区分各种Java的应用,所以分割出了J2EE、J2SE、以及J2ME三种版本。这三种版本的各种特性我们已经在前面详细的描述过,在此不再赘述。不过请大家记住,由于Java 2将Java的应用区分成三大块,使得Java程序语言的发展不会再像Java 1.1时如树枝状般扩散出去,这幺一来有助于大家对Java各种应用的厘清,而不会造成今后越发展下去越不可收拾的混乱局面。
额外向大家一提的是,后来Personal Java发展到1.2版的时候,也采用了一些Java 2平台上与安全性有关的设计。
█Java 2 Micro Edition概观
J2ME在设计其规格的时候,遵循着「对于各种不同的装置而造出一个单一的开发系统是没有意义的事」这个基本原则。于是J2ME先将所有的嵌入式装置大体上区分为两种:一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA、手机);另外一种是运算能力相对较佳、并请在电力供应上相对比较充足的嵌入式装置(比方说冷气机、电冰箱、电视机上盒(set-top box))。因为这两种区分,所以Java引入了一个叫做Configuration的概念,然后把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为Connected Device Configuration(CDC)规格。也就是说,J2ME先把所有的嵌入式装置利用Configuration的概念区隔成两种抽象的型态。
其实在这里大家可以把Configuration当作是J2ME对于两种类型嵌入式装置的规格,而这些规格之中定义了这些装置至少要符合的运算能力、供电能力、内存大小等规范,同时也定了一组在这些装置上执行的Java程序所能使用的类别函式库、这些规范之中所定义的类别函式库为Java核心类别的子集合以及与该型态装置特性相符的扩充类别。比方就CLDC的规范来说,可以支持的核心类别为java.lang.*、java.io.*、java.util.*,而可以支持的扩充类别为java.microedition.io.*。
区分出两种主要的Configuration之后,J2ME接着在定义出Profile的概念。Profile是架构在Configuration之上的规格。之所以有Profile的概念,是为了要更明确地区分出各种嵌入式装置上Java程序该如何开发,具有哪些功能。因此Profile之中定义了与特定嵌入式装置非常相关的扩充类别,而Java程序在各种嵌入式装置的使用者接口该如何呈现的规定就是定义在Profile里头。Profile之中所定义的扩充类别也是根据底层Configuration内所定义的核心类别所建立。
嵌入式系统上的Java程序、Profile、Configuration、虚拟机器、操作系统、以及实体装置之间的关系如下图所示:
从上图大家一定可以发现,根据某个Profile规范所撰写的Java程序除了可以直接呼叫Profile中定义的扩充类别,也可以直接叫用Configuration里头所定义的核心类别子集与扩充类别。
目前J2ME对于Configuration以及Profile所组成的架构大致如下图所示:
从上图可以看出,目前从CLDC所衍生出来的Profile有两种,一种是Handheld Profile,大多数用在PDA上;而另外一种是Mobile Information Device Profile(MIDP),这个Profile是针对行动装置所定义,比方说呼叫器(Pager)行动电话等等,都是属于行动装置。
另外,我们可以发现Embedded Java与Personal Java似乎没有包含在两个Configuration任何一个底下,这看起来有点奇怪,不过他们还是归类在J2ME的范畴之中,而且也衍生出了Java的实时版本(Real-time Specification for Java)。其实Embedded Java与Personal Java会慢慢被架构在CDC之上的Profile所取代。拿Personal Java来说,其实它的规格与Personal Profile的规格是兼容的。之所以目前还存有Embedded Java与Personal Java这两个名词的主要原因在于市场上已经有大量采用这两种规格的实作品,所以短期内Personal Java仍然会不断演进,一时之间还无法立刻归类到J2ME的特定Profile之下。
█CLDC、CDC以及他们所衍生出来的Profile之规格
既然Sun将所有的嵌入式装置区分成CLDC 与CDC两种,接下来我们先就这两种Configuration做讨论。
Connected Limited Device Configuration(CLDC)就Sun的文件所描述,是定义为「可以放在您的手掌上的装置」,比方说Palm系列的PDA或是手机就是最好的例子。而Connected Device Configuration(CDC)根据Sun文件的描述,定义为「可以插在墙壁上的装置」,比方说电视机上盒(set-top box)就是一个例子。不管如何,这两种Configuration之中定义的皆为这两种型态的嵌入式装置要执行Java程序所需要的最小配备需求。底下是CLDC与CDC各自的最小配备需求:
配备\Configuration
CLDC
CDC
RAM
RAM与ROM再加上闪存(Flash Memory)要为128K~512K。
大于等于256K
ROM
RAM与ROM加上闪存要为128K~512K。
大于等于512K
电源
通常是使用电池,所以电源有限。
不设限
在Javasoft的官方文件之中所架构出来的J2ME如下图所示:
根据上图,我们来讨论一下建构在Configuration之上的Profile。在Profile之中也定义了特定种类嵌入式装置的最小配备需求。既然Profile建构在Configuration之上,其意义就是说Profile之中所规范的配备需求不可能比Configuration还要低。同时,Profile之中对于显示功能、网络功能、以及耗电能力等相关需求将会比Configuration之中所规定的还要高。
底下是一些Profile的配备需求:
配备\Profile
Foundation Profile
Personal Profile
MIDP
RAM
至少512K
至少1 MB
RAM与ROM至少要为512K
ROM
至少1024K
至少2.5 MB
RAM与ROM至少要为512K
电源
不设限
不设限
通常是使用电池,所以电源有限
网络连接能力
部分功能
部分功能
具有低频宽的无线通讯能力
其它
要有额外的RAM或ROM供应用程序执行
要有额外的RAM或ROM供应用程序执行
要有额外的RAM或ROM供应用程序执行并储存资料
虽然官方文件之中绘出J2ME的美好远景,其实这些规格还有待大家努力。在本者撰写本文的时候,我们所能找到有关Configuration的规格只有完整的CLDC规格(v1.0)。而有关Profile的规格只有Mobile Information Device Profile的规格已经底定(v1.0),而其它如Personal Profile、 Foundation Profile、RMI Profile,因为是根据CDC所订定,而CDC的规格尚未底定(v0.2),所以这三个Profile的规格目前只有v0.x版。其余的Profile就连规格都还在草拟之中了。如果您对这些正在草拟的规格有有兴趣的话,请到Java Community Process (JCP)的网页http://java.sun.com/aboutJava/communityprocess/上观察Java Specification Request (JSR)的后续进展。底下表格是J2ME相关的JSP之所在位置:
JSR #000068
J2METM Platform Specification
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_068_j2me.html
JSR #000030
J2ME Connected, Limited Device Configuration
http://java.sun.com/aboutJava/communityprocess/final/jsr030/index.html
JSR #000036
J2METM Connected Device Configuration
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_036_j2mecd.html
JSR #000037
Mobile Information Device Profile for the J2METM Platformhttp://java.sun.com/aboutJava/communityprocess/jsr/jsr_037_mid.html
JSR #000075
PDA Profile for J2METM
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_075_pda.html
JSR #000062
Personal Profile Specification
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_062_pprof.html
JSR #000046
J2METM Foundation Profile
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_046_j2mefnd.html
JSR #000066
J2METM RMI Profile
http://java.sun.com/aboutJava/communityprocess/jsr/jsr_066_rmime.html
虽然已经底定的Profile规格并不多,可是以目前来说,已经足以让我们能够撰写PDA(PlamOS)和手机(Motorola)上的应用程序了。各位读者可以在CLDC参考实做的内附文件之中,除了可以找到CLDC规格所订定的核心类别子集与扩充类别之说明文件,也可以发现与PalmOS相关扩充类别(com.sun.kjava.*)的说明文件。同理,我们除了可以在Motorola J2ME SDK之中找到CLDC支持的核心类别子集与扩充类别之说明文件,同时也可以找到和Mobile Information Device Profile(MIDP)相关的扩充类别(javax.microedition.midlet.*、javax.microedition.lcdui.*、javax.microedition.rms.*)之说明文件。
Personal Java的发展其实以一段时间了,无数的公司根据其规格生产实作品,所以接下来将针对Personal Java做个别探讨。