工作流和面向服务的体系结构
摘要
在我的用BEA WebLogic Platform(WLDJ,第3卷)对遗留系统进行现代化改造的系列文章中,本文是最后一部分。第1部分从较高层次介绍了现代化改造的过程,以及遗留系统现代化过程中的诀窍。在第2部分集中阐述如何将BEA
WebLogic Platform和遗留系统进行集成。我还介绍了基于层次的体系结构的概念,以及一些基本的J2EE模式。
在很多方面,第1和第2部分给出了现代化中的基本“构建模块”。这个月我主要介绍业务流程的创建,或者称域模型层(domain model
layer)。我还将介绍应用服务的概念,它是一种管理现代化平台中的工作流或用例(use case)的方法。最后将介绍如何使用BEA WebLogic Platform建造一个面向服务的体系结构。如同在第一部分中介绍的那样,可以以一句话来总结“现代化”的含义:它是一种渐增地将业务逻辑从遗留系统移植到WebLogic的方法。
业务对象和域模型
在第一部分已经讨论过,现代化改造过程中的一项任务就是“将用例(use case)按优先级排序”,以便将它们移植到BEA WebLogic
Platform下。在那时,我并没有给出实现移植的真正细节。现在,让我们通过学习体系结构的业务层来了解这些细节。使用面向对象语言如Java等相对于过程语言如Cobol的优势在于:您可以建造一个丰富的域模型。基本上,域模型就是一个通过关联和继承层次而互相连接的对象的层次结构。域模型通常采用具有状态和行为的业务对象和它们之间细粒度的交互来实现。因此,现代化工作中最重要的一步就是设计域模型,以使它能够尽可能接近地反映遗留系统中的业务实体。换句话说,域模型就是概念模型的面向对象的实现,而概念模型则是通过研究遗留系统设计出来的。例如银行系统中,如图1所示,账户、客户、信用卡、等级评定制度等实体被映射为业务对象,这些业务对象具有关系、继承层次和行为。
图一
业务对象只不过是“平凡而陈旧的Java对象”,即POJO(plain old Java object),它们可以被独立地测试甚至重用。这里需要指出:我对业务对象,即“平凡古老的Java对象”,和实体bean进行了区分。在我看来,实体bean是一种持久性机制,并不适合构造丰富的域模型。您可能并不同意我的意见,认为域模型可以使用实体bean来设计,但我个人认为这种方式非常麻烦。但是,没有什么能阻止您坚持使用CMP实体bean来持久化业务对象,或者如第二部分所示,使用DAO访问遗留系统持久化业务对象。接下来让我们了解一下“应用服务”的概念,它实现的层次是比域模型更高的一层。
应用服务
您可能会考虑采用Session Façade(会话外观)来实现用例的现代化(见第1部分)。如果这样,Session Façade会直接调用域模型中的业务对象,而且Session Façade还可能会包含一些特定于用例的逻辑。此时,Session Façade的数目就会和实现现代化的用例个数一样多。但是这种作法有下面这些缺点:
·
使用Session
Façade的目的不对,Session Façade的作用指是将业务层组件以粗粒度的服务的形式向远程客户端公开。
·
Session
Façade会随着业务逻辑的增长而膨胀。
·
Session
Façade之间会重新产生用例业务逻辑的危险。
前面这些问题可以用“应用服务”来解决。应用服务提供了一种方法,用该方法在独立的业务或者域对象之外封装一层特定于用例的逻辑。换句话说,每个需要现代化改造的用例都可以通过一个或多个应用服务来实现,而应用服务会依次更新域对象。理解该问题的另外的一种方法是:域对象提供了域模型中域对象之间静态关系的表示方法,而应用服务表示领域对象间动态交互的关系。
最后,为了与远程客户端通信,Session Façades可以调用应用服务。图2说明了银行例子中Session Façades、应用服务和业务对象的关系。
J2EE中我完全喜欢的一点是它提供了基于组件的设计。BEA WebLogic Workshop可以帮助我们设计面向服务的构架:使用J2EE组件构造Web服务,与此同时隐藏了J2EE开发的底层复杂性,功能确实非常强大。下面我从“面向对象的构架”定义开始讲。按照我的观点,面向对象构架是一种构建企业级软件的方法,因而不必依赖于“内部”工具如包含组件接口的客户端JAR,“外部”应用程序就可以访问企业级软件。按照我的定义,最为主要的是,面向服务的构架只是简单地向层次构架添加了“Web服务层”,此Web服务层“隐藏”了底层组件平台。从这个意义上说,Web服务仍然依赖于底层,比如应用服务层和特定于业务的层次等。您可能会记得,特定业务层包含了所有的可重用组件。那么创建这种构架的好处是什么呢?
最为主要的是,通过向现代化平台中增加Web服务,系统间的耦合度得以降低,这一点非常不错,因为我们可以升级平台,与此同时,客户端调用我们服务的方式却不受影响。当然,只有Web服务的接口不改变时才如此。结果是,现代化的系统可以看作是一组服务的集合,内部的IT系统和外部的业务合作伙伴都可以访问它。图3中展示了加入Web服务层后整个的体系结构。
图3
使用WebLogic WorkShop构建Web服务
构建现代化平台的Web服务层的过程大致可分为下面几个步骤:
l
由业务层向BEA WebLogic Workshop导入所需的组件。如果Web服务和包含业务域模块的WebLogic服务器位于同一个机器上,只需简单地导入应用服务模块即可。然而,如果将Web服务构建为业务层的远程客户端,就必须导入Session
Façade和传输对象模块。不必从集成层导入任何组件,因为它们被业务层隐藏起来,我们的体系结构中的每层都隐藏了底层的细节,并且使用传输对象实现不同层次的通信。
l
设计Web服务接口及其工作流。它是同步的还是异步的,是否调用其它服务?您很有可能会和业务分析员一起设计该接口,设计过程中您可能会使用活动图(activity
diagram)和用例图(use-case diagram)。最为主要的是,基于现代化平台的应用服务,Web服务要向“外部世界”公开一个特定的业务流程。
l
利用BEA WebLogic WorkShop调用业务层组件,将服务逻辑编码。根据我所提出的体系结构,由Web服务提供的逻辑应该尽可能多地调用底层的应用服务,若是这样的话,事实上您是使用WebLogic
WorkShop通过“组装”或者调用业务层的应用服务来构建Web服务。也就是说,WebLogic WorkShop提供了构建Web服务的“黏合剂”,我已发现这种方法十分强大。
就这样简单,BEA WebLogic Workshop确实为您处理很多与J2EE相关的细节。事实上,认识WebLogic Workshop如何简化开发工作的一个方法就是试着“手工”地创建同样的服务,例如使用Apache
Axis。
使用WebLogic Workshop部署Web服务
部署Web服务的主要工作是将Web服务和应用服务模块或者Session Façade的客户端JAR打包到应用程序档案文件中。WebLogic Workshop也为您考虑到了这一点,它生成用于部署的EAR文件,只要选取“Build”菜单中的“Build EAR”就会生成一个EAR文件,该文件将会部署到生产服务器上。如图2所示,在对服务进行运行时部署的时候,有多种选择。例如,可能将整个现代化的应用程序和Web服务层打包为一个单独的应用程序归档文件,或者出于安全原因,将Web服务层与其它现代化的应用程序分别部署到不同的运行节点上。此时,您可能会创建两个应用程序EAR文件,一个对应现代化的平台业务和整合层,另外一个对应Web服务层。
结束语
这是我的关于“基于WebLogic Platform将遗留系统进行现代化改造”系列文章中的最后一部分,我努力地以提供秘诀的方式来阐述该现代化改造过程中的不同步骤。我想强调的重点之一就是:任何现代化改造的努力应该基于WebLogic和J2EE去构建一个更好用、健壮性更好的平台。首先此现代化的平台应该提供一个额外的,或者增值的服务,以此证实该努力确实是有必要的。BEA WebLogic
Platform还提供其它服务,例如安全性,容器管理的持久性等等,除此以外的服务必须由我们自己来设计。但是,构建“正确的”应用程序体系结构是极其重要的。
我已经介绍了在您自己的设计中可以复用的几个模式,我们还看到应该基于层次的体系结构来构建现代化的平台。将现代化系统和遗留系统集成的过程中应该使用数据访问对象(Data Access
Object)和数据传输对象(Data Transfer
Object)。我所采用的方法是“用例驱动”(use-case driven),意思是说,我们努力标识出遗留系统中具体的用例,并将它们重新移植到现代化的平台中去,然后这些用例就被映射为业务层中的一个或多个应用服务。现代化改造后的工作流来自于应用服务间的联系和操作。
我还讨论了构建丰富域模型的重要性,通过设计业务对象间的关系和层次来描述遗留系统。除了使得我们对业务域有更好的理解外,域模型还提供一个从面向对象的观点来看待遗留系统的角度,这些遗留系统先前是使用面向过程的语言例如Cobol等构建的。我还提到构建面向服务的体系结构的优势,并举例说明使用BEA WebLogic
Workshop能很简单地完成此任务。
在现代化改造的过程中,我们采用了几种模式(见表1),这些模式的文档很多。您也可以查阅《Core J2EE Patterns,
2nd Edition》和《Patterns of
Enterprise Application Architecture》这两本书来了解有关这些模式中更多的内容。最后,在使用BEA WebLogic构建丰富、多层和面向对象的体系结构对遗留系统进行现代化改造中,我希望我的文章能够让您深入理解这些内容。
表1
关于作者
Anwar Ludin专门从事金融界的面向服务的体系结构的研究。目前,他作为瑞士众多金融机构的独立顾问,协助设计基于BEA WebLogic
Platform的J2EE体系结构。 (更多) |