一、J2ME概述
到目前为止,大部分人都已非常熟悉 Java 2平台,以及 Sun如何把 Java技术分成三个版本 (标准版、袖珍版以及企业版),Sun 在1999年6月时推出了 Java 2袖珍版 (J2ME)来满足消费电子和嵌入设备的需要。J2ME是为了那些使用有限的能源、有限的网络连接 (常常是无线连接)以及有限图形用户界面能力的设备开发的。它最初的目标是 16位或 32位处理器,16 MHz时钟频率, 512K或更少内存的设备。乍一看之下, J2ME就像一个没有绑定明显主题的松散的应用程序接口和技术规范。我们想通过说它不是什么东西的方法来描述它,它不是一组用于台式机 Java应用程序规范,如果你再观察仔细一些,你会发现所有的 J2ME组件都围绕一个中心,这些中心被称为configuration(配置 ,Sun的市场营销资料也称它们 design centers,设计中心),它们中间的每一个都是用于消费电子和嵌入设备的特别的类。
Connected limited device configuration(有限连接设备配置,简称 CLDC ) 这个配置定义了 Java应用程序接口以及支持手持设备的技术,就像 Sun的文档中所描述的那样, " devices that you hold in your hand(你握在手中的设备) " Palm序列手持设备可能是这一领域的设备的最好的例子,特别是它有开发 CLDC的功能以及 Palm设备运行期系统可用。
Connected device configuration(连接设备配置 CDC ) 这个配置定义支持象 Sun文档中所说, " devices that you plug into plug into the wall(你插入墙的设备)的设备的应用程序接口和技术,这样的设备的一个例子可能就是机顶盒。
这两种配置不同的地方就在于它们应用于的装置的能力, CLDC设备的处理器能力有限 (与台式机系统比较 ),并且存储器大小一般也只在128 KB到 512 KB之间, 与此同时,CDC系统就不同了,它可能有 32位或 64位处理器,以及有限的存储容量,不过它的下限也得超过512K。 它遵循的原则就是,每个不同的能力硬件的配置都将被不同的虚拟机支持。 基于 CDC的系统使用一个功能强劲的虚拟机,而基于 CLDC系统的使用 KVM 。
每个配置代表一种低水平的,基本的应用程序接口,在这两个相似基础之上是 profile(简表),用于特殊设备的额外的应用程序接口。 我想通过看一张来自SUN提供的文档中的图表 (参见图 1 )来解释这其中的关系。
图一解释 配置和简表的体系结构
J2ME的体系结构被横向地分成三层,纵向分成两部分。配置包括一个控制配置核心类的虚拟机, 具体的简表位于每个配置之上。
J2ME现在定义两个配置, Connected Device configuration(连接设备配置 CDC )和限制性更强的 Connected Limited Device Configuration (有限连接设备配置)。 简表的实现是 Java应用程序接口的一个集合,用于适应被定义配置的应用程序接口提供的服务,简表是一个完整的运行环境,一个在简表上执行的应用程序不需要额外的支持类。
J2ME没有定义满足这两种配置的标准化用户接口,Sun也承认现在的消费设备多种多样,用户界面也各不一样,所以定义一个可用于所有用户的界面是一场失败的战争。 J2ME中的用户界面定义在简表中。
二、J2ME的体系结构
现在个人计算机系统的数量和种类已经发展到无法控制的地步,请你想一想,你编写的程序运行在“信息家电”舞台的情景吧,这些信息家电包括呼叫器,行动电话,像Palm这样的个人数字助手(PDA),电视机顶盒,POS终端以及其他的消费电子设备。现在全世界上光是手提电话生产商就有许多,更不用说别的家电设备了,而且每一种家电设备又有不同的特性和界面。所以,你可以想到, Java应用程序的轻便性以及能够解决开发这么许多不同的设备程序的能力,使大家对J2ME有很大的期许。当然,为了更好的开发这些信息家电,就要求把Java的精髓压缩进一个非常小的程序包中,这就是J2ME。
J2ME是一种通过许多部件和规范的技术, 这众多的部件和规范帮助 J2ME来满足这众多的消费产品的不同的需要。和所有的爪哇程式语言技术一样,在它的核心属于一种虚拟机。 就像使用所有 Java技术一样,J2ME的核心也在一种虚拟机中。 最初,用于 J2ME应用程序虚拟机的被称作 Kilobyte virtual machine或简称 KVM。就像它名称的含义, KVM比较小,通常只有 128K或更少。这比起我们通常了解和使用的 Java 2标准版 Java虚拟机 ( JVM )的 32 MB来说就小得多了。
用于连接虚拟机的是一系列配置和简表,它们提供了用于特定 J2ME环境的类应用程序接口(见图二)。 每个配置和简表处理一般或具体的消费产品,配置和简表规范是由多种多样的设备生产商和用户共同开发并建立的。配置是用于一组通用设备的最小的 Java平台, 常常归为一种横向的设备分组,相对来说,横向分组设备是那些共享相同的内存安排,通信带宽,能量需求以及用户能力的设备,一般认为配置能够提供这众多的设备的所有需求。
图二解释: J2ME层次
Java虚拟机是 J2ME技术的核心,但是配置和简表提供特殊环境的类应用程序接口。配置是用于一组通用设备的最小的 Java平台,而简表则为具体的设备家族或特别的应用程序提供更具体的能力。
J2ME领域的新的开发者常常被这些事实困惑的, 事实上, Sun的第一个配置(现在只是一种配置的引用实现 )带有称为 KVM的虚拟机引用实现, KVM满足配置的虚拟机的必要条件。然而, Sun的 KVM也可以被另外一个虚拟机所代替,现在, 正是因为配置和虚拟机结合得有点紧密,因此导致了这么多的混乱。
另一方面,简表完善了 配置,为某个具体的设备家族或某个具体的工业片段应用程序提供更高的性能。 换言之, 简表为具体的纵向市场的设备比如说行动电话提供更多的性能。这里的关键就是 简表必须完善 配置, 没有 配置和虚拟机提供核心类应用程序接口和运行期环境的话,简表也不会工作。
通常,简表为一种给定的垂直分组设备提供用户界面、输入法、持久性机制。这类 简表被认为是发展这些设备应用程序的完整的工具包。我们见到最多的应用程序简表的例子就移动电话简表和个人数字助手(PDA)简表,其他简表为范围宽广的设备提供非常特殊的功能或应用程序可移植性,这方面的例子就是提供远程方法调用 ( RMI )功能的简表和提供统一银行事务的简表。
虚拟机、 配置、 简表…你是不是已经被搞迷糊了? 如果这样的话,我们就来简化一下 J2ME体系结构吧。 如果你想为小型信息家电编写 Java应用程序的话,你就需要两个前提:一个 配置和至少一个 简表。 现在, 一般是配置捆绑了虚拟机和一套针对你的平台所能够用的横向分组设备的Java类库。其次,你至少还需要一个 简表来为你的平台提供附加的 Java类,这个 简表通常会为你的设备提供用户界面、输入和数据库类。有了这两个前提,你就了使用 Java为你的设备编写应用程序的基本的J2ME环境。