| 下载 Rational® Software Architect 试用版 | 在线试用 Rational® Software Architect |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
使用 IBM® Rational® Software Architect 设计与开发工具以进行模型驱动开发的一个典型工作流程,是创建一个统一建模语言(UML)模型,以代表一个特定的系统。该工具还提供了一些预定义的转换,将 UML 模型转换为任意支持的编程语言。但是,除了使用提供的转换,您可以创建自己的转换,根据您所定义的规则来转换模型。
Rational Software Architect 中的扩展性特性提供了工具,以创建 Java™ Emitter Template(JET)转换,并为输出的生成指定自己的规则。JET 是一种 IBM 所开发的模板语言。通过使用 JET 转换,您就可以快速且轻松地生成基于模板的模型到文本的转换。有了 JET 工具箱,您就可以使用包含文本和 JET 命令(标签)的模板来从一个模型生成文本文件。JET 转换会将文本生成的重复过程实现自动化。
本文将会指导您如何创建一个新的 JET 转换,以创建一个示例的图书馆 Java 项目。
为了适应 JET 技术来创建转换,目标领域专家必须向转换创作者提供一个 Exemplar 项目。Exemplar 项目代表了转换输出想要的格式。最佳实践方式是创建一个 Exemplar 项目,该项目代表了需要输出格式尽可能多的格式。项目必须要导入到 Rational Software Architect 工作区。
本文出于写作的目的,使用一个简单 Java™ 项目(MyLibrary)来作为范例,其中唯一的一个包(Books)中只包含了一个 Java 类(BookTitle)。当您创建并执行 JET 转换时,转换的预期输出会是一个 Java 项目,它包含了一个或者更多的 Java 类。
图 1 显示了本文中所使用到的示例性 Java 项目。
图 1. 示例性的 Java 项目
为了开发 JET 转换,该转换接受一个 UML 模型作为源并以生成一个 Java 项目作为目标,您就必须在 Rational Software Architect 中创建一个新的 JET Project with Exemplar Authoring 类型的 JET 项目:
- 从主菜单中选择 File > New > Project。
- 从 JET Transformations 类别中,指定 JET Project with Exemplar Authoring。
- 将项目命名为
com.test.my.transform。 - 接受下一个页面上的默认设置,然后点击 Next 按钮。
- 从 Transformation Scope 页面中,选择 MyLibrary 项目,然后点击 Finish。
创建的项目包含了 transform.tma 文件,您可以在练习中使用该文件来开发需要的转换。它会在编辑器视图中自动打开,有两个选项卡:Schema 与 Overview。Overview 选项卡(图 2)显示了关于转换的一些信息。
图 2. 带有关于 JET 项目信息的概述选项卡
您可以在 Schema 选项卡(图 3)中进行操作以开发转换输出操作。
图 3. Exemplar 创建项目的编辑器
在第一步,示例项目必须得到分析。它可能包含了您不需要在输出中生成的工件。在我们的范例中,我们不想进行转换以生成 .class 文件。这些类的生成将会在 .java 文件的基础上自动在目标 Java 项目中执行。
您可以按照下面的操作,来从 Exemplar 示例删除 BookTitle.class:
- 在 Transform Authoring 窗口中右击 BookTitle.class。
- 从菜单中选择 Delete。
在图 4 中,最终版本之中的 Exemplar 项目就会显示在转换 Schema 编辑器之中。
图 4. 最终的 Exemplar 项目
现在您就可以开始输入模式(Schema)和输出操作,这样您就可以自动生成转换输出了。
按照下面的方法来指定目标 Java 项目生成:
- 右击“定义转换输入模式以及输出操作”窗格中的 root 条目,并从背景菜单中选择 New >Type。
- 给新的类型起名字为
projectInfo。 - 向 projectInfo 类型添加一个新的名为
my.project的项目。 - 如果您要创建一个输出操作,那么您可以将 .classpath 和 .project 文件从 Exemplar 窗格拖拉到转换输入与输出操作窗中的 my.project 节点上。
- 在转换输入模式与输出操作窗格中,将创建的文件重命名为
.project和.classpath。
现在文件已经添加至“定义转换输入模式以及输出操作”窗格。在 Exemplar 窗格中,.project 与 .classpath 文件节点旁边的图标出现了。这意味着已经为这些元素创建了该操作(参见图 5)。
图 5. 转换输入模式中的 .classpath 和 .project 文件
- 如果在工作区中您没有看到 Properties 视图,那么您可以右击“定义转换输入模式以及输出操作”窗格中的任意添加元素,然后从背景菜单中选择 Show Properties View。
- 向 projectInfo 类型添加一个名为
name的属性。
创建的转换应该非常灵活,这样它就可以为不同的库生成各种名字的项目了。按照下面的操作来实现这种灵活性:
- 右击“定义转换输入模式以及输出操作”窗格之中的 projectInfo 类型,并从背景菜单中选择 New > Attribute。
- 将新属性命名为
name。 - (可选的)右击 name 属性,并从背景菜单之中选择 Edit Exemplar Text。
- 在 Edit Exemplar Text 窗口之中,向名字属性添加名为
MyLibrary的项目(图 6)。 - 点击 Add 然后点击 OK。
图 6. 设置示例文本
示例的项目名会显示在 Exemplar Text 区域下 Properties 视图中(参见图 7)。
图 7. 编辑名字属性的性质
该示例文本字符串可以自动使用运行转换时您为项目所使用的名字来替换。输出项目将会以原模型中指定的用户设定名称生成。
按照下面的步骤来指定,示例文本应该根据执行转换时的用户输入来替换:
- 选择 my.project 项目。
- 在 Properties 视图中,Action Parameters 部分下,右击 Name 属性的值。
- 选择 Replace with model reference(参见图 8)。
图 8. 更新项目名字参数
- 在“Replace with Model References”对话框窗口中,选择 projectInfo 类型的 name 属性然后点击 OK(图 9)。
图 9. 选择“名字”属性
结果,名为 my.project 的项目的 Action Parameter 名字 的值会替换为 {$projectInfo/@name} 标签(图 10)。
图 10. 替换“名字”值的操作参数
现在您就要生成转换操作,以生成项目工件了。
为了对每一个库项目生成一个 Java 文件,需要创建一个输出操作,以及与示例 Java 文件之间的联系。为了实现这一点,您需要向“projectInfo”类型添加一个名为“item”的新类型,并指定 Java 类生成:
- 在“定义转换输入模式以及输出操作”窗格中,右击 projectInfo 类型。
- 从背景菜单中选择 New > Type。
- 将新类型命名为
item。 - 将 BookTitle.java 文件从 Exemplar 窗格中拖拉到 item 类型之中。
- 将文件命名为
myBookTitle.java。
新的 myBookTitle.java 文件现在就可以添加至“定义转换输入模式以及输出操作”窗格了。一个图标会出现在 Exemplar 窗格中 BookTitle.java 旁边。注意,在 Action 部分的 Properties 视图下,您可以为生成添加联系,以及任意生成工件的描述(参见图 10)。
保存创建的模式并更新项目:
- 从主菜单中,选择 File > Save All。
- 在“定义转换输入模式以及输出操作”窗格的编辑器视图之中,右击 root 类型并选择 Update Project(图 11)。
图 11. 从菜单中选择 Update Project
每种类型的文件夹将会生成,包括指定每一种需要文件的 JET 模板(图 12)。
图 12. 生成的 JET 模板
main.jet 模板包含了指定 .project、.classpath 及 myBookTitle.java 文件的标签(图 13)。
图 13. main.jet 模板中生成的模板标签
为了添加生成各种输出结果的灵活性,JET 模板之中的各种硬代码字符串可以随着 XPath 表达式一起更新。这里,我们将会向您描述一些可能出现的情况作为范例,以及推荐的工作流程。
- 在“转换输入模式和输出操作”窗格中,选择 myBookTiltle.java 文件(图 14)。
- 在“操作参数”之下的 Properties 视图中,选择 路径 属性的 MyLibrary/books 值,并选择 “Replace with Model Reference”菜单项。
图 14. 选择使用 Properties 中模型引用替换的字符串
图 15 显示了结果对话框窗口:使用模型引用替换。
图 15. Replace with Model References 窗口
在该对话框窗口中,您可以选择一个已存在的属性,或者创建一个新的属性。这里,我们将会向您演示创建一个新属性,它描述了包名的生成。
- 选择 projectInfo 类型。
- 点击 New。
当您在点击 New 按钮时,“创建新获得的属性”对话框窗口将会出现(图 16)。在这个窗口之中,您可以定义带有从计算中获得值的属性。属性的 名字 字段应该由您,也就是用户来设置。示例性 字段就是对话框激活时您所选择的字符串,默认条件下,相同的字符串会得到写入。对于这里的练习,您可以保持默认值不变,但是,在真实的转换操作中,您就可以使用一个 XPath 表达式来替换它。
图 16. 创建一个获得的属性
- 向“属性名”文本区域添加
pkgDir字符串。 - 点击 OK以关闭“创建新获得的属性”窗口。
- 点击 OK 以关闭“Replace with Model References”窗口。
新获得的属性,pkgDir,会得到创建,并显示在“转换输入模式与输出操作”编辑器窗格之中(图 17)。
图 17. 新创建的获得属性,pkgDir
myBookTitle.java 路径 属性的值会随着生成的获得属性参数一起更新(图 18)。
图 18. 带有替换参数的路径名
转换的创作者也应该提供生成多种 Java 类的能力。
为了支持这一点,您可以为 项目 类型创建一个新的 名字 属性,操作的方式与您在前面为 projectInfo 类型执行的操作相同。对于 myBookTitle.java 文件的 路径 参数,使用创建的属性来替换硬代码的文件名。
- 在“转换输入模式与输出操作”编辑器窗口中选择 myBookTitle.java。
- 在 Property 视图的路径值中选择 BookTitle 文件名。
- 在 Properties 视图的路径值中右击 BookTitle 文件名。
- 选择“Replace with Model Reference”背景菜单项。
- 在“Replace with Model References”对话框窗口中,选择属于 项目 类型的 名字 属性。
结果,硬码路径会使用包含有 XPath 表达式的字符串来替换(图 19)。这就给予了转换用户生成不同名字 Java 类的灵活性。
图 19. 带有替换文件名的路径名
- 保存 创建的模式。
- 在“定义转换输入模式以及输出操作”窗格的编辑器视图中,右击 root 类型并选择 Update Project。
JET 模板也得到了升级。接下来的 XPath 表达式将会被添加至 main.jet 模板:
<ws:file path="{$projectInfo/@pkgDir}/{$item/@name}.java" replace="true"
template="templates/item/myBookTitle.java.jet"/> |
到目前为止,您要使用 JET 创建编辑器来开发转换。现在,当您在生成模板框架时,您应该进一步调节它们,以根据项目的需求来生成转换输出的内容。
这里,我们将会向您演示怎样使用 Rational Software Architect 工具集中所提供的编辑工具。
为了帮助您进行模板编辑,工具会指示可以使用转换工件替换的模板之内的字符串。信息符号会显示在 Project Explorer 视图(图 20)中。当您打开指示的模板时,下一个将会被替换的文本将会得到下划线强调显示。当您将鼠标停留在下划线的文本上时,会显示一个带有建议性操作的帮助字符串。
图 20. 帮助性建议
- 选择有下划线的文本。
- 右击并选择 Find/Replace with Model References(图 21)。
- 在“Find/Replace with Model References”对话框窗口中,您可以选择建议的属性或者其他已存在的属性,或者您可以创建一个新的属性。
对于演示的目的考虑,我们选择了建议的属性,item 类型之下的 name。 - 点击 Replace,然后点击 Close。
图 21. 使用自动生成的字符串来替换名字
模板中选择的文本将会使用该 JET 标签替换:
<c:get select="$item/@name" /> |
此时您就可以使用 JET 标记来替换任意的文本。在附件中示例项目的 project.jet 和 main.jet 模板中(查看 下载 部分),我们要使用该 XPath 表达式来替换硬代码项目名字:
<c:get select="$projectInfo/@name" /> |
注意:
当所有建议的更新都得到执行,且更新的模板都得到保存时,roject Explorer 中所显示的信息符号将会消失。
您创建了一个基本的 JET 转换,现在您就可以执行它了。
为了测试创建的转换,您可以创建一个文本,它包含了转换输入。IBM® Rational® Software Architect for WebSphere® 版本提供了工具,以生成基于 XSD 模式的测试输入文件,该 XSD 模式是在转换创建项目中生成的。按照下面的步骤操作,以生成输入文件:
- 选择 File > New > Other > XML > XML File,然后点击 Next。
注意:
您可能需要选择 New 对话框窗口之中的 Show All Wizards 复选框以得到以下的这些选项。 - 如果出现一个对话框让您这样做时,确认激活功能。
- 选择 com.test.my.transform 项目作为一个容器,输入
MyTest.xml作为名字,并点击 Next。 - 选择 从一个 XML 模式文件创建 XML 文件 单选按钮,并点击 Next。
- 点击 Select file from Workspace 单选按钮。
- 从 com.test.my.transform 项目之中,选择 schema.xsd 文件,然后点击 Next。
- 选中所有的复选框,然后点击 Finish。
- 在生成的 MyTest.xml 文件中输入需要的数据,然后保存并关闭该文件。
图 22 显示了建议的输入文件。
图 22. 建议的转换输入文件
转换已经为执行做好准备了。
- 在 Project Explorer 中,右击 MyTest.xml 文件,并从菜单中选择 Run As。
- 选择 Run Configuration。
- 在 Run Configurations 窗口中,双击 JET Transformation。
- 确定 MyTest.xml 文件作为 Transformation Input 列出来了(图 23)。
- 点击 Run。
图 23. 定义一个测试转换配置
在转换运行时,会创建名为 BookLibrary 的新项目。它包含了在 MyTest.xml 文件中所指定的 Java 文件(参见图 24)。
图 24. 运行转换所生成的文件
Rational Software Architect 工具集可以按照相似的方式使用,以进一步地精化转换输入模式与输出操作。
本文提供了怎样在 JET 模板的基础上定义基本转换的具体指南。这样一个功能强大的用户定义转换可以简化基于资源开发的过程,并帮助实现代码的重用性。
由两篇文章所组成专题的下一篇文章,将会演示怎样使用 Rational Software Architect 工具,来生成特定转换目标域的概述,以及怎样将转换部署到工作区内。
确保您检查过了参考资源部分以得到更多内容。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 示例项目文件 | artifacts04c.zip | 28KB | HTTP |
学习
- 阅读有关 JET 基于模版转换以及 XPath primer,请参见 Strategic Reuse with Asset-Based Development(IBM® Redbooks®,2008 年 5 月)。
- 查看以下相关的 developerWorks 文章:
- 使用 JET 在 Eclipse 中创建更多更好的代码(IBM® developerWorks®,2006 年 8 月)
- 使用 Rational Software Architect V7.0 快速创建功能强大的定制工具(developerWorks,2007 年 1 月)
- 从 Eclipse 网站的 Model-to-Text 项目页面 获取更多有关 JET 技术的信息。
- 查找更多有关 Rational Software Architect 版本的信息:
- Rational Software Architect 标准版
- Rational Software Architect for WebSphere Software:
- 访问 developerWorks 上的 Rational 专区,了解有关 Rational 软件交付平台产品的技术资源和最佳实践。
- 时刻关注 developerWorks 技术事件和 Web 广播,包括各种 IBM 产品和 IT 行业主题。
- 参见 免费的 developerWorks Live! 技术讲座,快速了解 IBM 产品和工具,以及 IT 行业趋势。
- 查看 developerWorks 演示中心,从初学者的产品安装和配置演示,到面向有经验开发人员的高级功能。
- 尝试我们的 基于 Web 的培训课程,您可以在任何地方、任何时间学习。
获得产品和技术
- 下载免费的 Rational Software Architect 试用版。
-
按照最适合您的方式IBM 产品评估试用版软件:下载进行试用,可以在线进行,在云环境中使用,或者在 IBM SOA Sandbox for People 中花一些时间了解如何有效实施面向服务架构。
讨论
- 加入 Rational 开发工具讨论区。
- 加入 developerWorks 中文社区。与其他 developerWorks 用户沟通,关注开发驱动的博客,讨论区,例如 Rational Café 和维基。

