内容


使用 Rational Software Architect 与 ClearCase Remote Client 的双向工程场景

Java 转换

下载 Rational® Software Architect 试用版  |   Rational® Application Developer 试用版
获取免费的 Rational 软件工具包系列,下载更多的 Rational 软件试用版

IBM® Rational® Software Architect 是一种设计与开发工具,它集成了 UML 建模与真正的双向工程。Rational Software Architect 提供工具,可以从 UML 模型生成源代码,或从源代码中生成 UML 模型,它双向工程成为了可能。Rational Software Architect 通过自动生成源代码块,并将源代码中的变更自动转换为 UML 模型元素来快速更新设计,从而缩短开发的时间。

在双向软件开发过程中,会生成大量的软件工件及这些软件工件的不同版本。所以持续维护这些软件工件及其版本就十分的重要了。

本文论证了怎样使用拥有片段元素的模型来执行双向工程,以及怎样使用 IBM® Rational® ClearCase® Remote Client for Eclipse 向源代码控制添加工件以及片段文件。

本文使用来自 Rational Software Architect 7.5.5 与 ClearCase Remote Client for Eclipse 7.1.1 的范例。它涉及到了以下的区域:

  • 创建一个转换配置
  • 使用 Java™ 建模来编辑/变更源代码
  • 使用可视化的合并
  • 映射元素
  • 环境过滤器
  • 创建片段
  • 比较源代码控制中当前的版本与以前的版本

前提条件

在客户工作站上必须安装以下的软件:

  • IBM® Rational® Software Architect Standard Edition 7.5.5 版本或者更新的版本,您可能会使用 IBM® Rational® Software Architect for WebSphere® 7.5.5 版本,或 IBM® Rational® Software Architect RealTime Edition 7.5.5 版本及更新的版本。IBM® Rational® Software Architect 7.5 版本可以从 developerWorks 下载免费的 IBM® Rational® Software Architect 试用版。在安装 7.5 版本之后,通过将以下的存储库添加到 IBM® Installation Manager 后然后执行升级操作:http://www3.software.ibm.com/ibmdl/pub/software/rationalsdp/v75/rsa_se/755/repository/,来将其升级到7.5.5 版本。
  • IBM® ClearCase® Remote Client for Eclipse 应该通过 IBM Installation Manager 安装到 Rational® Software Architect 上(参见 IBM Installation Manager 信息中心 以得到使用 IBM® Installation Manager 的安装产品。)
  • 您应该创建一个 CCRC 视图与一个基本的 ClearCase VOB,并且创建一个 ClearCase web 服务器。用户应该得到服务器的认证(参见利用 IBM Rational Software Architect 和 IBM ClearCase Remote Client (CCRC) 简化全球化开发与交付 以得到更多的细节信息)。

工作流程

这个场景模拟了一个用户,该用户在 Rational Software Architect 中使用 ClearCase Remote Client for Eclipse 的源代码控制,来开发一个 Java 应用程序。这种工作流程列在下面,它遵循基于模型驱动开发过程(MDD)。

  1. 从 UML 模型开始并运行 UML-to-Java 转换以生成 Java 代码框架。
  2. 使用 Rational Software Architect 中的 Java 建模特性来修改源代码。
  3. 运行 Java-to-UML 转换以让 UML 模型处于最新状态。
  4. (可选的)在 UML 模型上运行 Java 转换,该 UML 模型已被分解为几个单独的模型片段。
  5. 使用比较与合并工具来比较和识别 UML 模型的当前版本与以前的版本之间的变更。

UML-to-Java 转换

本段显示了怎样导入一个范例项目,使用 ClearCase Remote Client for Eclipse 以共享项目,创建一个转换配置,并运行转换。

导入范例项目

按照以下方法以导入范例项目:

  1. 将附属的范例项目下载到您的文件系统中并将其解压缩。
  2. 启动 IBM Rational Software Architect。
  3. 从主菜单中点击 File > Import
  4. Import 对话框中,展开 General 条目。
  5. 点击 Existing Projects into Workspace,如图 1 所示,并点击 Next
