本文将描述如何创建和使用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模板模型。
- 启动 RSA,点击File -> New -> Project ,选中UML Project 。
- 点击Next ,将项目命名为UMLtoCORBA 。
- 点击Next 。
您将看到UML模型的模板列表,如图1所示。
图1. 项目可用的模板列表
![A list of available templates for your project](http://img.e-com-net.com/image/product/70f5e869821345cc8694e628d6855fa0.jpg)
- 在列表中选择Corba Template Model ,将File name 命名为UMLtoCORBA ,点击Finish 。
于是您在项目UMLtoCORBA 中创建了一个Corba模板模型,并将建立一个类似图2所示的模型结构。
图2. 项目的模型结构
![Model structure of your project](http://img.e-com-net.com/image/product/9f309ab810bc411dbc95ff8d6b15f545.jpg)
初始化您的模型
该 CORBA模板模型包含不同的UML元素,例如包、组件、接口等等。该模板模型也包含那些能够被您自己的模型使用的CORBA原始类型的结构。模板模型中 的类图和指示包含了如何使用该模型的信息。一旦您创建了一个新的CORBA模板模型,您就能够重命名并组织该模型结构从而用CORBA元素创建您自己的 UML模型。依照如下步骤创建一个例子模型。
- 在CORBA转换中,组件映射为IDL文件,所以将这个组件重命名为NamingAuthority ,并将其拖至该模型(UMLtoCORBA )的根目录下。转换过程将为这个组件生成一个IDL文件。
- 将这个组件的接口重命名为translation_library 。此接口为NamingAuthority 组件提供了接口。转换过程将在NamingAuthority.idl 文件中生成一个相应的接口定义。
- 创建一个NamingAuthority 组件内部的包,命名为NamingAuthority 。这个包中包含所有构成命名权限组件的类和接口。转换过程将在NamingAuthority.idl 文件中生成相应于这个包的模块定义。
- 将translation_library 接口从组件中拖至NamingAuthority 包中。
- 在NamingAuthority 包中创建RegistrationAuthority 枚举。这个枚举包含了那些定义了命名权限的定义语言类型的枚举文字。在DNS、IDL、ISO、DCE和OTHER中创建这些枚举文字。
此时,您的模型应当类似于图3所示。
图3. 模型的变化后的反映
![Changes reflected in your model](http://img.e-com-net.com/image/product/c5602dc4811c4d97a76353ff11d80aef.jpg)
设计特定CORBA类型
为了进一步建模,您需要某种方法来设计特定CORBA类型。特定CORBA类型可以在套用格式的帮助下进行设计。如果您将CORBA转换配置文件应用于这 个模型的话,这些套用格式就将可用。在这个配置文件的帮助下,您能够建模特定CORBA类型,例如结构体、变量类型、类型定义等等。这个配置文件包含关于 应用在套用格式中的约束的相关信息。
- 要将CORBA转换配置文件添加到您的模型中,选择模型根目录(换句话说,在UMLToCORBA.emx 之下的UMLToCORBA ),并且观察属性窗口。在左手边有一个打开Profiles 窗口的标签。
- 选中这个标签,您将会看到在该模型中已经应用的配置文件列表,并且包括一个Add Profile 按钮,如图4所示。
图4. 模型配置文件
![Your model profiles](http://img.e-com-net.com/image/product/d62be009eb2e40c191d37006f40b3bb3.jpg)
- 点击Add Profile 。一旦CORBA转换配置文件被创建,您就能够建模特定CORBA类型。
- 在NamingAuthority 包中创建一个类AuthorityID 。
- 现在在属性窗口中选中这个类,点击Stereotypes 标签。
- 点击Add Stereotypes 按钮。
- 选择CORBAStruct并且点击OK ,如图5所示。至此转换过程生成了一个用于IDL文件中AuthorityID类的CORBAStruct定义。
图5. 将套用格式应用在您的类中
![Applying a stereotype to your class](http://img.e-com-net.com/image/product/8e51d2a9c03f4952ab41b62477e0ec48.jpg)
- 为了在这个CORBAStruct中添加属性,将属性naming_entry 加入到AuthorityID类中,并且将其类型改为CORBAPrimitive type String。
- 现在再创建一个属性authority ,并将其类型设置为RegistrationAuthority 枚举。属性的类型可以在属性窗口中被设定。
- 在NamingAuthority 包中再创建一个类QualifiedName,并且应用CORBAStruct套用格式。
- 创建一个名为authority_id 的属性,并将其类型设置为AuthorityID CORBAStruct。
- 再创建一个属性local_name ,并将其类型设置为String。
- 模型的最后一部分是实现translation_library 接口。
- 在这个接口中创建一个操作authority_to_str() 。将返回值设置为String型,参数类型设置为AuthorityID 。
- 在接口中再添加一个操作str_to_authority() ,将返回值设置为AuthorityID ,参数类型设置为String。
- 类似的创建一个方法qualified_name_to_str() ,返回值类型为String,参数类型为QualifiedName 。
- 创建最后一个方法str_to_qualified_name() ,返回值类型为String,参数类型为QualifiedName 。
至此,您的CORBA模型已经创建完毕,并且所有需要的套用格式都已经被应用。如果您将所有元素拖至图标的表面上,那么最终的模型应当类似图6所示的那样。
图6. 您的最终模型
![Your finished model](http://img.e-com-net.com/image/product/37ca4f08e959426e9f52a99dcb207578.jpg)
现在您可以不依照此模型运行CORBA转换,或者验证模型是否违反所应用的套用格式的约束条件。要验证该模型,您需要选中它,右键单击它,并选中Run Validation ,如图7所示。您也可以在选中模型后点击Modeling -> Run Validation 。
图7. 确认您的模型
![Validating your model](http://img.e-com-net.com/image/product/953877bfcc6b45d5b87b557b089bed76.jpg)
如果在验证过程中出现任何错误或警告,您就应当在进行转换前将您的模型修改正确。如果模型不正确的话,转换过程可能不能被完成,或者不能生成IDL文件。
转换
一旦您获得了一个既没有错误也没有警告的正确的模型,您就能够进行转换了。
- 右键单击模型的根目录,选中Transform -> Run Transformation -> UML to CORBA ,如图8所示。您也可以通过点击Modeling -> Transform -> Run Transformation -> UML to CORBA 达到同样的效果。
图8. 运行转换操作
![Running the transformation](http://img.e-com-net.com/image/product/f384a93f0b0c4cc4a22d55d0a87736bd.jpg)
- 此操作将开启对话框Run Transformation ,如图9所示的那样使用对话框。您可以指定名称、源文件、转换后的目的文件、映射模型,以及例如记录日志文件等普通操作,等等。所有这些选项都将在后面的章节中被详细讨论。
图9. 运行转换向导
![Run Transformation wizard](http://img.e-com-net.com/image/product/380f0b1d723f4b3a8c0385f7e98c0739.jpg)
- 转换的Name 栏中可以填写任何唯一的名称。不同的转换配置可以被存放在不同的转换名称之下。这些转换名称能够在Run Transformation 菜单中被显示出来(您需要在普通页面中选中Show in transformation menu 复选框)。并且在那里被直接执行。
- Source : 您可以指定一个UML模型、组件、包,或者这些元素的结合来作为转换的源文件。转换过程为每一个UML组件生成一个单一的IDL文件。每一个IDL文件包 含专用于相应的UML组件的特定代码。转换过程忽略了那些UML组件所没有包含的元素。如果您指定任何一个其它元素作为转换的源文件,转换进程就将在确认 过程中被终止。
- Target 将存放CORBA转换中生成的IDL文件。任何Eclipse项目都可以作为CORBA转换的有效目标。一个拥有IDL文件的新的Eclipse项目仍然可以被点击Create new target container 。
- 在您指定名称、源文件和转换的目标之后,您就可以定义映射表了。使用mapping 可以做到这一点。默认情况下,生成的IDL文件将会使用UML组件的名称作为CORBA元素的名字。使用映射模型,您能够在生成的代码中重命名模型的元素。除了组件之外,您只能使用简单的标识符重命名UML元素。
默认情况下,映射操作是不可用的,您需要选中Enable Mapping 复选框来使其可用。正如图10种所示的那样,您既可以使用一个已经存在的模型进行映射,也可以通过点击New 创建一个新的映射模型。
图10. 转换中的映射
![Mapping in the transformation](http://img.e-com-net.com/image/product/950e7b79e60243de920b597346b4ded9.jpg)
- 如果您点击Edit Mapping ,对话框(图11所示)将会提示您将UML 2.0中的元素映射到生成的IDL文件中的元素。
图11. 将UML中的元素映射为新的名称
![Mapping UML elements to new names](http://img.e-com-net.com/image/product/9503e668036044d1b4dea9ab4397d2b4.jpg)
- 您可以选中UML元素,并为其指定Mapped Name 。您可以将UML组件重命名为简单标识符,也可以使用有效的相对路径,指向生成的IDL文件中的目标容器。该路径应该以IDL文件的名称作为结束。例如,如果您将ComponentA 重命名为dirA\A ,转换过程将在名为dirA的目录下生成A.idl,而不是在目标容器的最顶层生成这一文件。
- 在common 标签下运行转换向导(如图12所示),您可以指定是否记录转换执行的日志文件,以及这一配置是否进入Transform 菜单。选中Log transformation execution 将打印出转换过程中执行的所有规则。这一日志文件被输出到控制台窗口。这将有助于利用IBM的技术支持调试转换过程以及记录错误报告(如果有的话)。
选中Show in Transform 菜单将会将该转换配置作为Run Transformation 菜单的子菜单显示出来。这有助于该配置的直接运行,而不必在转换的每一个应用中引入该对话框。
图12. 运行转换向导中的Common标签
![The Common tab of the Run Transformation wizard](http://img.e-com-net.com/image/product/f375f14fe9844414a8803f0d6c120f06.jpg)
- 现在您点击Apply 和Run ,转换过程将会被执行,并且相应于CORBA模型的IDL文件将会依照在映射模型中指定的映射规则(如果指定了的话)被生成出来。在转换被执行之后,您能够在包浏览器中看到生成的IDL文件。
- 为了打开包浏览器窗口,您应当将Java开发器设置为可用。您可以在Window -> Preferences 中点击Workbench -> Capabilities 中的java Developer 实现这一点。一旦Java开发器可用,选中Window -> Show View -> Package Explorer 来观察包浏览器窗口。
- 双击生成的IDL文件。在文本编辑器中打开IDL文件。如果转换执行的顺利的话,生成的IDL文件应当类似于图13中所示的那样。
图13. 生成的IDL文件
![The generated IDL file](http://img.e-com-net.com/image/product/636b3e2b73bb4e6fb87c0c339bfd5ad2.jpg)
注意到NamingAuthority.IDL 包含RegistraionAuthority 枚举的定义,两个CORBAStruct类和translation_library 接口的定义。一个完整的正确的IDL文件通过使用CORBA转换被创建出来。
下一小节将介绍CORBA转换是如何被集成到ClearCase中的相关的信息。
CORBA 变换被集成在ClearCase中用作生成的IDL文件的源控制器。CORBA变换同样支持CORBA IDL文件的并行开发。CORBA变换在一个简单的Eclipse项目中生成IDL文件。为了在ClearCase控制器下得到IDL文件,您必须在 ClearCase控制器中添加导出Eclipse项目。您可以根据如下步骤来完成这一任务。
- 创建一个Eclipse项目,将其命名为CCIntegrated 。
- 运行CORBA转换,目标容器被指定为CCIntegrated。
- 将此文件夹复制到一个使用Windows®浏览器的ClearCase VOB文件夹。
- 现在,将此项目从当前工作区中删除,其内容也一并从文件系统中删除。
- 点击File > Import Existing Project into Workspace 。
- 浏览并选中您所复制到ClearCase VOB文件夹下的项目,点击Finish 将该项目导入当前工作区。这一操作将源文件留在VOB文件夹中,并且仅仅保存了一个来自工作区的引用。
- 从当前工作台连接到ClearCase(如果还没有建立连接的话),如图14所示。
图14. 连接ClearCase
![Connecting to ClearCase](http://img.e-com-net.com/image/product/a34b72fa395f4e68ba6e574823be4acd.jpg)
- 一个对话框确定添加文件到ClearCase控制器下。点击OK ,于是该项目处在ClearCase控制器之下。(如图15所示)
图15. 将您的项目置于ClearCase控制器之下
![Putting your project under ClearCase control](http://img.e-com-net.com/image/product/4f5cb64ce8a946498b05553866e59eeb.jpg)
- 如果在第八步中没有出现对话框,您可以继续在导航窗口中用右键点击该项目,然后点击Team > Add to Source Control 。
- 至此,当您再一次运行CORBA转换时,您将会被提示检验IDL文件来重新生成它们,如图16所示。
图16. 提示检验适当的文件
![Prompt to check out the appropriate file(s)](http://img.e-com-net.com/image/product/3e040b7fd5f5480593a3a44737a00da1.jpg)
- 点击OK ,注意该IDL文件已经被检验并重新生成,如图17所示。
图17. 重新生成IDL文件
![Regenerated IDL file](http://img.e-com-net.com/image/product/56f3a1784aad4337b5622f9f8b1eaf19.jpg)
图18列出了UML 2.0模型中的元素到CORBA IDL的转换图。
图18. UML-to-CORBA映射关系
![UML-to-CORBA mapping](http://img.e-com-net.com/image/product/5c4bc1a507ff4b95ba35f25f32f60fbf.jpg)
本文的目的就是为您提供一种关于CORBA转换的总的看法,因此创建的模型都非常简单。如果使用CORBA转换中的所有特性,那么您就可以设计出非常复杂的CORBA模型。