跳转到主要内容
skip to main content

developerWorks 中国  >  Rational  >

Rational Software Architect 的 UML 对 CORBA 的转换

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 初级

Anand Ramdeo, Software Engineer, IBM

2006 年 4 月 15 日

本文将描述如何创建和使用CORBA模板,并且进一步介绍如何创建您自己的CORBA模型。

导言

IBM®Rational®Software Architect(RSA)是一种遵循统一建模语言(UML)2.0标准的建模工具。该工具能够被用来进行设计、开发和测试软件,也能够将模型从一个抽象层转换到另一个抽象层。将模型中的元素从一个抽象层转换到另一个抽象层这一过程被称作MDA(模型驱动体系结构)转换技术。RSA支持这一技术。一个成功的转换能够将模型元素转换为源代码。这些转换面向Java™、C++、共同对象请求代理体系结构(CORBA),等等。本文将为您提供一种关于从UML到CORBA转换的总的看法。

UML-to-CORBA 转换将UML 2.0模型中的元素转换到CORBA接口定义语言(IDL)。它提供一个可选的精巧的配置文件 ,您能够使用该建模并且生成大部分CORBA元素。CORBA转换同样伴随着CORBA模板模型。CORBA模板模型提供了一种应用RSA或者IBM®Rational®软件建模工具(RSM)快速建模CORBA系统的方法。该模板模型包含一个包括组件和接口元素的完全格式化的CORBA模型,以及一条通过UML 2.0原型创建CORBA类型的捷径。

本文将描述如何创建和使用CORBA模板,并且进一步介绍如何创建您自己的CORBA模型。另外,将向您展示如何验证您的模型,如何在您的模型上运行转换来生成CORBA IDL文件,以及CORBA转换是如何集成在IBM®Rational®ClearCase®中的。





回页首


转换流程

创建一个UML项目

在使用UML 2.0到CORBA的转换之前,您应当熟悉一下如何创建和编辑UML 2.0模型和项目。这一小节将描述CORBA转换的一般流程。第一步就是创建一个UML建模项目,然后在该项目中加入CORBA模板模型。

  1. 启动 RSA,点击File -> New -> Project,选中UML Project
  2. 点击Next,将项目命名为UMLtoCORBA
  3. 点击Next

您将看到UML模型的模板列表,如图1所示。


图1. 项目可用的模板列表
A list of available templates for your project
  1. 在列表中选择Corba Template Model,将File name命名为UMLtoCORBA,点击Finish

于是您在项目UMLtoCORBA中创建了一个Corba模板模型,并将建立一个类似图2所示的模型结构。


图2. 项目的模型结构
Model structure of your project

初始化您的模型

该CORBA模板模型包含不同的UML元素,例如包、组件、接口等等。该模板模型也包含那些能够被您自己的模型使用的CORBA原始类型的结构。模板模型中的类图和指示包含了如何使用该模型的信息。一旦您创建了一个新的CORBA模板模型,您就能够重命名并组织该模型结构从而用CORBA元素创建您自己的UML模型。依照如下步骤创建一个例子模型。

  1. 在CORBA转换中,组件映射为IDL文件,所以将这个组件重命名为NamingAuthority,并将其拖至该模型(UMLtoCORBA)的根目录下。转换过程将为这个组件生成一个IDL文件。
  2. 将这个组件的接口重命名为translation_library。此接口为NamingAuthority组件提供了接口。转换过程将在NamingAuthority.idl文件中生成一个相应的接口定义。
  3. 创建一个NamingAuthority组件内部的包,命名为NamingAuthority。这个包中包含所有构成命名权限组件的类和接口。转换过程将在NamingAuthority.idl文件中生成相应于这个包的模块定义。
  4. translation_library接口从组件中拖至NamingAuthority包中。
  5. NamingAuthority包中创建RegistrationAuthority枚举。这个枚举包含了那些定义了命名权限的定义语言类型的枚举文字。在DNS、IDL、ISO、DCE和OTHER中创建这些枚举文字。

此时,您的模型应当类似于图3所示。


图3. 模型的变化后的反映
Changes reflected in your model

设计特定CORBA类型

为了进一步建模,您需要某种方法来设计特定CORBA类型。特定CORBA类型可以在套用格式的帮助下进行设计。如果您将CORBA转换配置文件应用于这个模型的话,这些套用格式就将可用。在这个配置文件的帮助下,您能够建模特定CORBA类型,例如结构体、变量类型、类型定义等等。这个配置文件包含关于应用在套用格式中的约束的相关信息。

  1. 要将CORBA转换配置文件添加到您的模型中,选择模型根目录(换句话说,在UMLToCORBA.emx之下的UMLToCORBA),并且观察属性窗口。在左手边有一个打开Profiles窗口的标签。
  2. 选中这个标签,您将会看到在该模型中已经应用的配置文件列表,并且包括一个Add Profile按钮,如图4所示。

