摘要
Java 2企业版本(The Java 2 Enterprise Edition,J2EE)平台由4个主要的部分组成:规范,参考实现,兼容性测试包和BluePrints程序。BluePrints描述了一个分布式组件体系的最佳练习和设计指导方针。这篇文章介绍了一个由八个步骤组成的J2EE开发方法论,该方法是基于Rational Unified Process和BluePrints应用例子的。通过这篇文章,你将可以更好地理解J2EE体系的许多重要主题,并且可以应用这些知识来扩展和修改这个简单的方法论,从而解决各种特定的商业问题。
在商业领域,我们使用Java 2企业版本(J2EE)来解决商业问题,开发商业的软件,或者为其它的商业项目提供联系的服务。如果一个公司要使用多层的体系来建立一个电子商务的网站,在其整个开发周期中,通常都需要经理、体系构建人员、设计人员、编程人员、测试人员和数据库专家参与进来。
为了让不同的部分可以有效地工作,我们通常都需要一个软件开发流程。一个经典的开发流程包括有瀑布模型、快速应用开发(RAD)和最终编程。在这篇文章中,我们将集中介绍一个流行的软件设计流程--Rational Unified Process(RUP)。RUP提供了一个专门的方法来为不同的角色分配任务。它的目标是在一个可预计进度和预算内,确保我们生产出高质量的软件以符合用户的需要。
我使用RUP作J2EE开发有三个方面的原因。首先,RUP是以体系为中心的;在提交资源作全方位的开发之前,它首先开发出一个可执行的体系原型。第二,RUP是迭代的而且是基于组件的。该体系的基本通常是包含有一个架构,它可以方便地通过迭代地增加组件,从而在不影响系统其它部分的基础上,自定义和扩展一个系统的功能。第三。RUP使用一个工业标准的语言--UML,可以将系统的体系和组件以可视化的模型展示。RUP有4个不同的开发阶段:初始(inception), 细化(elaboration), 构建(construction)和转换(transition)。这篇文章将从一个技术的观点来介绍J2EE开发的8个基本步骤,它是维持以体系为中心的。
1、需求分析
需求分析用来描述系统应该和不应该做什么,从而开发者和用户可以创建一个初始化的商业联系。你可以用商业的概念、该领域的术语、框图或者其它方法将功能性的需求写成文档,而非功能性的需求,例如性能和事务,可以写在附加的需求文档中。你可以用文本或者HTML来创建高级别的UI模型,采取哪种方式,要看你在该项目中介入的深度。
图一展示了一个典型的电子商务系统。viewOrder图说明的是一个用户通过web登录至系统,查看订单的列表,并且可点击进去查看每张订单的细节。addLineItems说明的是用户浏览产品目录,选择感兴趣的产品,并且将它们加入到购买订单中。
II、面向对象的分析
分析产生问题域模型:类、对象和交互。你的分析应该脱离任何的技术或者实现的细节,而应该包含有一个理想的模型。对象分析可帮助你理解问题和获得问题领域方面的知识。你必须维护一个纯领域的模型,它不包含技术的细节,这是由于商业流程的改变要比信息技术慢得多。
上面的两步--需求分析和面向对象的分析并不是J2EE特有的,对于许多面向对象的方法论来说,都是很常见的。图2展示了一个高级别的对象分析模型,它是一个宠物店的例子应用。它说明了我们由需求分析use cases中确定的主要概念。我们将这些概念模型化到对象中,并且确定它们的关系。
需求和对象分析的结果是J2EE体系开发的一个入门点。要开发一个体系,你可选择一个垂直的部分--通常是一个关键的部分,例如是订单领域的对象模型--来作对象设计、实现、测试和开发。(一个垂直的部分,是一个RUP概念,是系统的一小部分。开始点是use case的一个子集,如图1所示,还有领域分析模型,如图三所示。一个垂直部分的实现就会产生一个全功能的迷你系统,包括所有层,例如用户界面层的JavaServer Pages(JSPs),中层的商业对象,例如是Enterprise JavaBeans (EJBs)和后台的数据库)。你可以将由原型中得到的经验应用到域对象中,并且将这些认识作为对象设计阶段的一个设计指导方针。
III、体系规范
经过前面的两个步骤,商业领域的问题和需求都应该清晰了。现在我们将集中讨论技术策略和体系上。一个体系就是各部分一起定义整个系统的蓝图:结构,接口和通信技术。我们可进一步将一个体系划分为企业和应用体系。
企业系统体系
企业系统体系覆盖了硬件和软件架构,网络拓扑,开发、测试和生产环境等。这些都反映了一个企业的长线投资。在开发前,你需要评估现有的软件和硬件架构,如果它不能完全支持J2EE的话,你可能会加入新的组件和升级你现有的系统。你需要彻底地评估硬件,包括有计算机,路由器、交换机和网络拓扑,因为它们都会影响系统的性能和稳定,图4展示了一个多层的网络拓扑。
图4中的多层企业体系拥有以下主要的组件:
.Web浏览器客户端,它可能处在客户端公司的防火墙后面
.HTTP服务器,它通常处在DMZ区
.Web容器主机提供表现或者商业逻辑组件
.应用容器提供商业逻辑组件
.关系数据库管理系统(RDBMS)和数据库提供数据和数据逻辑
所使用的系统体系类型是根据你对安全、性能、可靠性的需求以及你公司的财政状况而定的。要求很低时,你甚至可以使用一台二手的计算机和一条电话线。在Internet上,有许多开放源代码的操作系统、Web服务器、应用服务器和数据库管理系统。这些系统的花费可能只有几百美金,当然,维护起来可能要麻烦一点。
高端的客户,例如许多华尔街的财政机构,它们需要的是一个支持安全、高吞吐量和可应付不可预计网络通信的系统。在这种情况下,你通常就需要一个n层的体系,该体系带有Web服务器和应用服务器,并且设置为群集而达到容错的目的。
你还需要评估软件架构,包括Web服务器,安全管理软件,应用服务器,域名管理服务器,数据库管理系统和第三方的软件组件,如果你还没有购买你的应用服务器,那么在评估过程中,选择一个J2EE的生产商将是一个重要的部分。我要提醒你一点,不同厂家对J2EE的实现是有很大不同的,有一些仅支持旧的J2EE版本。此外,一些Web容器或者应用容器可能要比其它的快不少。除了实现J2EE规范外,许多的厂家还售卖J2EE体系的组件或者架构。选择一个稳定的J2EE厂家也是重要的,因为这样可以得到长久的支持。你通常可以购买或者在系统体系级别开发的功能包括有:
。事务处理
。国际化和本地化
。群集和对象分布
。Session管理
。应用性能测量和描述
。消息
。工作流管理
。入口和个性化管理
。层到层通信协议
。安全和防火墙
应用体系
应用体系建立在企业系统体系之上,指的是一个特别的项目或者应用。在架构完成后,体系建立人员就会研究如何建立一个专门的应用。如果你的企业体系只是支持一个旧的J2EE版本,你可能就需要首先升级你的系统。如果由于预算或者时间关系而不能做升级,那么就必须在旧版本的技术限制下工作。重要的是,要建立企业级的可重用组件。最终的目标是要满足客户的需要。
一个体系建立者并不是一个设计者;体系和设计是两件不同的事情。一个应用体系的范围是系统的主要结构、它的体系设计模式以及你可以在上面增加组件的架构。体系主要是涉及实现的非功能性方面,而设计是和商业的use cases有关,use cases是指你应用来转换域对象模型为一个技术对象模型的部分。应用体系是项目的结构,一个专门的应用。你通常在应用体系结构开发时要作出的决定包括有:
。层间的功能划分
。模型域对象
。以前的系统需要保存的东西
。购买的软件组件
。需要建立的组件
。如何集成第三方的组件
图3中的订单域对象解释了你如何做到模型化域对象。对于当前的Java技术,你可以将域对象分布在几个地方,包括有作为开发者管理的持续对象放在Web容器中,作为EJB放在应用服务器中,或者作为存储过程放在RDBMS主机中。
在宠物店的设计图中,我们将订单对象设计为一个实体bean、一个细节的对象和一个数据访问对象,如图5和后面的图6所示。当你看到这些时,你将会认识到其体系的重要性。你可以想一下为什么一个在分析模型的域对象被映射为这么多对象,以及如果改变该设计的话,将会发生什么事情。你也许已经听到过EJB的好处,不过要注意的是不同厂家实现起来的性能是有区别的。当新技术到来时,在将其放在到一个系统之前,你需要做研究并且动手做一些测试。其实所谓体系的开发,就是将设计和实现域对象模型的垂直块转换为设计其它许多域对象。
在J2EE出现的早期,一些面向对象的设计者尝试将域对象映射到实体bean中,并且将它们在层间传送。他们拥有非常好的UML框图,不过得到的结果是一个慢的系统,这是由于不必要的网络通信造成的。由对象分析直接进入对象设计,而没有一个体系的设计,没有清楚地理解一个新技术,这样通常都会导致一个项目失败。
可交付的体系
由于J2EE体系是一个相对新的主题,因此一个可交付的J2EE体系并没有很好地定义。在宠物店的例子应用中,是很难看出体系在哪里结束和设计在哪里开始。文档由高级别的应用体系检查、Model-View-Controller设计模式的讨论和一个体系概览开始。低级别的文档就是源代码。没有UML框图。Sun的J2EE企业体系认证的委派部分要求所有的可交付体系都用UML表示。不过,这里仅表示为一个类框图、一个组件框图和一些对象交互框图,。这些对于一个真正的J2EE应用来说都是不足够的。要开始的话,体系规范和流程至少需要以下的方面:
.一份系统体系文档,用来描述你现有的硬件、软件、网络拓扑和其它的组件
.一个应用体系文档,用来描述应用的主要结构,包括所有对于体系有重要作用的组件、use case组件和以前的组件的一个逻辑视图
.一个新组件设计指导方针,用来描述所有的设计方针和体系决定,解释全部这些决定,并且说明如果选择其它的选项会有什么可能的结果。这些方针应该包含所有重要的基本决定,以便进行新组件的设计时可遵从这些规定,以维持系统体系的完整性
。一个工作体系原型来评估新的技术;从开发和配置J2EE应用中获取经验;建立体系架构;通过测量性能、扩展性来预示所冒的风险;还有向客户证明你的方法是可行的
在你开发过几个J2EE方案并且获得更多的经验后,原型将不再那么重要,这时一些UML框图和一些设计方针就可能已经足够了