本文将描述如何创建和使用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. 项目可用的模板列表
- 在列表中选择Corba Template Model,将File name命名为UMLtoCORBA,点击Finish。
于是您在项目UMLtoCORBA中创建了一个Corba模板模型,并将建立一个类似图2所示的模型结构。
图2. 项目的模型结构
初始化您的模型
该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. 模型的变化后的反映
设计特定CORBA类型
为了进一步建模,您需要某种方法来设计特定CORBA类型。特定CORBA类型可以在套用格式的帮助下进行设计。如果您将CORBA转换配置文件应用于这个模型的话,这些套用格式就将可用。在这个配置文件的帮助下,您能够建模特定CORBA类型,例如结构体、变量类型、类型定义等等。这个配置文件包含关于应用在套用格式中的约束的相关信息。
- 要将CORBA转换配置文件添加到您的模型中,选择模型根目录(换句话说,在UMLToCORBA.emx之下的UMLToCORBA),并且观察属性窗口。在左手边有一个打开Profiles窗口的标签。
- 选中这个标签,您将会看到在该模型中已经应用的配置文件列表,并且包括一个Add Profile按钮,如图4所示。
图4. 模型配置文件
- 点击Add Profile。一旦CORBA转换配置文件被创建,您就能够建模特定CORBA类型。
- 在NamingAuthority包中创建一个类AuthorityID。
- 现在在属性窗口中选中这个类,点击Stereotypes标签。
- 点击Add Stereotypes按钮。
- 选择CORBAStruct并且点击OK,如图5所示。至此转换过程生成了一个用于IDL文件中AuthorityID类的CORBAStruct定义。
图5. 将套用格式应用在您的类中
- 为了在这个CORBAStruct中添加属性,将属性naming_entry加入到AuthorityID类中,并且将其类型改为CORBAPrimitive
type String。
- 现在再创建一个属性authority,并将其类型设置为RegistrationAuthority枚举。属性的类型可以在属性窗口中被设定。
- 在NamingAuthority包中再创建一个类QualifiedName,并且应用CORBAStruct套用格式。
- 创建一个名为authority_id的属性,并将其类型设置为AuthorityIDCORBAStruct。
- 再创建一个属性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. 您的最终模型
现在您可以不依照此模型运行CORBA转换,或者验证模型是否违反所应用的套用格式的约束条件。要验证该模型,您需要选中它,右键单击它,并选中Run
Validation,如图7所示。您也可以在选中模型后点击Modeling -> Run Validation。
图7. 确认您的模型
如果在验证过程中出现任何错误或警告,您就应当在进行转换前将您的模型修改正确。如果模型不正确的话,转换过程可能不能被完成,或者不能生成IDL文件。
转换
一旦您获得了一个既没有错误也没有警告的正确的模型,您就能够进行转换了。
- 右键单击模型的根目录,选中Transform -> Run Transformation -> UML
to CORBA,如图8所示。您也可以通过点击Modeling -> Transform -> Run
Transformation -> UML to CORBA达到同样的效果。
图8. 运行转换操作
- 此操作将开启对话框Run Transformation,如图9所示的那样使用对话框。您可以指定名称、源文件、转换后的目的文件、映射模型,以及例如记录日志文件等普通操作,等等。所有这些选项都将在后面的章节中被详细讨论。
图9. 运行转换向导
- 转换的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. 转换中的映射
- 如果您点击Edit Mapping,对话框(图11所示)将会提示您将UML 2.0中的元素映射到生成的IDL文件中的元素。
图11. 将UML中的元素映射为新的名称
- 您可以选中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标签
- 现在您点击Apply和Run,转换过程将会被执行,并且相应于CORBA模型的IDL文件将会依照在映射模型中指定的映射规则(如果指定了的话)被生成出来。在转换被执行之后,您能够在包浏览器中看到生成的IDL文件。
- 为了打开包浏览器窗口,您应当将Java开发器设置为可用。您可以在Window -> Preferences中点击Workbench
-> Capabilities中的Java Developer实现这一点。一旦Java开发器可用,选中Window
-> Show View -> Package Explorer来观察包浏览器窗口。
- 双击生成的IDL文件。在文本编辑器中打开IDL文件。如果转换执行的顺利的话,生成的IDL文件应当类似于图13中所示的那样。
图13. 生成的IDL文件
注意到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
- 一个对话框确定添加文件到ClearCase控制器下。点击OK,于是该项目处在ClearCase控制器之下。(如图15所示)
图15. 将您的项目置于ClearCase控制器之下
- 如果在第八步中没有出现对话框,您可以继续在导航窗口中用右键点击该项目,然后点击Team > Add to Source
Control。
- 至此,当您再一次运行CORBA转换时,您将会被提示检验IDL文件来重新生成它们,如图16所示。
图16. 提示检验适当的文件
- 点击OK,注意该IDL文件已经被检验并重新生成,如图17所示。
图17. 重新生成IDL文件
图18列出了UML 2.0模型中的元素到CORBA IDL的转换图。
图18. UML-to-CORBA映射关系
本文的目的就是为您提供一种关于CORBA转换的总的看法,因此创建的模型都非常简单。如果使用CORBA转换中的所有特性,那么您就可以设计出非常复杂的CORBA模型。
学习
获得产品和技术
讨论
|