图4. 模型配置文件
Your model profiles
  1. 点击Add Profile。一旦CORBA转换配置文件被创建,您就能够建模特定CORBA类型。
  2. NamingAuthority包中创建一个类AuthorityID
  3. 现在在属性窗口中选中这个类,点击Stereotypes标签。
  4. 点击Add Stereotypes按钮。
  5. 选择CORBAStruct并且点击OK,如图5所示。至此转换过程生成了一个用于IDL文件中AuthorityID类的CORBAStruct定义。

图5. 将套用格式应用在您的类中
Applying a stereotype to your class
  1. 为了在这个CORBAStruct中添加属性,将属性naming_entry加入到AuthorityID类中,并且将其类型改为CORBAPrimitive type String。
    1. 现在再创建一个属性authority,并将其类型设置为RegistrationAuthority枚举。属性的类型可以在属性窗口中被设定。
    2. NamingAuthority包中再创建一个类QualifiedName,并且应用CORBAStruct套用格式。
    3. 创建一个名为authority_id的属性,并将其类型设置为AuthorityIDCORBAStruct。
    4. 再创建一个属性local_name,并将其类型设置为String。
  2. 模型的最后一部分是实现translation_library接口。
    1. 在这个接口中创建一个操作authority_to_str()。将返回值设置为String型,参数类型设置为AuthorityID
    2. 在接口中再添加一个操作str_to_authority(),将返回值设置为AuthorityID,参数类型设置为String。
    3. 类似的创建一个方法qualified_name_to_str(),返回值类型为String,参数类型为QualifiedName
    4. 创建最后一个方法str_to_qualified_name(),返回值类型为String,参数类型为QualifiedName

至此,您的CORBA模型已经创建完毕,并且所有需要的套用格式都已经被应用。如果您将所有元素拖至图标的表面上,那么最终的模型应当类似图6所示的那样。


图6. 您的最终模型
Your finished model

现在您可以不依照此模型运行CORBA转换,或者验证模型是否违反所应用的套用格式的约束条件。要验证该模型,您需要选中它,右键单击它,并选中Run Validation,如图7所示。您也可以在选中模型后点击Modeling -> Run Validation


图7. 确认您的模型
Validating your model

如果在验证过程中出现任何错误或警告,您就应当在进行转换前将您的模型修改正确。如果模型不正确的话,转换过程可能不能被完成,或者不能生成IDL文件。

转换

一旦您获得了一个既没有错误也没有警告的正确的模型,您就能够进行转换了。

  1. 右键单击模型的根目录,选中Transform -> Run Transformation -> UML to CORBA,如图8所示。您也可以通过点击Modeling -> Transform -> Run Transformation -> UML to CORBA达到同样的效果。


图8. 运行转换操作
Running the transformation
  1. 此操作将开启对话框Run Transformation,如图9所示的那样使用对话框。您可以指定名称、源文件、转换后的目的文件、映射模型,以及例如记录日志文件等普通操作,等等。所有这些选项都将在后面的章节中被详细讨论。

图9. 运行转换向导
Run Transformation wizard
  1. 转换的Name栏中可以填写任何唯一的名称。不同的转换配置可以被存放在不同的转换名称之下。这些转换名称能够在Run Transformation菜单中被显示出来(您需要在普通页面中选中Show in transformation menu复选框)。并且在那里被直接执行。
  2. Source:您可以指定一个UML模型、组件、包,或者这些元素的结合来作为转换的源文件。转换过程为每一个UML组件生成一个单一的IDL文件。每一个IDL文件包含专用于相应的UML组件的特定代码。转换过程忽略了那些UML组件所没有包含的元素。如果您指定任何一个其它元素作为转换的源文件,转换进程就将在确认过程中被终止。
  3. Target将存放CORBA转换中生成的IDL文件。任何Eclipse项目都可以作为CORBA转换的有效目标。一个拥有IDL文件的新的Eclipse项目仍然可以被点击Create new target container
  4. 在您指定名称、源文件和转换的目标之后,您就可以定义映射表了。使用mapping可以做到这一点。默认情况下,生成的IDL文件将会使用UML组件的名称作为CORBA元素的名字。使用映射模型,您能够在生成的代码中重命名模型的元素。除了组件之外,您只能使用简单的标识符重命名UML元素。

    默认情况下,映射操作是不可用的,您需要选中Enable Mapping复选框来使其可用。正如图10种所示的那样,您既可以使用一个已经存在的模型进行映射,也可以通过点击New创建一个新的映射模型。


图10. 转换中的映射
Mapping in the transformation
  1. 如果您点击Edit Mapping,对话框(图11所示)将会提示您将UML 2.0中的元素映射到生成的IDL文件中的元素。

