注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 核心技术 >> 高级编程 >> Java正文

基于RSA模型转换框架的开发

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-6-28 20:32:20 【 】 【加入收藏
    1 内容简介

  模型转换框架(Model Transformation Framework)是ibm最新开发平台RSA(Rational Software Architect)中的重要组成部分,其主要功能是在模型驱动的开发过程中,为实现各种模型之间的转换提供基础平台的支持。基于这个框架,能够很容易地实现模型之间的转换程序,以及扩展已有的转换。

  本文首先介绍模型转换的基本概念,然后介绍RSA模型转换框架,之后本文以两个具体的例子介绍如何在RSA开发平台中以模型转换框架为基础创建和扩展模型转换。

  2 模型转换

  MDA(Model Driven Architecture,模型驱动的体系结构)和MDD(Model Driven Development,模型驱动的开发)是当今软件领域最热门的话题。相比于传统的以代码为中心的开发模式,MDA和MDD则是以模型为中心,在开发的各个阶段,都使用模型来描述系统特征。

  模型转换贯穿于MDD的全过程。系统开发初期,为了刻画系统特征,一般会创建系统的分析模型。分析模型是一个比较粗糙的模型,相当于草图的作用,只用于辅助分析。随着系统的特征越来越清晰,系统的设计模型会慢慢形成。设计模型能够比较精确地描述系统,是系统实现的基础。从设计模型可以很容易地导出系统的实现模型。实现模型包括具体的代码、脚本、配置文件等等。这是一个自顶向下、逐层细化的过程,从高层的抽象模型开始,经过一系列的模型转换,最终生成底层的系统实现。

  

  图1 模型转换

  由此可见,模型转换在模型驱动的开发和设计中起着非常重要的作用。

  3 RSA模型转换框架

  RSA(Rational Software Architect)是IBM的新一代软件开发平台,代号为Atlantic。RSA基于开放/可扩展的Eclipse 3.0构建,全面支持UML 2.0标准和模型驱动的开发方法。RSA为开发当今日益复杂的应用系统提供了一个强大的的开发环境,整合了UML建模、J2EE、XML、web services、C++开发工具以及RUP过程指南等诸多功能,是软件架构师/开发人员的首选工具。

  为了支持模型驱动开发过程中各种模型之间的转换,RSA提供了一个功能强大、易于扩展的模型转换框架(Model Transformation Framework),该框架是一个基于规则的执行引擎,基于该框架,可以很方便地定义模型转换规则,实现各种模型之间的转换。RSA模型转换框架实现了模型转换的注册和配置管理,提供了统一的运行界面,以及各种开发向导。

  RSA预装有一些常用的模型转换,包括UML2JAVA、UML2CPP、UML2EJB,这三个转换分别以UML模型为输入,生成对应的Java程序、CPP程序和EJB。关于如何使用RSA预装的模型转换,请读者参阅RSA的相关文档。

  下面简单介绍RSA模型转换相关的一些概念:

  Transformation(转换):以源模型对象为输入,目标模型对象为输出,实现模型之间的转换。每个转换由若干条转换规则组成。

  Rule(转换规则):以源模型对象中某部分为输入,目标模型对象的对应部分为输出,实现了功能逻辑上相对独立的一部分转换任务。

  Transformation Context(转换上下文):转换上下文是转换过程中转换规则之间共享数据的容器。在转换的执行过程中,转换上下文会在规则的实现之间传递,每一个规则可以向上下文中存放需要共享的数据,也可以从中获取所需的数据。

  Transformation UI:模型转换框架会为每个转换提供一个默认的配置管理界面,让用户指定源模型,目标模型,以及所需的一些转换属性。如果需要定制更加复杂的界面元素,则需要模型转换的开发人员对默认的界面加以扩展。

  至此,读者应该已经对RSA模型转换框架有了总体的了解,本文余下部分将结合具体的例子,介绍如何在RSA中基于模型转换框架开发新的模型转换和扩展已有的模型转换。

  4 基于RSA模型转换框架的开发

  本节以一个具体的模型转换为例,介绍如何在RSA中基于模型转换框架开发新的模型转换。这个转换名为Model2Text,接受的输入为UML模型中的Class、Package,或者Model,如果输入为Class,则遍历类的属性、方法、参数,将这些信息输出到控制台,如果输入为package或者model,则遍历package和model下面的每一个类,将类的信息打印到控制台。

  4.1 创建新的插件工程

  通过新建工程向导创建一个插件工程。由于模型转换框架是作为eclipse插件集成在RSA中,因此模型转换工程也必须是一个eclipse插件工程,这样才能够使用转换框架提供的组件。

  4.2 添加TransformationProviders扩展点

  为了创建一个新的模型转换,需要从TransformationProvider扩展点进行扩展。首先添加所需的插件:

  

  图2 开发模型转换所需的插件

  然后添加TransformationProviders扩展点,该扩展点的ID为com.ibm.xtools.transform.core.transformationProviders。

  4.3 创建模型转换的入口:TransformationProvider

  从TransformationProviders扩展点扩展,添加TransformationProvider:

  

  图3 创建TransformationProvider

  添加TransformationProvider之后需要创建对应的实现类,这个类需要继承自模型转换框架提供的接口com.ibm.xtools.transform.core.AbstractTransformationProvider,是模型转换框架执行引擎调用模型转换的入口点,主要提供两个方法:

  createTransformation 创建模型转换的实例,返回给调用引擎

  validateContext 验证模型转换的执行上下文,从上下文中可以获取源模型和目标容器,进行验证。验证的结果会反映在模型转换的配置管理界面上。本例验证源模型是否Class、Package或者Model。

 

  4.4 创建Transformation

  本例的Model-to-Text转换在plug-in.xml中定义如下:

  

      < Transformation

  version="1.0"

  name="%Transformation.name.classtotext.console"

  transformGUI="com.ibm.xtools.transform.samples.modeltotext.TransformGUI"

  keywords="%Transformation.keywords.classtotext.console"

  author="%Transformation.author"

  groupPath="%Transformation.groupPath"

  sourceModelType="UML2"

  description="%Transformation.description.classtotext.console"

  document="doc/classToTextToConsole.html"

  targetModelType="None"

  id="com.ibm.xtools.transform.samples.classtotext.console.root">

  < /Transformation>

  version="1.0"

  name="%Transformation.name.classtotext.console"

  transformGUI="com.ibm.xtools.transform.samples.modeltotext.TransformGUI"

  keywords="%Transformation.keywords.classtotext.console"

  author="%Transformation.author"

  groupPath="%Transformation.groupPath"

  sourceModelType="UML2"

  description="%Transformation.description.classtotext.console"

  document="doc/classToTextToConsole.html"

  targetModelType="None"

  id="com.ibm.xtools.transform.samples.classtotext.console.root">

  Transformation的主要属性:

  Id 注册在模型转换框架中唯一的id。可以通过这个id引用这个模型转换

  name 模型转换的名字,也即最终显示在Transformation弹出菜单中菜单项的内容

  sourceModelType 源模型的类型,如UML2、Resource等等。本例选择UML2。

  targetModelType 目标模型的类型,由于本例是将源模型中类的信息输出到控制台,所以选择None

  transformGUI 自行定制的配置界面的实现类名。如果不指定,则转换框架会提供一个缺省的界面

  document 该模型转换相关文档存放的位置

  4.5 为transformation定义规则

  每个模型转换都由若干转换规则组成,每条规则实现了逻辑上相对独立的一部分转换功能,若干条规则组合在一起实现整个转换功能。转换规则的实现类应该实现模型转换框架中提供的com.ibm.xtools.transform.core.AbstractRule接口,一般需要实现如下两个方法:

  createTarget 从转换上下文对象中获取源模型对象,生成目标模型中相应的对象canAccept 该方法会在执行转换规则之前调用,验证源模型,通过验证则调用规则,否则执行引擎会忽略该规则。

  本例定义了4条转换规则:ClassRule、OperationRule、ParameterRule、PropertyRule,分别操作源模型中的类、操作、参数和属性对象,并输出信息到控制台。

  转换规则需要在模型转换实例初始化的时候添加:

  UML2Package uml2 = UML2Package.eINSTANCE;

  addByKind(uml2.getClass_(), new ClassRule());

  addByKind(uml2.getProperty(), new PropertyRule());

  addByKind(uml2.getOperation(), new OperationRule());

  addByKind(uml2.getParameter(), new ParameterRule());

  这段代码将4条规则添加到模型转换中,并指定每条规则所能够接收的源模型对象的类型。

 

 

  4.6 运行测试

  至此,Model-to-Text转换已经编写完成,下面开始运行测试。由于模型转换本身是一个Eclipse插件工程,所以必须从RSA中再启动一个RSA Workbench实例,将Model-to-Text插件加载运行。

  workbench启动之后,切换到modeling视图,选择Modeling菜单->Transform->Configure Transformations,打开模型转换配置界面,可以看到,Model-to-Text转换已经注册到模型转换框架中:

  

  图4 Model-to-Text转换已经注册到模型转换框架中

  创建一个UML模型,新建一个类Account,并添加一些属性和操作:

  

  图5 Account类

  然后在Account类上右击,从弹出菜单中选择Transformations -> Class to Text -> console,开始执行转换。该转换接收Account类作为源模型对象,将Account类的信息输出到控制台:

  Class: Account

  Attribute: id

  Attribute: balance

  Operation: setID

  Parameter: id

  Operation: getID

  Parameter: ReturnResult

  Operation: setBalance

  Parameter: balance

  Operation: getBalance

  Parameter: ReturnResult

  在模型编辑器中创建一个Component,作为输入再次执行Model-to-Text转换,由于Component不能通过源模型认证,因此模型转换框架在配置界面上报告错误:

  

  图6 源模型对象验证错误

  如果需要对模型转换进行调试,则需要以Debug模式启动RSA Workbench,之后便可以在源代码中设置断点,进行调试。

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     手机开发平台指南、教程和资料介绍
     关于什么叫面向接口编程
     编写高级JavaScript应用代码
     不要验证,直接转化科学计数法
     Eclipse插件开发中实现刷新和重编译介绍
     Java开源技术:Eclipse的使用技巧详解
     配置eclipse 3.2 使用JDK1.5中文JavaAPI
     集成Windows本地应用到Eclipse RCP 程序中
     hibernate.cfg.xml配置文件的说明
     eclipse开发jface时,main.class解决方法
    最 新 推 荐
     JSP高访问量下的计数程序
     得到两个日期之间的间隔天数
     Java的“静态库链接”
     用Java的加密机制来保护你的数据
     使用Java Annotations来管理对象生命周期
     JAVA实现的AZDG加密-解密算法
     基于RSA模型转换框架的开发
     如何重构出DAO模式
     关于AOP的应用实例
     关于数字排列的一个程序
    相 关 文 章

    基于Spring事务的集成测试
    EJB Extended 与Seam-managed Persistence …
    基于WCF和MSMQ构建发布/订阅消息总线
    基于Struts1.2的动态多文件上传
    基于WebSphere的J2EE应用
    基于Java并且开放源代码的可扩展开发平台
    基于JDK5.0一些collection类的使用总结
    基于JDK5.0的一些collection类使用总结
    ★Lotus Domino中基于Servlet的报表实现
    基于移动终端JAVA业务及相关测试研究

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用