摘要
本文简要介绍了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、计算机、手机)、在任何时间、任何地点获得所需要的任何服务(接收邮件、购物
闽公网安备 35060202000074号