J2ME的现状与发展
SUN中国工程研究院 软件技术中心 王刚
摘要
本文简要介绍了J2ME的有关概念和现状、MIDP2.0的最新特点,并对J2ME的竞争对手、J2ME应用程序的兼容性以及其在Web Services中的应用做了阐述和分析。
什么是J2ME?
当JAVA平台发展到JAVA 2的版本以后,为了适应不同级别计算机硬件的开发需要,JAVA平台形成了三个主要分支:
Java 2, Standard Edition(J2SE):是为台式机而设计的,主要运行在Linux, Solaris, 或Microsoft Windows等操作系统上。
Java 2, Enterprise Edition (J2EE):则是一个适合分布式的、多用户、企业级应用系统运转的平台。它以J2SE为基础,增加了处理服务器端计算的功能。
Java 2, Micro Edition (J2ME):和J2SE不同,它既不算是一个软件也不能算是一则规范。准确地说,J2ME是为了支持象PDA、手机等小型的嵌入式或移动设备而推出的一系列的技术和规范的总称。它借用了J2SE类库的一部分,使用了更少的API,而且其J2ME采用的JAVA虚拟机(JVM)比J2SE的JVM也要小得多。
图1
应该注意到,J2ME要支持的硬件平台也有很大差异,其中有比较高端的设备,例如电视机的机顶盒、网络电视等;也有比较低端的,象手机、寻呼机等。因此为了满足不同硬件的开发要求,J2ME规定了configuration的概念,Configuration对不同级别的硬件在所使用的JVM和基础API集合方面做了规定。于是,对于高端的设备,采用CDC(Connected Device Configuration),所使用的JVM称为CVM;对于低端设备,则采用CLDC(Connected Limited Device Configuration),所用的JVM为KVM(参见图1)。
CDC和CLDC仅仅是对各类设备中最具共性的配置提供了基本的功能集合。但是,实际应用中,不同的设备之前存在着很大的差异。因此,我们在Configuration的基础上,又提出了Profile的概念。Profile规定的内容,是针对某一类设备所制订的规范和API,有了Profile以后,才真正有了可以建立一个可运行J2ME应用程序的完整环境。移动信息设备Profile(Mobile Information Device Profile或MIDP)以CLDC为基础,它是第一个制订完成Profile,也是第一个可供使用的J2ME应用程序运行环境。本文中的内容也将主要围绕MIDP来展开。
目前,支持MIDP,可以运行J2ME程序的设备已经有很多,手机包括Motorola 的A388、T720,Nokia 6800、7210等等(详细列表请参见http://wireless.java.sun.com/device/)。截止到2003年2月,已经有21个生产厂家推出了100多种支持JAVA的手持设备。根据ARC Group2002年六月的《无线JAVA报告》,“到 2007年, 几乎所有的手持设备都将提供对JAVA的支持”,看来J2ME在未来的几年里仍然将持续升温。
J2ME能为开发者和用户提供什么功能?
如前所述,MIDP出现最早,也发展最快,在此我们也仅讨论J2ME MIDP应用程序的开发。2002年10月,JCP(Java Community Process,参见http://www.jcp.org)推出了MIDP2.0的规范,和MIDP1.0相比,它大大加强了对用户界面、多媒体和游戏功能、网络连接功能的支持,同时将OTA应用程序下载包括到规范中来,另外还为无线信息设备提供了端到端(end-to-end)的安全机制。
为了支持对声音的处理(例如播放WAV文件),MIDP2.0中增加了一个可选包ABB(Audio Building Block)。在以前,ABB只包含在Mobile Media API(MMAPI)中,现在将其纳入到MIDP中来,开发者就可以不用依赖于MMAPI了。当然,如果使用了MMAPI,可以为移动设备开发更多的功能,比如可以在PDA上播放视频流等等。
对J2ME游戏开发的支持可能是开发者和用户都企盼已久的,MIDP2.0提供的游戏API使得游戏本身可以更充分的利用设备自身的图形处理功能。它的出现无疑大大简化了J2ME游戏的开发工作,同时也使得开发者可以更多地控制程序的图形处理性能。
在通信方面,MIDP1.0仅支持HTTP,MIDP2.0则增加了对HTTPS、报文、socket通信以及串口通信的支持。另外,MIDP2.0还支持服务器Push体系架构,这样,你的手机能够收到来自服务器的报警、消息或者广播,根据要求启动手机上的应用程序进行操作。
支持Over-the-air (OTA) Provisioning是MIDP2.0的一个重要的新特点,它使得用户能够动态地部署和更新移动设备上的应用程序。新版的MIDP规范中规定了如何在移动设备上发现、安装、更新和删除MIDlet套件;同时,提供应用程序下载的服务提供商还能够判断该MIDlet套件是否能够运行在申请下载的设备上,并且从设备上获取安装、更新和删除的信息。MIDP OTA provisioning模型为移动服务提供商提供了单一、标准的部署MIDP应用程序的途径。该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。
自从人类步入网络时代以后,网络安全始终是很一个关键的问题。MIDP2.0增加了强大的“端到端”的安全模型。一方面,MIDP2.0支持HTTPS,可以对传输的数据进行加密;另一方面,MIDP2.0采用了和MIDP1.0不同的安全机制,采用安全域来确保未经授权的MIDlet套件无法访问受权限控制的数据、应用程序以及其他网络和设备资源。
随着新的规范的推出,Sun、Motorola、Nokia、Borland等都推出了各自的J2ME的开发工具和集成开发环境(IDE),并受到了开发者的广泛好评。据统计,到2003年1月下载J2ME无线应用开发工具(即J2ME Wireless Toolkit,参见http://java.sun.com/products/j2mewtoolkit/)的人次已经超过了515000。与之而来的是J2ME开发队伍的不断壮大,目前全球J2ME开发人员的总数已经超过了二百万。图2是一个典型的支持J2ME应用程序开发的IDE,开发者可以完成编码、调试、部署并借助移动设备的模拟器完成功能测试。
图2
J2ME有竞争对手吗?
当然有。就象J2EE有来自.NET的竞争一样,J2ME有BREW(无线二进制运行环境)。
很可能BREW真正开始聚集中国人眼球的时候是在2002年12月4日, 中国联通和CDMA数字无线技术的先驱及全球领导厂商Qualcomm宣布,双方已签署成立合资公司的合同,以促进BREW平台在中国的发展,并扶植壮大中国BREW开发商群体。除了中国联通,美国Verizon、ALLTEL,韩国的KTF以及日本的KDDI已经推出了BREW的商业服务,而且全球越来越多的运营商正不断加入他们的行列。
BREW平台是一个瘦应用运行环境,为无线设备提供了一个开放、标准的平台。BREW平台是全面的、端到端的无线应用开发、设备配置、应用分发、计费和支付解决方案的一部分。关于BREW更详细的信息,你可以访问http://www.qualcomm.com/brew/。
那么,BREW是否对J2ME带来威胁呢?统计表明,如今全世界可以支持J2ME的手持设备如今已经达到了七千五百万,有34个运营商在使用J2ME技术;相比之下,BREW可是小巫见大巫,目前可以运行BREW的设备只有四百六十万,6个CDMA的运营商在提供服务。而且,在2003年3月,Qualcomm宣布将在其CDMA的芯片中提供对J2ME的支持,其实现主要基于MIDP 2.0和CLDC1.0.4。这个举措无疑印证了J2ME是技术领先的开发和部署无线数据服务的解决方案。由于Qualcomm几乎占领了90%的CDMA芯片市场份额,所以这也将加速J2ME向CDMA领域的渗透。当然,Qualcomm并未准备放弃BREW,因此在将来很有可能出现J2ME和BREW共存在同一个移动设备上,各自发挥自己的特长,而受益最大的,是移动设备应用程序的开发者和最终用户。
J2ME有没有不足之处?
有。如果你是一个J2ME的开发人员,或许曾经遇到过这样的情况:一个已经开发好的可以在Motorola A388上跑的程序在另一个品牌的手机上却不能正常运行,必须经过部分代码的修改才能使用。这种情况的出现,显然违背了Java平台的“编写一次,到处运行”的初衷。到底是什么原因呢?这是因为JCP在制订CLDC和MIDP等规范的时候,为了使其能够适用于众多制造商的产品,做了比较宽泛的规定。因此,当制造商在完成自己的实现的时候,常常会在规范允许的范围内,渗入某些自己开发的功能扩展,那么,当开发者调用这些功能的时候,往往必须针对这些扩展加入部分源代码,从而导致了开发出来的J2ME应用程序的不兼容性。
在这种情况下,越来越多的移动设备制造商和开发者意识到,需要建立一个标准来保证J2ME应用程序的跨平台性。《无线领域的JAVA技术规范》(Java Technology for the Wireless Industry即JTWI,JSR185)正是为了完成这个使命而出现的。来自Motorola,、Nokia、Sony和Sun等公司的技术专家于2002年底开始了该规范的制订,并将于2003年中期正式推出。JTWI并没有定义新的API,而是为已有的J2ME规范(例如CLDC、MIDP、MMAPI等)创建了新的手持设备的Profile,使它们能有效地集成在一起,为在手机以及其他移动设备上实现“端到端的解决方案”提供一个完整的JAVA运行环境。图3为JSR185中规定的在手机软件堆栈中各个组件的关系示意图。
图3
举例来说,如果开发人员需要在J2ME程序里调用手机的短信(SMS)功能,则往往需要使用该手机提供的专有的API。实际上,如今标准的做法应该是调用手机实现的Wireless Messaging API(WMA)。那么在JTWI中,将会推荐开发人员使用WMA,而不是专有的API。
毫无疑问,JTWI的推出,将督促各个制造商为开发者和用户提供标准化的CLDC和MIDP实现,以克服目前J2ME应用程序的不足,会进一步加强它们的可用性,从而促进其更大程度地在用户中的普及。
J2ME最终会向什么方向发展?
有了通信技术、互联网的发展,我们不难幻想某一天我们能够使用任何设备(PDA、计算机、手机)、在任何时间、任何地点获得所需要的任何服务(接收邮件、购物、股票查询等),这就是Sun公司推崇的为客户提供“按需服务(Service on demand)”的理念。要实现“按需服务”,就需要采用Web Services的机制作为技术框架。(要了解Web Services的基本概念,请参见《Web Services带来了什么》,http://gceclub.sun.com.cn)
图4
如何真正地将移动设备融入到Web Services中去呢?这就需要使得PDA、手机等成为Web Services的客户端,那么这些设备至少应该具有处理XML信息的能力。J2ME Web Services规范(JSR172)正是为了解决这个问题而来,图4示意了将J2ME和Web Services结合起来的系统架构。
JSR172即将发行,让我们在它正式出台之前对其做一个初步的了解。首先,该规范的制订是为了给J2ME平台增加两大功能:一是使其能够远程访问基于SOAP/XML的Web Services;二是使其具有解析XML数据的能力。为了实现这两大功能,JSR172新定义了提供相应功能的两个可选包。这两个包占用内存非常少,XML-RPC部分大概需要25-30KB的空间,而XML解析器则需要35KB左右。需要强调的是,规范中只提供了对客户端访问Web Services的支持,而没有给J2ME设备以作为Web Services提供者的能力,这也是从J2ME设备只具有有限资源这个实际情况出发的。
对于J2ME已经有一定使用经验的朋友可能会提出,即使没有JSR172,也可以使用kSOAP和MIDP合作完成J2ME Web Services的开发。kSOAP是专门为KVM(即基于CLDC)开发的支持SOAP的一个开放源码项目(参见http://ksoap.enhydra.org),我们可以引用kSOAP中提供的第三方类库来支持Web Services。但是有了JSR-172的支持以后,我们可以不使用kSOAP了,而且JSR172既可以在CLDC也可以在CDC上工作。
当然,J2ME Web Services由于其所在平台的特殊性,相对“真正的”Web Services来说,还存在着很多的限制。比如在规范的第一个版本,只对JAX-RPC的模型提供支持,也就是说仅支持同步的访问方式,使用J2ME客户端可以向服务器发送RPC请求和获得RPC响应。而对异步的消息机制的支持,我们只能寄希望于以后的版本。另外,JSR172还没有对UDDI(Universal Description, Discovery, and Integration)的支持,也就是说MIDlet无法在运行中动态地“发现”Web Services。不过这一点可以通过使用开发工具,利用WSDL(Web Services Description Language)的定义产生 stub的方式“静态”地来解决。
总结
J2ME 针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着新的规范的不断推出和众多制造商、软件开发商的支持,J2ME正在飞速向前发展。JTWI将 保证J2ME应用程序在不同制造商的产品上的兼容性。今后J2ME将借助Web Services的力量,真正成为企业级信息解决方案中不可或缺的一部分。
参考文献
1)无线JAVA技术简介,http://wireless.java.sun.com/getstart/
2)J2ME Datasheet,http://java.sun.com/j2me/j2me-ds.pdf
3)核心J2ME技术与MIDP,By John W. Muchow, Sun Microsystems Press
4)Java 2 Micro Edition概述,梅其波,Sun网络社区http://gceclub.sun.com.cn
5)JSR-118: 移动信息设备Profile 2.0,http://jcp.org/en/jsr/detail?id=118
6)JSR-172: J2ME Web Services,http://jcp.org/en/jsr/detail?id=172
7)JSR-185: 无线领域的JAVA技术规范,http://jcp.org/en/jsr/detail?id=185
8)Can Sun's mobile posse ease J2ME developers' woes? By David Berlind, January 29, 2003
9)BREW白皮书,http://www.qualcomm.com/brew/about/whitepaper.html
10) Qualcomm eats hat in mobile Java deal,By Elizabeth Biddlecombe,March 13 2003,http://www.theinquirer.net/?article=8304
11) Web Services带来了什么,王昱,Sun网络社区http://gceclub.sun.com.cn