图11. 将UML中的元素映射为新的名称
Mapping UML elements to new names
  1. 您可以选中UML元素,并为其指定Mapped Name。您可以将UML组件重命名为简单标识符,也可以使用有效的相对路径,指向生成的IDL文件中的目标容器。该路径应该以IDL文件的名称作为结束。例如,如果您将ComponentA重命名为dirA\A,转换过程将在名为dirA的目录下生成A.idl,而不是在目标容器的最顶层生成这一文件。
  2. common标签下运行转换向导(如图12所示),您可以指定是否记录转换执行的日志文件,以及这一配置是否进入Transform菜单。选中Log transformation execution将打印出转换过程中执行的所有规则。这一日志文件被输出到控制台窗口。这将有助于利用IBM的技术支持调试转换过程以及记录错误报告(如果有的话)。

    选中Show in Transform菜单将会将该转换配置作为Run Transformation菜单的子菜单显示出来。这有助于该配置的直接运行,而不必在转换的每一个应用中引入该对话框。


图12. 运行转换向导中的Common标签
The Common tab of the Run Transformation wizard
  1. 现在您点击ApplyRun,转换过程将会被执行,并且相应于CORBA模型的IDL文件将会依照在映射模型中指定的映射规则(如果指定了的话)被生成出来。在转换被执行之后,您能够在包浏览器中看到生成的IDL文件。
  2. 为了打开包浏览器窗口,您应当将Java开发器设置为可用。您可以在Window -> Preferences中点击Workbench -> Capabilities中的Java Developer实现这一点。一旦Java开发器可用,选中Window -> Show View -> Package Explorer来观察包浏览器窗口。
  3. 双击生成的IDL文件。在文本编辑器中打开IDL文件。如果转换执行的顺利的话,生成的IDL文件应当类似于图13中所示的那样。

图13. 生成的IDL文件
The generated IDL file

注意到NamingAuthority.IDL包含RegistraionAuthority枚举的定义,两个CORBAStruct类和translation_library接口的定义。一个完整的正确的IDL文件通过使用CORBA转换被创建出来。

下一小节将介绍CORBA转换是如何被集成到ClearCase中的相关的信息。





回页首


ClearCase集成

CORBA变换被集成在ClearCase中用作生成的IDL文件的源控制器。CORBA变换同样支持CORBA IDL文件的并行开发。CORBA变换在一个简单的Eclipse项目中生成IDL文件。为了在ClearCase控制器下得到IDL文件,您必须在ClearCase控制器中添加导出Eclipse项目。您可以根据如下步骤来完成这一任务。

  1. 创建一个Eclipse项目,将其命名为CCIntegrated
  2. 运行CORBA转换,目标容器被指定为CCIntegrated。
  3. 将此文件夹复制到一个使用Windows®浏览器的ClearCase VOB文件夹。
  4. 现在,将此项目从当前工作区中删除,其内容也一并从文件系统中删除。
  5. 点击File > Import Existing Project into Workspace
  6. 浏览并选中您所复制到ClearCase VOB文件夹下的项目,点击Finish将该项目导入当前工作区。这一操作将源文件留在VOB文件夹中,并且仅仅保存了一个来自工作区的引用。
  7. 从当前工作台连接到ClearCase(如果还没有建立连接的话),如图14所示。


图14. 连接ClearCase
Connecting to ClearCase
  1. 一个对话框确定添加文件到ClearCase控制器下。点击OK,于是该项目处在ClearCase控制器之下。(如图15所示)

图15. 将您的项目置于ClearCase控制器之下
Putting your project under ClearCase control
  1. 如果在第八步中没有出现对话框,您可以继续在导航窗口中用右键点击该项目,然后点击Team > Add to Source Control
  2. 至此,当您再一次运行CORBA转换时,您将会被提示检验IDL文件来重新生成它们,如图16所示。

图16. 提示检验适当的文件
Prompt to check out the appropriate file(s)
  1. 点击OK,注意该IDL文件已经被检验并重新生成,如图17所示。

图17. 重新生成IDL文件
Regenerated IDL file




回页首


UML-to-CORBA映射关系

图18列出了UML 2.0模型中的元素到CORBA IDL的转换图。


图18. UML-to-CORBA映射关系
UML-to-CORBA mapping

本文的目的就是为您提供一种关于CORBA转换的总的看法,因此创建的模型都非常简单。如果使用CORBA转换中的所有特性,那么您就可以设计出非常复杂的CORBA模型。





回页首


参考资料

学习

获得产品和技术
  • IBM Rational Software Architect:从开发器资源库中下载一个试用版本。提供观察商业合同模型和开发服务实现模型所需要的工具。这些模型能够被用来为不同体系结构类型生成可执行代码。


讨论




回页首


关于作者

Anand Ramdeo一位IBM软件工程师。






回页首


对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.




回页首


其他公司、产品或服务的名称可能是其他公司的商标或服务标志。


    关于 IBM隐私条约联系 IBM