已存在的项目导入到向导中
已存在的项目导入到向导中
  1. 在向导的第二页上,点击 Browse 并选择包含有解压缩后项目的文件夹。
  2. 点击 OK 以关闭 Browse For Folder 窗口。
    注意项目列于 Projects 之下,并且在默认条件下处于选中状态,如 图 2 所示。
导入的项目列于向导之中
导入的项目列于向导之中
  1. 选择 Copy projects into workspace, 然后点击 Finish。

Project Explorer 显示了导入的项目,如 图 3 所示。注意 Sample_class 模型此时处于关闭状态。

Project Explorer 的屏幕截图

使用 ClearCase Remote Client For Eclipse 来共享 UML 项目

按照以下方法,来使用 ClearCase Remote Client for Eclipse 以共享项目:

  1. Project Explorer 视图中,右击 RTE_UML_Java5 Project 并选择 Team > Share Project。
  2. Share Project 向导中,Share Project 页面上,点击 ClearCase Remote Client, 然后点击 Next。
  3. 点击您所创建的视图,然后点击 Next图 4)。
ClearCase Remote Client 视图列于向导之中
ClearCase Remote Client 视图列于向导之中
  1. 选择 Base ClearCase VOB 以为共享的项目指定一个位置。
  2. 点击 OK 以激活 add to source control 向导(图 5)。
选中了三个工件以添加到源代码控制中
选中了三个工件以添加到源代码控制中
  1. 点击 Add to Source Control 对话框中的 Show Details 按钮(参见 图 5)。具体的信息会显示出来(参见 图 6)。
添加到文件,以及注释与检查选项
添加到文件,以及注释与检查选项

注意

您可以选择或者不选择将文件添加至源代码控制中,添加注释,后者在向源代码控制添加注释之后将文件置于调试状态。

  1. 点击 OK 以完成向源代码控制添加项目的操作。
  2. 双击 Sample_class 模型将其打开。打开的模型会显示在 图 7 中。
显示源代码控制之下项目的接口
显示源代码控制之下项目的接口

一个绿色的矩形图标会覆盖,如 图 7 所示,它显示了模型项目置于源代码控制之下。

创建一个配置文件并将 UML 转换为 Java

按照以下操作,来创建一个转换文件并将 UML 转换为 Java:

  1. 从 Rational Software Architect 中的主菜单中,选择 File > New > Transformation Configuration。 接着 New Transformation Configuration 向导就会打开,如 图 8 所示。
  2. Java Transformations类别中,选择 UML to Java,如 图 8 所示。
  3. 将转换命名为 UMLToJava。
  4. 将配置文件的位置设置为建模项目之中(在本例中,是 RTE_UML_Java5)。确定您选择了 Reconciled 协议,然后点击 Next
询问文件名字,转换类型,以及协议
询问文件名字,转换类型,以及协议
  1. 选择 RTE_UML_Java5 项目之下的模型根文件作为源。
  2. 点击 Create New Target Container 以创建一个新的 Java 项目作为目标,将其命名为 PiggyBankJavaPrj,并点击 Finish图 9)。
  3. 点击 Finish 以完成转换配置的创建(.tc)文件。
选择转换源与目标
选择转换源与目标

注意:
如果您想要得到 Design Contract Management 协议(DCMP)和配置转换的更多信息,那么您可以查看 使用各版本的 IBM Rational Software Architect 以及相关软件中的 UML-to-Java 转换

  1. 接着就会弹出一个对话框,催促您向源代码控制添加 .tc 文件,如 图 10 所示。点击 OK。
选中的转换配置文件
选中的转换配置文件

通过转换配置向导创建的转换配置文件与目标 Java 项目,现在已经可以在 Project Explorer 视图中看到了。转换配置文件是在 RTE_UML_Java5 项目下创建的,并且位于源代码控制之下。

  1. 在 Project Explorer 中,右击 PiggyBankJavaPrj 项目并将其添加到源代码控制中(在 使用 ClearCase Remote Client 共享 UML 项目部分中有阐述)。
  2. 右击配置文件,并选择 Transform > UML to Java 以执行 UML-to-Java 转换。
  3. 接着您要向源代码控制添加生成的 Java 文件,如 图 11 所示。点击 OK 以添加生成的文件。
