张海滨
(中国海洋大学,山东 青岛 266100)
软件开发从本质上讲就是一个从模型到最终代码的实现的过程[1]。自OMG 组织提出MDA 框架以来,基于MDA 的模型转换及代码的自动生成大大减轻了程序员手工开发代码的工作[2-3]。目前国内外的开发人员也就在基于MDA 框架下的各种应用进行了可行性研究[4-5],主要集中在从一个平台无关模型到平台相关模型的转换,而平台相关模型是对一个具体平台进行的一个抽象,其所抽象的层度取决于各研究开发人员对PSM 的定位,往往PSM 也只起了一个概念描述性的作用,本文提出了一种基于FMP-PIM 模型到J2EE 平台JSF 框架的映射关系,详尽描述了FMP 模型中各个模块到JSF 框架各组成部分的映射关系。
MDA(Model Driven Architecture)是OMG 提出的模型驱动软件体系结构,MDA 一改以前的诸如OMA(对象管理体系结构)和CORBA(公共对象请求代理体系结构)的分布式系统架构,而是以模型驱动为核心,通过模型转换提高软件开发的效率。
MDA 的提出是基于系统的具体实现技术无关的功能规范与系统在特定平台上的实现相分离的思想,其核心思想是模型转换,该方法最重要之处是系统规范与实现技术或平台的分离,再通过形式化映射到具体的平台基础(例如Java,XML,SOAP 等)。MDA 定义了3 种模型:①CIM(Computation Independent Model):即计算无关模型,关注系统的需求和环境,不展示系统的架构细节,是独立于软件的模型。②PIM(Platform Independent Model):即平台无关模型,以与平台无关的观点描述系统,是具有高度抽象层次的模型。③PSM(Platform Specific Model):平台相关模型,关注某种特定实现技术,由系统的数据、处理进程等平台相关的信息组成。
基于MDA 的框架的JSF 代码自动生成的流程图如图1 所示:
图1 代码自动生成流程图
在MDA 框架下,软件开发人员只需要考虑业务逻辑的建模,描述系统的业务功能和行为规范,建立与具体实现技术无关的平台无关模型,再通过模型转换得到加入了技术细节的平台相关模型,最后由代码生成器根据PSM生成最终可执行的代码。PIM 位于高抽象层次,独立于任何具体的实现平台。PSM 则是基于某种特定的实现平台技术来描述系统的模型,它依赖于该平台的结构和所提供的功能和服务,包含了系统在该平台上的实现细节,如操作系统、程序设计语言、数据存储、用户界面等。MDA 将PIM 抽象出来,针对不同实现技术或平台从同一个PIM 制订出不同的映射规则,然后通过这些映射规则及转换工具将PIM 转换成PSM,再将PSM 不断求精直至生成目标代码。这一切都是基于模型严格的形式化定义和模型间的自动转换而实现的。
MDA 能带来快速开发,提高系统可移植性、可维护性以及系统集成等方面的好处。已有很多开发商将基于MDA 的技术融合到他们的企业级软件解决方案中,如IBM、Compuware、Sun Microsystems、Adaptive、ADA Software、Kennedy Carter、ATC Enterprises 等,同时OMG 还建立了MDA FastStart 计划来帮助对MDA 感兴趣的公司实现和使用MDA。国内外多年的实践和市场的验证表明,软件模型驱动架构在软件的快速开发、随需应变、质量保证以及成本控制等方面是成功的,有很好的发展前景。
FMP(Function Model Presentation)是一种支持用户界面自动生成的界面模型,它是对界面中的抽象数据及行为等元素的描述,展示了界面元素与展示对象之间的对应关系。FMP 模型主要包括:Function 功能模型、Model 内部模型和Presentation 表示模型三个部分,FMP 模型图如图2所示。
图2 FMP 源模型
功能模型和对象模型捕捉与界面有关的数据信息和功能元素,交互模型表达这些信息和控制关系,表示模型则建立内部对象和外部显示元素之间的对应关系,规划界面布局,指导实现用户界面的自动生成。有关FMP 模型的详细描述见参考文献。
JSF(JavaServer Faces)是Craig McClanahan,Ed Burns等人于最终形成规范的一个基于Java 的Web 应用框架。JSF 为基于Java 的Web 应用开发提供了一个可重用、可扩展、基于组件的服务器端UI 框架,可以方便快捷的构建Web 用户界面,降低了利用Java 技术实现Web 用户界面的难度。它通过一个控制器Servlet 提出Web 应用程序生命周期管理工作,并提供一组标准的、可重用的服务器端组件来构建用户界面,而且能够在服务器上处理客户端事件、输入验证等用户界面管理问题。JSF 主要包括两大方面内容:一个是API 集合,用来表示用户接口组件,管理组件的状态,处理事件和验证输入,定义页面间的导航以及支持国际化:另一个是JSP 自定义标签库,用来在JSP 页面中显示JSP 接口。
JSF 框架负责与客户端设备交互,并且提供一些工具将Web 应用程序可视表示,应用逻辑和业务逻辑连接在一起,JSF 的范围主要被限制在表示层。JSF 框架见图3。
图3 JSF 框架
FMP 模型与JSF 框架的映射如图4 所示。
图4 FMP 模型与JSF 框架的映射关系
功能模型描述了用户通过界面所进行的操作处理,这些操作处理通过代码生成器映射到JSF 中的一个或多个Enterprise Beans,而在J2EE 平台中,Enterprise Beans 被配置到一个装了EJB 容器的平台上,应用实例通过这些Beans 的home 接口,定位到某个beans,并产生这个beans的一个实例。
对象模型描述的是界面的数据模型,通过对象模型与功能模型的交互建立对象行为与界面功能的对应关系。为界面功能提供实现条件。
交互模型是根据功能模型和对象型而建立的界面构成及关系描述,它与Web 页面的展示有着互动关系,映射到Web 页面对应的PageBean,针对Web 页面中的属性和方法原则上都对应着PageBean 中的一个set 方法和一个get 方法。
界面模板是与界面模型对应的界面的外在形式的一个抽象描述,经过代码器生成Web 页面html 展示。
体系结构配置信息映射着JSF 的Web 页面展示所必须的配置信息,如ds.xml,faces-config.xml 和web.xml 等。
为了更能清楚的说明问题,现举一个组合格式的信息查询系统,如图5 所示。图a 是信息查询系统的FMP 功能模型,展示了角色Actor 对复合用例JSPQuery 所执行的功能。图b 是对应的对象模型,定义了类student。图c 显示的是信息查询的交互模型,复合用例JSPQuery 执行Requerystu 操作导航到显示结果页面。图d 显示了信息查询的界面模板。
图5 信息查询系统模型
FMP 模型到PAF 模型的整体映射如图6 所示。本文用OCL 来描述转换规则,限于篇幅,这里只给出FMP 中用例的的Class 到PAF 的Class 的转换规则。
图6 FMP 模型与PAF 的映射关系
映射到JSF 框架后,由html 格式的JSP 页面展示出界面模板的Web 页面,由于本信息查询系统功能比较单一,故而没有生成独立的EJB,而JavaBean 中则包含了界面模板中主要属性和元素的set 方法和get 方法及某些动作的相应方法(如生成SQL 语句执行查询操作),同时FMP 模型体系结构配置信息经过代码生成器生成了在Servlet 容器中所必需的配置信息。
一方面,MDA 技术的日益成熟和完善,减轻了程序员的手工开发代码的工作量。另一方面。JSF 大大降低了利用Java 技术实现Web 页面的难度,本文以MDA 技术为基础,依据FMP 模型实现代码到JSF 的自动转换,描述了其映射关系,为基于J2EE 平台的WEB 应用提供了一种新的代码自动生成方法。随着研究的进一步深入,这些工作将会对基于模型驱动的Web 代码自动生成有一定的促进作用。
[1]Joaquin Miller and Jishnu Mukerji.MDA Guide Version 1.0.1,Document number omg/2011 -06 -01.http://www.omg.org/docs/omg/11 -06 -01.pdf.
[2]Craig McClanahan,Ed Burns,Roger Kitain.JavaServer Faces Specification Version 1.1,http://java.sun.com/javaee/javaserverfaces.
[3]Devon Simmonds,Arnor Solberg,Raghu Reddy,Robert France,Sudipto Ghosh.An Aspect Oriented Model Driven Framework[C].Ninth IEEE International Conference on EDOC Enterprise Computing,2010:175 -780.
[4]Jana Koehler,Rainer Hauser,Shubir Kapoor,Fred Y.Wu,Santhosh Kumaran.A Model -Driven Transformation Method.Proceeding of Seventh IEEE International Conference on Enterprise Distributed Object Computing,2008:231 -236.
[5]Bexivin.J,Hammoudi.S,Lopes.D,Jouault.F.Applying MDA Approach for Web Service Platform.Proceedings in Eighth IEEE International Conference on Emterprise Distributed Object Computing (EDOC),2009:83 -90.
[6]左学明,张力.一种新的基于JSF 技术的Web 用户界面开发方法[J].计算机应用,2005,12(01) :69 -73.
[7]朱庆生,葛亮.新一代Web 应用框架JSF[J].计算机科学,2005,32(07) :8 -11.
[8]万建在,孙彬.支持用户界面自动生成的界面模型[J].计算机工程与应用,2003,23(18) :75 -80.