基于J2EE的Web 应用的建模
2008-12-20
作者:万贤福,宋碧莲,孙莉
1、引 言
随着全球化市场竞争的加剧,传统的Web 应用系统" title="应用系统">应用系统已经不适应企业业务不断扩展,流程不断变化,存储数据分布处理,企业之间横向联系的要求。如何使得企业应用系统在激烈的市场竞争中能够迅速地反映企业的变化,加强伙伴企业之间应用服务的快速发现,企业之间业务数据的无缝集成,对于提高企业Web 应用的市场竞争力具有非常重要的意义。J2EE正是在这种背景下产生的,它是解决企业级应用棘手问题的理想平台。由此基于J2EE开发Web 应用成为了当前的热点。然而由于J2EE体系结构的特殊性,基于J2EE开发Web 应用有其自身的特点。于是如何对利用J2EE开发的Web 应用进行建模,成为摆在我们面前的问题。
本文在充分分析J2EE体系结构以及基于J2EE的web应用的基础之上,得出基于J2EE的Web 应用的建模任务,接着通过实例讲解基于J2EE的Web 应用的建模具体步骤,最后总结出建模原则。
2、J2EE
J2EE是一种利用Java 2平台来简化与多级企业解决方案的开发、部署和管理相关的复杂问题的体系结构;它提供了一个企业级的计算模型和运行环境用于开发和部署多层体系结构的应用。通过提供企业计算环境所必需的各种服务,使得部署在J2EE平台上的多层应用可以实现高可用性、安全性、可扩展性和可靠性。
J2EE的体系结构可以分为4层,如图1所示。
.客户端" title="客户端">客户端层 这一层直接与用户交互,J2EE支持多种客户端,它既可以是通过Internet访问的Web浏览器客户端,也可以是通过企业Intranet运行的瘦客户端。
.Web层 这一层是为基于Web的应用程序服务的,J2EE中的JavaServer Page和Java Servlet技术可以访问封装有商务逻辑的组件,并负责响应Web客户端的请求。
.EJB层 EJB(Enterprise Java Bean)封装了商务逻辑,完成企业计算。EJB1.1规范中EJB包括两种:会话Bean和实体Bean。会话Bean代表商业过程,而实体Bean代表永久性的商务数据。
.EIS层 EIS(Enterprise Information System)企业信息系统层包括企业已有系统(如ERP系统)、数据库系统、文件系统等。J2EE提供了多种技术来访问这些系统,如利用JDBC技术来访问数据库。
3、基于J2EE的Web 应用
3.1 Web 应用实例简介
在此举一个简单的Web应用实例,以阐述如何对基于J2EE开发的Web应用进行建模。它仅包括一个顾客登录用例" title="用例">用例,此用例为:顾客在浏览器中输入用户名和密码,点击“登录”之后,系统验证顾客,如果验证通过,页面显示“欢迎您!”信息,如果失败,则显示“登录失败!”。举此例旨在后续阐述问题时做到清晰,故而尽量简化。
3.2 基于J2EE的Web 应用的体系结构
基于J2EE的Web 应用大多采用MVC体系结构。MVC模式即模型-视图-控制器模型。模型指实现应用数据和商业逻辑的对象。视图负责格式化应用系统的结果和动态页面构建。控制器负责接收客户请求,调用适当的商业逻辑,并且基于结果选择适当的视图显示给用户。
图2显示了一种典型的基于J2EE的Web 应用的体系结构。
其工作原理如下:首先,①客户端浏览器向控制器发出请求事件,控制器(servlet)接收到请求事件之后,②向JavaBean代理发出处理请求,接着③JavaBean代理调用EJB进行业务逻辑处理并④获得结果,置入到其属性中,此时⑤控制器触发响应,将控制权传给相应的视图(JSP),⑥视图(JSP)从JavaBean代理中读取属性值,⑦获得处理结果,⑧生成客户端显示代码传给客户端浏览器。
3.3 基于J2EE的Web 应用的建模任务
由上述体系结构的分析,我们可以得出基于J2EE的Web 应用的各组成部分的建模任务(以图2所示结构为例):
.业务处理部分 此部分负责Web 应用的数据与业务逻辑,是Web 应用的核心,由EJB来实现,故这部分的建模任务是分析出Web 应用的业务逻辑并设计出相应的EJB以实现分析出的业务逻辑。
.控制器部分 此部分负责接收HTTP事件请求,调度相应的JavaBean代理并将控制转移给相应的JSP页面。所以这部分的建模任务是:设计出若干控制器,要求分析出每个控制器接受哪些HTTP请求,针对每个HTTP请求需分析出它调度哪些JavaBean代理和转移至哪些JSP页面。
.JavaBean代理部分 此部分负责调度EJB,得出JSP页面所需显示的数据,并将这些数据赋值给其自身相应的属性。它的建模任务是根据JSP页面所需,设计出相应的JavaBean代理,每个JavaBean代理需分析出它组织哪些EJB和怎样组织这些EJB,还有就是它有哪些属性以及怎样获得属性值的。
.JSP页面部分 在Web服务器上,负责从JavaBean代理中取出客户端所需显示的属性值,生成客户端显示代码;在浏览器上生成显示界面,通过显示界面向控制器发出HTTP请求事件。因此JSP页面的建模任务是设计若干JSP页面,分析出每个JSP页面所需获取的JavaBean代理的属性,并且分析出JSP页面生成的客户端代码可以触发的HTTP请求事件。
4. 基于J2EE的Web 应用的建模具体步骤
基于J2EE的Web 应用建模具体步骤如下(在此我们采用RUP建模过程来对前述应用实例进行UML建模,假设以图2所示体系结构实现此例):
(1) 分析用例中所涉及的持久性数据与业务逻辑,确定用来满足用例的EJB类。本用例涉及顾客信息,这是持久性数据,设计由CustomerBean实体EJB来封装顾客信息。此外本用例还涉及到对顾客信息的验证,这是业务逻辑,我们设计LoginVerifyBean无状态会话EJB来验证密码是否正确。
(2) 粗略设计此用例中所涉及的体系结构中各元素,并将它们放入到顺序图中。我们设计客户端页面为Login.jsp,服务器端页面为LoginResult.jsp,控制器为LoginServlet,JavaBean代理为LoginAgent。将它们与第一步设计的EJB一同放入到顺序图的适当位置。
(3) 分析用例流程,画出对象之间交互的消息。本用例中,①首先顾客在浏览器Login.jsp页面中填入用户名和密码,点击“登录”,向控制器LoginServlet发出登录事件,②控制器接收到登录事件后向LoginAgent发出Login消息,接着③ LoginAgent对LoginverifyBean发出LoginVerify消息,④ LoginVerifyBean通过UserName获取到此用户名的CustomerBean实体EJB对象,⑤LoginVerifyBean对CustomerBean发出getPassword消息获取出密码,⑥LoginVerifyBean进行密码对比,得出验证结果返回给LoginAgent,⑦ LoginAgent从后台获得验证结果后,根据结果给LoginResultInf属性赋值(若验证通过,赋值“欢迎您!”,否则赋值“登录失败!”),⑧LoginServlet将控制转给LoginResult.jsp页面,⑨ LoginResult.jsp页面向LoginAgent发出getLoginResultInf消息,获得LoginAgent的LoginResultInf属性值,之后生成显示页面传至客户端。至此顺序图完成,如图3。
(4) 将顺序图中的消息映射为操作,将消息中传递的数据封装" title="数据封装">数据封装到适当的类中,至此类图可以完成,如图4。
经过以上建模,体系结构中涉及登录用例的各组成部分都得到足够详尽的分析;顺序图清晰地展示出体系结构中各组成部分的相互协作的流程;建模过程简洁、清晰、明了;涉及数据和业务逻辑的类非常容易转化为EJB。建模效果比较理想。
5.基于J2EE的Web 应用的建模原则总结
根据上面的建模过程,结合前人与作者本人的研究,下面列出基于J2EE的Web 应用的建模的几点原则:
(1) 在体系结构基础上进行建模,将体系结构纳入并贯穿到整个建模过程中。将体系结构贯穿整个建模过程,从而指导建模者按照体系结构中各部分职能进行划分与设计系统,由此所建的模型能够很好实现体系结构,并且各组成部分也能较好地完成前面提出的建模任务。
(2) 对于涉及到数据与业务逻辑的类应该根据EJB的特殊性来进行设计。由于这些类最终要转化为EJB,所以首先要确定该类将来由哪种EJB来实现,如果该类涉及到持久性数据封装,则应该设计成实体EJB类,若涉及到业务逻辑则应设计成会话EJB类,特别值得注意的是实体EJB仅仅负责对于持久性数据的简单查询存取操作,所以如果某个类既涉及到持久性数据封装又包括对这些数据的复杂操作,则该类应该拆成实体EJB类和会话EJB类。这是和一般面向对象设计的不同之处。状态会话EJB也可以封装业务数据,但这些业务数据必须是会话客户状态数据,而不能是持久性数据。无状态会话EJB只能负责业务逻辑处理,不封装业务数据。需要申明的是上述都是针对EJB1.1规范而言的。
(3) 适当设计一些会话Bean,这些会话Bean代替EJB客户端执行对一些EJB的批量调用,并将最终结果返回给EJB客户端,这样做的目的是为了减少EJB客户端与EJB层的数据传输量,从而改善系统性能。
6.结 语
本文针对基于J2EE的Web 应用的特点,得出基于J2EE的Web 应用的建模任务,接着结合作者与前人的研究成果,最后总结出基于J2EE的Web 应用的建模原则与方法,经上海市十五重大科研基金项目上海市服装设计和加工公共服务平台(2S10716)验证,效果理想,遂撰此文,望能起到抛砖引玉的作用。
参考文献
[1] Simon Brown,《JSP编程指南》,2002.10,电子工业" title="电子工业">电子工业出版社。
[2]陈华军,《J2EE构建企业级应用解决方案》,2002.3,人民邮电出版社。
[3] Khawar Zaman Ahmed,Cary E.Umrysh等,《用J2EE和UML开发Java企业级应用程序》,2002.7,清华大学出版社。
[4]Ed Roman,《精通EJB》,2002.1,电子工业出版社。
[5] Grady Boock,James Rumbaugh等,《UML用户指南》,2001.6,机械工业出版社。