这个由两部分组成的文章阐述了如何为 UML Profiles 生成工具和 UML 形状,从而允许利用 IBM
® Rational® Systems Developer、IBM ® Rational® Software
Architect,以及 IBM® Rational ®Software Modeler 来定制领域建模。这两篇文章中所描述的步骤适用于
Rational Software Modeler 7.0.5 和 Rational Software Developer 7.0.5。
在这篇文章中,您将学习如何从现存文档或从您创建的文档中为元素生成工具。因为将会生成中间文档和代码,您将能够修改这些文档和自定义以下几个方面:
- 出现在下拉菜单 (drop-down menu) 或者面板 (palette) 中的工具类型
- 工具是如何显示的
- 哪些工具的元素将会显示
- 哪些自定义 UML 形状 (UML Shape) 的元素将会显示出来
- 是否显示这些原型化元素 (stereotyped element) 的自定义 UML 形状
如果您愿意编写代码,那么您可以进一步自定义生成的或者默认的 UML 形状。您还可以修改不同的 UML 形状之间的限制条件。当您完成这些步骤之后,您结束时就可以用这些完全自定义化的工具,来为您自己的领域构建元素模型,还可以在图表中显示您的自定义
UML 形状。因为生成的是建立在开源 GMF 层的 Java 代码,这篇文章还将讨论关于如何修改和扩展代码的话题。
如果您对 Eclipse 和 UML 建模有一个基本的了解,那么您将很容易就可以跟随本文进行学习,生成并部署您自己的自定义工具。然而,要提醒的是:您将需要具备一些
Java™ 技术的知识来处理生成的形状文件的大部分定制化过程。
生成工具之前,您首先需要一个概要文件。您有两个选择:
- 如果您想要用一个新的文档开始,就要通过选择 File>New > Other > Modeling
> UML Extensibility > UML Profile 来创建。
- 另一种方式是,将一个现存的文档拷贝到您工作空间的一个文档中去。这样您就可以一直跟随下去,确保添加几个带有元类扩展的类型到您的文档中,正如参考资料中所引述的这篇文章中关于
UML 文档的阐述。
如果您的文档包括非 ASCII 字符,或者如果您希望在这个工具中使用非 ASCII 字符,那么您要确保这个工作空间参数是为 UTF-8
编码设置的。您可以通过选择 Window>Preferences > General > Workspace,再选择
UTF-8 作为 Text 文档编码来实现 (请看图 1)。否则,生成的这些 Java 文档将不会进行适当地汇编。
图 1. 设定这个文本文档的编码
Project Explorer 是查看 Modeling View 中资源的默认方法。
- 在 Project Explorer 中,右键点击这个文档。(另一种方式是,如果您更熟悉 Java 方面的事情,您可以从
Package Explorer 实现。毕竟, 将会生成 Java 代码。)
- 然后选择 Generate Profile Tooling 操作。
图 2. Generate Profile Tooling 行为的下拉菜单
这个向导将在您选择的这个文档和这个工作空间它的位置的基础上尝试构成这些区域。它有助于理解每个区域的所表示的含义:
- 这个应用软件名称就是建模区域的名称,工具就是为它而产生的。这个最初出现在这个文本框中的名称是从您选择的文档名称中挑选的,它可能与概要文件的名称并不一样。如果这个概述的命名十分有意义您就不需要更改它。如果不是很有意义,就重新命名。默认的面板条目(图
3) 和菜单名称将从这个名字中派生。
- 向导中接下来的是项目名称。您可以浏览查询一个现存的项目或者直接键入一个新项目的名称。如果这个项目不是一个
Java 项目(对于 Eclipse 用户,这意味着它不具备 Java 的性质),当这个代码生成的时候它将自动转化。您现在可以仅仅接受这个默认项目的名称。
- 最后,这个默认的生成选项将会生成面板和菜单条目(图 4),而不生成自定义形状文件。
图 3. 样例概要文件的的样例面板条目
图 4. 样例概要文件的菜单条目实例
当不生成自定义 UML 形状文件时,将会使用标准的 UML 形状文件。这并不是很好的选择,因为您的工具的终端用户(它将被看作是域模型),能够通过使用标准的
UML 表示法来产生图表。另外,您不需要为看起来很好的形状文件进行修改。
图 5. 当使用一个未发布概要文件时将会发出一个警告消息
对于这个例子,只需要接受默认选项和点击 Finish 就可以了。(稍后您将学习关于其它向导页面的知识。)几分钟之后,就会生成一个新的项目,并且这个项目将包含代码和您文档的复本。这个新近生成的项目可能不会被部署。
提示:
如果您向左的只是部署一个文档,并且想用一种简易的方法来做,那么这个向导也可以为您做这些工作。当您使用这个向导时,您不必麻烦地创建一个插件,写下所有的
XML 标签,拷贝您的文档。只需要清除 Generation Options 中所有的复选框,然后点击 Finish。将为您创建一个简单的插件项目
,注册路径图和文档的 XML 将会编写在这个 plug-in.xml 文档中, 而且您的文档将会拷贝到一个叫做 profiles
的地址下。您现在拥有一个准备被部署的插件。没有比这更简单的方法了!
当您完成测试之后,这个插件应该像一个标准的 Eclipse 插件一样部署。首先,测试这个生成的工具:
- 要在您的环境下执行一个快速测试,就要通过选择 Run > Open Run Dialog 来创建一个新的配置。
- 在左侧双击 Eclipse Application 来创建一个新的 Eclipse Application
配置。
- 为您的配置键入一个名称 。
- 在这个 Main 标签页中,您可以选择一个新的位置(比如 C:\my-runtime-workspace)。
- 对于 Program to Run,可以保留 com.ibm.rational.rxx.product.ide
的默认设置(图 6)。
图 6. 准备利用 Run 对话框来开始运行您的应用软件
提示:
- 当生成一个仅仅用来部署一个文档的插件时,创建的这个插件将会伴随着标准 Eclipse 插件的特征。
- 在 Plug-ins 标签页下,确保 Launch with 的设置为所有的工作空间和激活的插件。如果您必须选择现在下面仅有的插件,确保插件相应工具的
条目已经被核查。
- 如果您计划修改这个生成的代码,最好在 Arguments 标签页下的 VM Arguments 框中包含
-ea 。有些生成的代码包括函数,因此您可能会发现,启动这个函数将会帮助您更快地跟踪程序错误。
现在开始尝试:
- 点击 Run 启动这个新案例。
- 现在可以通过选择 File > New > Project > Modeling > New
Model Project 来创建一个新模型,如图 7 所示。
- 选中这个 Show all templates 复选框来为您的文档显示与工具相关联的模版。
- 选择相应的模版,然后点击 Finish。
一个模型即将被创建,一个空白的图表编辑器也会将打开。
图 7. New Model 向导
注意观察,工具相应的文档元素显示在这个面板中。将上下文菜单提到这个图表的表面上来,注意现在的菜单条目与文档元素是相符合的。您将发现每个元类扩展的面板条目是为每个造型定义的,同时也是为元类联合和造型联合定义的。已经生成的连接符都遵循着现场的限制条件。也就是说,它们只能按照
UML 规则和工具的规则来连接。例如,您可能不会添加一个 实现 连接器到一个 UML 包中,您也不会在对象之间创建造型联合链接器,并且这些对象也没有运用所期望的造型。
图 8中的例子使用了一个简单的样例文档。通过点击这个面板,我们可以创建定型为 Customer 、CustServAgent ,
以及 Pilot 的 UML Actors。我们还创建了几个用例以及元素之间的关系。我们没有为它定义工具的附加
UML 元素仍然可以通过激活附加性能被添加。您将学习如何简单地来实现它。注意这个连接器只能以正确的方向来添加,并且您不能以相反的方向在一个连接器上加入两个节点。
图 8. 利用面板在这个样例域中建模
提示:
您还可以通过手工对这个模型运用相应的文档来使这个工具得以显示:
- 在这个 Model Editor 中,选择 Details 标签页并点击 Applied Profiles
板块中的 Add 按钮。假定这个 Profile Tooling 向导将这个文档部署到插件中,这个文档将会显示在部署文档的列表中。
- 选择这个文档,然后点击 OK。
当您想要利用现存的模型操作时,这是一个可选择的路径。
图 9. 手工应用这个概要文件
排除故障提示:
如果这个面板条目和菜单条目不出现,核查您的概要工具已经被激活。这些性能可以用来减少出现在域模型中不必要的 UI。一般情况下,这个模型只会对一个域比较感兴趣,这样就避免了混乱,来自其它域的工具就会被默认隐藏。
验证这些性能:
- 选择 Project Explorer 中的模型(而不是图表),然后再选择 Properties 视图。
- 点击 Capabilities 标签页,确认与您的概要工具相应的性能已经被选中。
因此,除了手工运用这个文档之外,您还可以激活这个性能从而使这个工具得以显示。这个默认情况下生成的工具在必要的时候将自动运用这个文档到模型中去。
图 10. Capabilities 属性
- 要激活标准的 UML 工具,先要激活 UMLElement Building Blocks 中的 Components。
当您对您的工具满意后,很可能还想将它部署到与模型中来使用。
对于开发人员来说最简单的方法是,将生成的项目分配到这个域模型中。这个模型也必须通过使用 File > Import
> Existing Projects into Workspace 将这个项目导入此工作空间,然后启动一个新的运行时间工作台(正如我们测试这个工具一样操作)。这是最差的一种方法:丢失一个文件以及插件停止工作。进一步说,需要其它运行时间工作台的例子来运行增长存储的消耗;因此,这并不是我们要推荐的方法。
一个更合理的步骤是,为这个工具项目生成一个 Java Archive (JAR) 文件。这个 JAR 文件包括汇编形式的代码:
- 从 Package Explorer 中选择包含您的工具的生成项目。提出这个上下文菜单,并选择 Export >
Plug-in Development > Deployable plug-ins and fragments。
- 确保只有需要的插件被选中,并且在 Destination 标签页中,键入 JAR 输出的地址目的地。
- (非强制性)在 Options 标签页中,如果您计划自定义这个代码,您会发现它有助于选中包括源代码选项,这样它就很容易可以被调试。
- 点击 Finish。
图 11. 为您的概要工具生成一个 JAR 文件
排除故障提示:
如果失败了,如果您添加了其它插件就把不必要的插件从您的环境中清除。很可能,其他构建者也尝试做出贡献,但是也失败了,就导致生成文件的整个过程都失败。
还有几种可以使用的方法。一种可能的方法是,为您的文件提供模型。这个模型利用文件、导入、插件以及代码片断 将它导入这个工作空间,然后启动这个工作空间的另一个例子。这样就再一次拥有存储的含意。
一个更好的方法是将这个 jar 文件导入到这个产品安装的插件地址中。如果这个应用软件安装在默认地址中,就是寻找地址的位置,根据这个操作系统您可以使用:
- Microsoft®Windows®:C:\Program Files\IBM\SDP\plugins
- Linux®:/home/<username>/eclipse/plugins
如果这个文件被当作产品安装的一部分来拷贝,并且生成的工具也不进行更新,那么就这就是相对非常简单的方法。这个应用软件下一次启动的时候,生成的这个工具就可以利用。
这里没有计划升级生成工具,但是假设没有更新也是不现实的。然而,您所能够做的就是期望更新以及为您的插件分配版本。默认情况下,这个插件版本是从文档的版本得来的。因此,如果您在没有对文档进行变更的情况下更改了您的工具,那么这个版本数字仍然会是一样的。您可以在生成这个
JAR 文件之前通过手工更新插件的版本来克服这个问题。可以这样操作:
- 打开所生成的插件项目中的 manifest.mf 文件。
- 在 Overview 页面上,增加 General Information 版本中的版本(请看图 12)。
图 12. 这个显示编辑器允许插件版本的增加
现在,这个工具下次更新的时候,它只需要被拷贝到正确的位置,并且这个应用软件需要被重新启动。当这个 JAR 文件被拷贝到插件文件时,更新这个显示版本可以阻止冲突
最后一种方法是标准的 Eclipse 方法。
- 创建一个更新站点并在这个站点发布您的插件。
- 选择 File > New > Other > Plug-in Development >
Update Site Project,并按照提示操作。
这个步骤涉及到的面更多信息,请参见参考资源部分的“将插件部署到一个更新的站点。”内容
排除故障提示:
如果这个 JAR 文件拷贝到安装的插件文件夹中,并且这个工具 显示失败,首先要验证插件和正确的版本:
- 选择Help > About Eclipse SDK。
- 点击Plug-in Details,并验证生成的这个插件在列表中 (请看图 13)。
- 如果这个插件不在列表中,利用
-clean 参数重新启动这个应用软件。
- 如果这个插件在列表中,通过选择 Window > Show View > Other >
PDE Runtime > Error Log来核查 Error 日志视图,并核查与这个工具插件相关的错误。
图 13. 确认这个插件已经被适当地部署
表格 1 总结了部署您的工具插件的方法。
表格 1. 为您的工具插件部署方法
表格 1. 表格名称
部署方法 |
正面 |
负面 |
插件项目的手工部署 |
|
- 很容易会失去一个文件,从而导致这个工具不能恰当地执行功能
- 操作更新这个工具可能会混乱终端用户
- 要求终端用户启动工作空间的另一个例子(它需要更多的存储)
- 用户可以轻松访问源和修改,这样工具 就可以脱离多个用户机器的同步
|
JAR 文件的手工部署 |
- 对于工具开发人员来说十分容易
- 如果这个源包含在 JAR 文件中,用户可以轻松访问源代码
|
- 要求终端用户启动这个工作空间的另一个例子(它要使用更多的存储空间)
- 更新这个工具的过程可能会混乱终端用户
- 如果这个源包含在 JAR 文件中,用户可以轻松访问和修改源代码,因此工具可能脱离多个用户机器的同步
|
将 JAR 文件拷贝到这个安装的插件文件夹中(推荐使用) |
|
- 更新这个工具要求将这个插件再次拷贝到适当的文件夹中
|
使用更新的站点 |
- 更新的标准 Eclipse 方法
- 终端用户可以轻松地为概要工具进行更新
|
|
您现在已经学习到如何:
- 针对概要文件的创建工具
- 测试这个生成的工具
- 评价部署生成工具的不同方法
- 部署生成的工具
如果您不希望进一步自定义生成的工具,您会发现这是停止阅读的适当的位置。更多的技术用户会发现这对继续进行第 2 部分,学习如何自定义这个工具很有意义(点击
“系列中更多内容”)。
学习
获得产品和技术
讨论
|