当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2ME

用J2ME开发企业级无线应用

    系统需求

    现场销售人员在与客户洽谈时,需要及时地了解客户和联系人的详细资料,管理相关的商业机会,清楚公司产品的报价、存货等信息,能够方便地进行查询(多条件)、创建、更新和删除(权限允许)等操作,并且能够把相关数据下载到手机当中。另外,现场服务工程师需要随时掌握客户的服务请求及其客户和联系人信息,以便做出迅速的反映,协调处理好该服务请求。由于客户、联系人资料等需要填写较多的数据,系统应当支持离线和在线两种工作方式,用户可以先在离线方式下创建数据信息,保存到手机当中,再上传数据,进行同步,从而节省费用。开发工具我选择IBM WebSphere Studio.

    系统设计与实现

    考虑到系统的安全性、扩展性和可维护性,我决定在J2EE平台下开发服务器端程序,这样做系统复杂度低、成本低、系统性能优越。系统客户端是运行在Java手机上的,因此必须充分考虑这一特点,并在开发中加以应用。系统设计的目标是分开业务逻辑和表示层,它是一个典型的四层分布式MVC应用体系架构,下面将对其设计思想和实现原理进行详细阐述。

    客户端(Client Tier)

    客户端获得用户请求后提交给远程服务器,得到结果后加以表现。我选择在J2ME(CLDC+MIDP)平台上开发客户端程序。由于MIDlet程序开发具有内存小、界面简单、有限的运算能力和网络性能等特点,需要重点设计以下几个方面:

    1.与Web服务器之间的通信

    J2ME支持打开网络连接、传送数据、访问远程服务器资源。首先,用户在离线方式下设置系统参数,指定本公司Web服务器的IP地址、端口和Web根目录,选择工作方式(在线或者离线)。随后,程序将两条相关信息写进本地数据库,一条记录Web服务器地址,另一条记录工作方式。每当系统启动或者切换工作方式时加载,这样可以使得MIDlet工作在适当的状态。MIDlet编程支持HTTP网络连接,代码如下:

HttpConnection conn = (HttpConnection)Connector.open(url);


  这样就在客户端与Web服务器之间建立了HTTP连接,其中url存储了请求参数信息,比如:

url = "http://www.mcrm.com:8000/CRMRoot/custCreateAlias?id=001&name=..."

  Web服务器中相应的Servlet将调用doGet()方法处理请求,返回响应,从而把业务逻辑的处理交给服务器端,达到“瘦”客户端的设计目标。建好HTTP连接以后,就可以方便地操作数据流,进行数据读写了,代码如下:

InputStream in = conn.openInputStream();

int data;

while(data=in.read()!=0){...} ...


  需要注意的是,有的手机对中文的支持还不算很完善,其中有些地方需要进行编码转换。

  客户端编程的重点在于准确地提交用户请求参数、创建和查询客户信息、联系人信息、商业机会和服务请求,并可对查询到的结果进行更新、删除和下载。实现时,类CRMCustomer、类CRMLinkman、类CRMOpportunity、类CRMService封装了这些方法;类custSearch、类linkSearch、类oppoSearch、类servSearch提供了查询的界面;类CRMViewProduct实现了查看产品信息的功能。它们的实现手段相同,都是通过生成并提交存储请求参数信息的url,打开HTTP连接,请求服务响应来达到目的。]



 

