关于JpetStore(http://www.jfox.cn/jpetstore/ http://www.ibatis.com/jpetstore/jpetstore.html)
JPetStore是Sun公司开发的,在大众化的宠物商店程序基础上完全重写的,最早的基于J2EE平台的宠物商店网络应用服务程序。与其它的PetStore最本质的不同是JPetStore使用了类似Microsoft网络宠物商店的设计,但是在骨子确是完全不一样的网络服务构架,可以说这种构架完全体现了Java程序在网络应用方面的优势,故在此以它为例,从Java的底层实现方面来分析 J2EE在Web层的应用。
系统架构概览
JPetStore以一个小型宠物商店电子商务平台为原型向大家展示了一个带有简单数据库连接的J2EE Web层的应用,它集成了Web层应用领域所必须具备的要素,如:用户ID认证、商品信息查询、商品信息列表等等。总之,JPetStore是一个集客户购物,下订单,管理为一体的简单且典型的电子商务的例子。
当然,现实中的系统不会如此简单,大多数的系统要和多个数据源和其他的EIS(企业信息系统)相连通的,有着比较复杂的数据库系统的设计与连接。比如说,订单的提交可能是一个公司,信用卡服务可能另外的公司,运送又是一个公司,这样的话,数据系统的设计就很复杂(一般来说这就需要专门的DBA进行数据库的设计)。然而作为窥探J2EE的一个窗口,了解J2EE的运作,JPetStore足以胜任。
JPetStore划分成了多个模块,采取了松耦合的设计架构,允许存在多个数据源及EIS进行信息交互。它的结构相对简单,总共包括4个部分:
· 购物站点
· 管理。如:销售统计,手工接受/拒绝订单
· 订单处理
通过JMS接受/处理订单消息
用java mail来通知客户
通过JMS发订单给供应商
并修改订单数据库的相应信息
· 供应商
通过JMS接受订单
派送货物给用户
提供一个基于web的库存管理
维护库存数据库
系统架构解析
宠物商店的网站服务采用自上而下的构架,其最上层是由WAF(Web Application Framework)控制应用屏幕的跳转,进而产生视图,然后再调用商业组件来实现流程的处理(整体结构如图1所示)。
图1 JPet Store 总体框架结构
WAF提供众多Web应用所需的服务,其中包括请求过滤和分发、产生模板视图、可重用的Taglib,以及屏幕流程控制等等。应用组件封装了处理的逻辑,它们代表了商业的数据,并且可以对这些商业数据进行必要的操作;实体EJB代表了商业应用的实体,包括客户、地址、账目等;会话EJB提供了一些方法,如用户登陆、输出用户信息、管理购物车等;其它会话EJB提供了一些通用的方法,如产生唯一标示符等。传统的JavaBean组件演变成了值对象,在EJB组件和应用间进行传递数据,成功地处理了各个对象的封装,有效地降低了程序设计的难度。而XML文档类则用来处理订单信息。
这个例子的WAF是对J2EE蓝图Web层规范的一个有效实现。一个通用的Web层处理一般可以划分为四个步骤(如图2所示):
◆ 解释一个请求
◆ 执行一个商业逻辑处理
◆ 选择下一个视图
◆ 产生这个视图
下面将分析宠物商店各个模块的设计 ,宠物商店主要的一些独立组成模块(如图3所示):
◆ 控制模块 用来分发请求到各个业务处理逻辑、控制屏幕跳转、处理对应的组件及用户
◆ 登录和注册 控制模块由WAF实现和扩展
◆ 购物车模块 购物车跟踪用户购物的过程
◆ 登录模块 确定用户登陆的页面
◆ 消息模块 从宠物商店到定单处理中心用来异步传输订单
◆ 类别模块 根据用户查询需求提供一个类别视图
◆ 客户模块 表示客户信息,如地址、信用卡、联系方式等
图3 JPet Store 模块设计
在图3中,控制模块将控制所有的交互信息和执行信息,每个用户会话都有一个购物车与之相对应。
宠物商店的组件主要有以下几个部分:
◆ EJB 代表了商业数据和商业逻辑的处理
◆ JSP页面 定义了整个应用视图的框架模板(template.jsp),由模板组成的各个JSP页面文件,以及各种被引用的图形文件
◆ XML文件 用来定义屏幕、屏幕跳转控制、绑定URL到某个HTML Action、定制signOn以及J2EE的部署
◆ Servlet过滤器 用来校验用户安全登陆和输出的编码
◆ 异步信息发送组件 传输使用XML封装的订单到订单处理中心
◆ 安装程序 用来产生例子数据库。
JpetStore系统的实现
前面介绍的是JpetStore所涉及的J2EE Web构架方面的常识以及JpetStore系统构架的一些信息,接下来,让我们进一步来了解一下JpetStore系统的实现。
首先,来认识一下JpetStore实现代码整体文件框架(图4):