生成的 Java 文件列于对话框中
生成的 Java 文件列于对话框中

注意
生成的代码可能包含有编译上的错误。右击 Java 编辑器中的错误标记,并从内容菜单中选择 Quick Fix 以解决这个问题。

使用 Java 建模工件来编辑一个 Java 项目

Rational Software Architect 使用建模所用的类图,简化了复杂 Java 应用程序的开发。它还使得开发人员可以通过评审不同 Java 元素之间的关系来检查代码结构,来帮助他们理解代码。如果您想要得到关于 Java 建模的更多信息,您可以参考 Java 开发中的可视化支持

在这个部分中,您可以使用 Java Visualizer 来创建并编辑 Java 类和接口。

按照以下方法来创建并编辑 Java 类与接口:

  1. 点击 PiggyBankJavaPrj 并展开树形结构以查看 itso.ad.business.ejb.model 包之下的 Java 文件。
  2. 从项目浏览器中右击 Account.java,并选择 Visualize > Add to New Diagram File > Class Diagram。
  3. 将类图命名为 AccountInfo,如 图 12 所示,并点击 Finish。
询问文件位置以及文件名字信息
询问文件位置以及文件名字信息
  1. 现在您需要向源代码控制添加 AccountInfo 类图。点击 OK 以添加类图。

现在在类图中可以看到 Java 类 Account 以及它的所有 Java 域和方法。其 Java 域与方法的图标,指示了它的可视性与修饰符,如 图 13 所示。您向类图中所添加的 Java 域与方法,现在会自动添加至源代码中。

指示可视性与修饰符的图标
  1. Palette 拖拉一个类到类图中。
  2. 现在您需要检查 AccountInfo 类图。点击 OK
  3. 将新类命名为 SavingsAccount 并按照下面所示完成具体的操作(参见 图 14):
    • 包:itso.ad.business.ejb.model
    • 超类:Account
    • 名:SavingsAccount
  4. 点击 Finish
  5. 现在您需要向源代码控制添加 SavingsAccount 类。点击 OK 以添加类。
询问类名以及其他相关的属性
询问类名以及其他相关的属性

接着会创建名为 SavingsAccount 的新 Java 类,它展开了 Account 类。在 Project Explorer 以及 AccountInfo 类图中可以看到新的 Java 类。类图显示了 SavingsAccountAccount 之间的关系。

  1. Palette 拖拉一个接口到类图上,并将其命名为 AirMiles
  2. 在 Create Interface 向导中,填入以下的具体信息(保持其他的区域默认设置不变):
    • 包:itso.ad.business.ejb.model
    • 名:AirMiles
  3. 点击 Finish
  4. 现在您需要向源代码控制添加 AirMiles.java。点击 OK
  5. Palette 中点击 Implements 关系,并从 AccountAirMiles 创建一个 Interface Realization 关系。
  6. 检查 Account.java
  7. 点击 OK

类图现在更改了,如 图 15 所示。双击图上的类,并切换至 Java 编辑器视图。在视图中会打开相应的 Java 文件。

类与接口之间的关系
类与接口之间的关系
  1. 双击 Account
  2. Account.java 文件会打开,而代码会更新为 代码清单 1 所示。