图1 移动客户支持管理系统体系架构简图



  2.本地数据库操作

  MIDP(Mobile Information Device Profile)支持对持久数据的存储,J2ME记录管理系统 ( RMS )允许数据流被储存并在一个记录基础上访问数据,由应用程序开发者把每个记录解析到字段水平。系统需要存储的是包含用户请求参数信息的URL,从第三条记录开始读写(前两条已做系统参数用)。调用J2ME中类RecordStore的getRecord(int recordId)、addRecord(byte[] data, int offset, int numBytes)方法进行基本的读、写操作,并以“&”为标志符解析数据记录url,得到名/值对。系统把整个本地数据库操作封装在类CRMdb当中,这样,这些操作就可重用。

  3.XML解析

  XML(Extensible Markup Language)是一种独立于系统的表达数据信息的标记语言,现已成为网络系统中通用的数据交换格式。本系统采用XML技术进行数据交换,利用它的分级结构,很容易访问到所需的数据信息。这就意味着想要取得远程服务器端XML文档中的数据信息,MIDlet编程就必须支持XML解析技术。从网上不难得到J2ME端的XML解析器,本系统采用的是NanoXML,它是一种非确认(non-validating)、单步(single-step)解析器。NanoXML解析整个XML文档,并把它转换成一棵元素树(如图2),可以通过调用方法getChildren、getTagName、getContents等来遍历整棵树,得到数据信息。



 

图2 XML文件和相对应的树型文件模型



  表示层(Web Tier)

  Servlets和JavaBean构成了表示层。这是一种控制结构,减低了视图与模型之间的耦合性。当Servlet响应到一个HTTP GET请求时,doGet()方法被service()方法的默认实现所调用,并把request对象和response对象作为参数传给该函数。整个程序覆盖了doGet()方法,它们所做主要工作是创建JavaBean实例,传递request对象,调用bean方法,取得存放于Bean中的数据,返回结果(XML文档)。JavaBean封装了更为复杂的业务逻辑,可以调用EJB方法执行各种数据存取的事务。JavaBean是一种可重用组件,提高代码复用性,加快了软件开发过程。如上所述,系统利用JAXP和W3C提供的访问XML的接口DOM来处理XML文档。代码如下所示:

<custList>	

 <matchedCust>7</matchedCust>	

 <customer>	      

<id>Cust_001</id>	

 <name>Oliver</name>	

 </customer>	

</custList>


  业务逻辑层(Business Tier)

  EJB container提供了一种系统级服务,开发者只需要专注于业务逻辑处理即可。系统运用实体Bean封装数据对象,建立与数据库间的映射。会话Bean封装了业务逻辑,该系统实现的会话Bean是无状态的。业务逻辑层结构如图3所示。



 

图3 业务逻辑层结构设计



  EJBs功能如表1。

表1

包ejb.entity 封装了客户、联系人、产品、商业机会及客户服务请求等数据信息,并提供Home、Remote访问接口。
包ejb.session 封装了系统所需的业务逻辑和数据操作,包括添加、查询、更新和删除各项信息,并提供Home、Remote访问接口,也提供了一些方便数据操作的辅助类。



  数据库(Backend Tier)

  利用Sun公司提供的JDBC API可以很方便地操作关系型数据库(RDBMS),如上所述,实体Bean要与数据库表建立一种良好的映射关系。设计数据库时要注意主键值,它是惟一标识。本系统数据库共有五张表,见表2。

表2



 

customer 存储客户信息,设name,location,honor等字段,主键id。
linkman 存储联系人信息,设birthday,custid,custname等字段,主键id。
opportunity 存储商业机会信息,设description,moment,status等字段,主键id。
product 存储产品信息,设style,price,unit等字段,主键id。
service 存储客户服务请求信息,设product,contact等字段,主键id。



  现在,以“创建客户信息”为用例,察看整个系统各个模块间的协作与实现。

请求参数输入界面:	CRMCustomer.java

响应的servlet:	custCreate.java

处理请求的JavaBean:	CRMController.java

调用的会话bean:	CRMBean.java

实体bean:	CustBean.java

数据库表:	customer

显示结果:	CRMCustomer.java


    在整个开发周期中,需不断精化和细化用户需求,改进用例与建模,迭代构造和测试,使系统趋于完善。

    小结

    利用Java无线应用技术,结合J2ME和J2EE平台,可以设计并开发出健壮、高效的企业级无线应用程序,帮助企业提升经济效益。现在,越来越多的电信厂商生产出性能优越的Java手机,而且在电信运营商、电信设备制造商和应用程序开发者之间存在着一种较好的盈利模式。我们相信Java无线应用会有更好的发展。

相关内容
赞助商链接