清单 1. Java Account 类
/** 
* <!-- begin-UML-doc -->
* <!-- end-UML-doc -->
* @author user1
* @generated 
* "UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public class Account implements AirMiles {
  1. 点击 File > Save All
  2. 点击 Project Explorer 中的 PiggyBankJavaPrj,并展开树形结构以找到 Customer.java,它位于 itso.ad.business.ejb.model 包之下。
  3. 右击 Customer.java,点击 Refactor > Rename,并将 Customer.java 重命名为 Customers.java
  4. 现在您需要检查 Customer.java
  5. 点击OK

Customer.java 在项目浏览器中会重命名为 Customers.java。检出带有绿色符号的文件。因此,您就能够识别检出的元素,并在完成更改之后检查它们。

Java-to-UML 转换

本段讨论了 Java-to-UML(逆向)的转换,Java 元素到合并 UML 元素的可视融合,过滤与手动映射。这些特性提供了一种方法,以在转换之后将 UML 模型与 Java 代码同步化。您可以将源代码中的变更与目标模型自动合并起来,或者您可以手动创建源代码与目标模型之间的映射。

按照以下的方法来执行一次逆向转换操作:

  1. 右击 UMLToJava.tc 配置文件并选择 Transform > Java to UML
  2. Merge 窗口会打开(结构合并视图),如 图 16 所示。
显示源与目标的合并转换模型
显示源与目标的合并转换模型

图 16 的大图

新元素会在 Source 窗格与 Pending Changes 窗格中得到标记。为了标记所有的附加元素或者未标记的元素,您可以点击 Mark All Changes By Type 图标,如 图 16 中右上角所示。源代码会转换为一个暂时的模型(合并窗口中的左边),它列出了暂时模型与原始 UML 模型之间的所有 deltas。默认条件下转换会标记一些类型的变更,并保持其他的处于未标记状态。接着就会询问用户是否确认删除模型元素。这可以避免错误删除模型元素所造成的模型崩溃。

手动映射的模型元素

您还可以手动地映射源与目标之间的元素。如果您将一个元素移动到一个新添加的包中时,或者将源代码中元素(类,类属性,或者接口)重命名时,元素就像它是新添加的那样进行处理。为了给这些元素排序,您可以手动将它们映射到源模型及目标模型中。在它们映射之后,转换会将源元素的更改合并到映射的目标元素中。

在本文中并没有讨论的 Create trace relationships 选项,建立了 UML 模型与其生成的源代码之间的追踪性关系。如果您想要得到关于这个特性的更多信息,您可以参考文件 使用各版本的 IBM Rational Software Architect 以及相关软件中的 UML-to-Java 转换

按照以下的方法来手动映射模型元素:

  1. 在 Source Model 窗格中,展开 itso > ad > business > ejb > model。右击 Customers 类,并选择 Select source element for manual map
  2. 在目标模型窗格中,右击 Customer 类,并选择 Select target element for manual map
  3. 图 17 中所示的 Create Manual Mapping 对话框,会让您确认手动的映射操作。点击 OK
映射的确认创建操作
映射的确认创建操作
  1. 现在您需要确认程序的映射操作,如 图 18 所示。点击 Yes 以应用映射。
确认程序的映射
确认程序的映射

手动映射窗口会随着映射的模型元素一同打开,如 图 19 所示。

红色的 X 按钮(图 19 只是在您应用手动映射之后才会激活。单个的 X 按钮()就不会再选择手动的映射了。两个 X 按钮()就不会再应用所有的手动映射了。

映射至 Customer 的 Class Customers
映射至 Customer 的 Class Customers

图 19 的大图

手动匹配项目下的源模型,还包含了复选框以精确地调试合并进程,如 图 20 所示。

Class Customers 之内的复选框
Class Customers 之内的复选框

创建重命名模型元素之间的手动映射,如 图 21 所示。

连接映射元素的连接器
连接映射元素的连接器

图 21 的大图

过滤逆向的转换

您还可以显示那些选中的模型元素。如果您的模型很大并包含了很多的元素,那么过滤会帮助您强调显示那些手动匹配的模型元素并调试好您的合并操作,您可以取消掉过滤并显示源窗格与目标窗格中的所有元素。

按照以下方法来过滤掉不需要的模型元素并取消过滤器:

  1. 从源窗格中的模型中右击 Customers 元素,并选择 Set Filter > Go Into "Customers<Class> - Customer<Class>"

这些源模型和目标模型会得到筛选;只有那些选中元素的父类和所有子类才可以看见。

  1. 您可以从内容菜单或者下拉菜单中取消应用的过滤器。

按照以下方法来使用内容菜单:从源模型中右击 Customers 元素,该源模型会映射到目标模型的 Customer 元素,并选择 Remove Filter > Go Into "Customers<Class> - Customer<Class>”,图 22 所示。

内容菜单屏幕截图
内容菜单屏幕截图

按照以下方法来使用下拉菜单:点击工具栏上的过滤器按钮(如 图 23 所示),并从下拉菜单中,清除 Go into “Customers<Class> - Customer<Class>"

屏幕截图下拉菜单
屏幕截图下拉菜单

您可以去掉那些您不感兴趣的更改,以减少源窗格与目标窗格中所显示的 deltas。您对每一个转换配置所做的过滤器设置会得到保存。因此,每次在您运行相同的转换时,您不再需要更改过滤器设置。delta 树形结构配置窗口会显示在 图 24

显示一些过滤器选项的接口
显示一些过滤器选项的接口

完成逆向转换

手动映射会重新设置所有的检查符号。因此,您需要重新标定需要向目标 UML 模型添加的更改。在您再次标记更改之后,转换就会将源代码更改合并到目标 UML 模型中。

按照以下方法来再次标记更改:

  1. 在源模型窗格中,选择 AccountSavingAccountAirMiles 的复选框,如 图 25 所示。
标记类 Account,SavingAccount 与 AirMiles
标记类 Account,SavingAccount 与 AirMiles
  1. 点击 OK
  2. 现在您需要检出目标模型(RTE_UML_Java5 项目中的 UML 模型)。因为在转换期间它得到了更改。点击 OK

在合并进程中的更改保存在 Design Model 之下(RTE_UML_Java5 项目中的目标模型)。

  1. UML 模型会重新载入以显示新的变更。检入模型。

使用模型片段

本段讨论了在执行双向工程时对大型 UML 模型使用模型片段时的益处。在对源代码控制下片段化 UML 模型运行 Java-to-UML 转换时不同的行为。注意使用模型片段在该场景的工作流程中是可选择的。

创建模型片段并将它们添加到源代码控制下

当您在创建模型片段时,您会创建一个小的文件,该文件包含了片段的模型元素。模型文件的规模会降低,因为片段的元素会分解为片段文件,而不是继续作为模型文件的一部分。

您可以创建许多的模型片段,而每一个片段都会创建一个小的物理文件。这些小的文件会保持层级结构的关系。在项目浏览器中仍然可以见到一个项目的层级结构。您需要回到根模型中,并只须打开那些需要的片段。在您执行存储库操作,载入模型,或者在源代码控制下工作时,打开更大项目的一部分时会更快。如果模型文件非常大,片段也可以防止文件层次上的冲突。

按照以下的方法来创建一个模型片段:

  1. 右击 RTE_UML_Java5 中的 itso 包,并选择 Refactor > Create Fragment。
  2. 为模型片段保持默认的名字不变,并点击 OK图 26)。
向导包含了文件名与父类文件信息
向导包含了文件名与父类文件信息

图 26 的大图

  1. 点击 OK 以检出模型项目。
  2. 在项目浏览器中展开 itso,并右击 itso.ad.bussiness.ejb.model. 之下的 SavingsAccount
  3. 从内容菜单中选择 Refactor > Create Fragment,并将片段命名为SavingsAccount_ModelFragment.efx。
  4. 点击 OK 以向源代码控制添加新创建的片段。
  5. 保存模型,并检入模型与片段。

Java-to-UML 转换(在片段化 UML 模型中进行 Java 元素的可视化融合)

本部分讨论了怎样合并片段化 UML 模型元素。首先,您在源代码中所做的变更,对应于模型片段中的 UML 元素。然后您会运行 Java-to-UML 转换以激活可视融合特性。

按照以下方法来合并片段化 UML 模型元素:

  1. 打开 PiggyBankJavaPrj 之下的 AccountInfo.dnx

现在您可以通过 Java Visualizer 来更新源代码了。

  1. 右击图上的 SavingAccount 类,并选择 Add Java > method

接着 Create Java Method 向导就会打开了。

  1. Name 区域中,输入 transferMoney。保持其他区域的默认设置不变,并点击 Finish

注意
尽管这个场景只包含了设置方法名,但是向导还允许您去设置方法的可视性、修饰符与返回类型,以及参数、例外、Javadoc 信息以及注释。

  1. 在需要的时候检出 SavingAccount.java 文件。

新创建的方法会添加至类图(图 27)与源代码(代码清单 2)中。

添加至图的方法 transferMoney()
添加至图的方法 transferMoney()
清单 2. Java SavingsAccount 类
package itso.ad.business.ejb.model;

public class SavingsAccount extends Account {

public void transferMoney() {

}
}
  1. 右击 UMLToJava.tc 配置文件,并点击 Transform > Java to UML。这将会对模型实施一次从 Java-to-UML 转换,并打开结构化的合并视图,如 图 28 所示。
方法 transferMoney() 作为 delta 检测出来
方法 transferMoney() 作为 delta 检测出来
  1. 选择或者清除您所做的更改。在本例中,选择新添加的 Java 方法,但是清除掉 Customers,因为它并没有做过变更。
  2. 点击 OK 以保存会话。

注意
现在您只需要检查 SavingsAccount_ModelFragment.efx。嵌套的片段与模型文件不再需要检查。当您在处理处于源控制之下大型系统时,就不再需要嵌套的片段与模型文件。

  1. 点击 OK 以确定检查操作。
  2. 在目标模型中可以看到所有的变更之处(RTE_UML_Java5 中的 Design 模型)。
  3. 保存 UML 模型。
  4. 检入所有检出的 Java 文件、模型与模型片段。

将当前的版本与旧版本进行比较

本段描述并讨论了怎样使用比较与合并特性,去将处于源控制之下模型的新版本与旧版本相比较。您可以回滚到以前的版本,如果当前的版本发生问题的话。

  1. 在 Project Explorer 中,右击 RTE_UML_Java5 项目中名为 Design Model 的模型根文件,并点击 Team > Compare with Predecessor

一个比较合并进程会打开,显示 图 29 中所显示的差异之处。在片段 itso 包中有三处变更。但是,片段中的细节部分并没有列出来,而 itso 包的图标会指示它位于一个单独的片段中而其片段文件却处于关闭状态。

差异之处在于 itso 包
差异之处在于 itso 包

您需要将模型片段的新版本与以前的版本相比较以查看两者之间的差异。

  1. 右击 RTE_UML_Java5 项目中的 itso 包,并点击 Team > Compare with Predecessor
  2. 比较合并进程会启动,如 图 30 所示。
差异之处在于 SavingsAccount 类
差异之处在于 SavingsAccount 类

比较合并进程中右边和左边的窗格,显示了 ModelFragment_1.efx 及其先类的当前版本。两个版本之间的差异在于 SavingsAccount 类。但是,它位于嵌套的片段文件中,但是您不能看到这些细节的信息。

  1. 右击 RTE_UML_Java5 项目中的 SavingsAccount 类,并选择 Team > Compare with Predecessor。
  2. 比较合并进程会启动,如 图 31 所示。
不同点在于 transferMoney 方法
不同点在于 transferMoney 方法

新的方法 transferMoney 会添加至当前版本中的 SavingsAccount

总结

本文讨论了使用 ClearCase Remote Client for Eclipse 源代码控制之下对 Java 转换的应用。Rational Software Architect 家族的产品都包含上述的这些特性,可以促进采用模型驱动开发。本文还演示了对源代码控制下的大型模型使用模型片段的好处所在。您还可以参考下面资源部分中所列的文章,以及软件的在线帮助部分,以得到更多的信息。


下载资源


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=631953
ArticleTitle=使用 Rational Software Architect 与 ClearCase Remote Client 的双向工程场景
publish-date=04142010