SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6444|回复: 1

[推荐] 使用定制技术领域扩展拓扑编辑器

[复制链接]
发表于 2011-9-21 14:25:16 | 显示全部楼层 |阅读模式
本帖最后由 技术狂人 于 2011-9-21 14:48 编辑 " V- w+ `* l3 A8 h9 K7 P- T( [

" q4 T9 N9 e9 ^/ a5 o% Z2 ~7 C- B) C引言
4 \8 l/ [. r; @. d  F5 s: C$ ^! vIBM® Rational® Software Architect 中包含的部署结构工具,随着一系列预定义的技术领域一起发布,以支持程序部署的规划。由于今天硬件、软件及介质巨大的数量,对可扩展平台的需求与日俱增。
/ j! x9 i7 K/ ]/ v/ j& i6 a; C扩展可用单元的一种简单方式,是复制并重命名通用单元,例如 Generic Software 单元。如果拓扑编辑器只用于部署建模,而且不需要创建对模型拓扑的进一步转化,那么这种方法已经足够了。但是,如果方法拓扑成为其他转变的基础(例如,配置文件或者安装脚本),那么这种方法就不够了,因为拓扑的结果 XML 代表太过通用,而扩展的元素也只能为命名习惯来识别,这可以是模糊的,而且不够强大。为了获取系列拓扑中的 XML 类型,您必须在平台中创建一个规范的域。拓扑域生成工具箱提供了一种直接的方式,来在拓扑文件中创建带有 XMl 类型的定制技术领域。
+ C+ m5 p1 i; O) x在本文中,我们将会呈现一幅真实世界的场景,并展示为拓扑编辑器使用扩展机制的简单方式,这使得您可以快速定义拥有 XML 类型的技术领域。
4 I( B! j6 r% b% B$ q1 ?' [7 j
5 X' Q8 ^+ Z, j. Y
. W5 B- h6 f; N5 d
+ e9 ~# G) c% i
扩展部署结构平台( d7 ?9 K$ W% g% r4 T7 N* a' u
本文的总体场景是为 MySQL 数据库规划一个程序部署,这不是 Rational Software Architect 工具集所提供的一种域。这些域包括 DB2、Derby、以及通用的数据库单元,但是没有 MySQL。( ]! y# c8 h  A( [$ C
创建新类型单元的一种方式是复制一个已存在的单元,并给其起一个能够表面不同类型单元的标题。例如,您可能重命名一个通用数据库单元,以使其看起来是一个 MySQL 数据库,如图 1 所示。
& |* }4 \% L# i: F, ]0 e% _7 ?1 V! I5 h- r& L$ `9 J/ C
图 1. 重新为已存在单元换标签来创建新的单元
4 Y7 R- B, p4 M& c2 g5 S9 A / n* B% a" i' k( `# N
$ y7 m5 ?( C2 E6 r& u
但是,该策略会创建一个单元,仅仅像是 MySQL 数据库构件;单元本身会保持原始单元的类型与属性。您可以对单元作出更改,以指示它的不同,例如对单元应用形式或者外观,但是这些更改都是很肤浅的;单元类型并没有得到更改。* }0 n  C2 c  v/ S1 ]8 e, f" t3 l
建模一个新类型单元的更好方式,是创建一个拥有特定软件构件属性的 MySQL 数据库系统,并确保它对新类型的最大重复使用能力,您可以权衡可得到的已存在模型结构。
# ]" W. n0 F4 G! ]' j为了使用您自己的技术领域来扩展部署结构平台,您可以按照下面的步骤进行操作:
6 r% y- q. c- Q% K7 v+ O
  • 安装拓扑域生成工具箱。
  • 为新技术领域创建一个 XML 方案定义。该方案定义定义了新技术领域想要的元模型,包含了域中可得的单元及功能类型。
  • 以 IBM Rational Software Architect 可以使用的方式生成插件代码。& l1 Q* a- P# Y5 A7 M
前提条件7 m! n8 f5 S( @' X) V. J: R1 }
本文假设您对拓扑以及部署结构工具有一个基本的熟悉。对于这些问题的入门性资料,您可以查看 参考资料 部分。2 D3 Q6 y$ T$ o! A! i. ?
安装拓扑域生成工具箱& s1 F2 b: n" S9 s
  • 从 Resources 部分中下载拓扑域生成工具箱,并提取出“zephyr-sdk.zip”文件。该文件包含有一个您必须安装到 Eclipse 工作台之中的特性。
  • 从工作台的菜单栏之中,点击 Help > Software Updates
  • 在软件更新和 Add-ons 窗口之中,切换至 Available Software 项,点击 Add Site,点击 Local,并切换至您提取 SDK 特性的目录之中(见于图 2)。* T6 S$ T) X' K7 [1 o
# L: f' A( V6 R2 g9 E* o1 ^2 b
图 2. 添加拓扑域生成工具箱更新站点
9 L$ ?& r2 J* M4 s' M5 q, F
. ?6 n! W. d3 ?1 o7 e8 \5 m9 {8 x, N8 I4 V8 s" X! r1 _. p4 o5 @: R
  • 选择域生成特性然后点击 Install
  • 完成安装向导中的过程并重启工作台(见于图 3)。
    6 U9 l$ b0 M$ R
8 E0 W+ C& N6 p& L
图 3. 安装域生成特性% w1 U# G- X* i
  X8 Z  @4 t) P1 ?  }6 Y- V. f
+ g, m9 x1 ], [8 a! v6 @6 H3 B: f/ z8 |


8 G# H, H/ `7 y, y9 B0 U% U* j3 t# `7 ]3 w; ?
# R$ l1 A, L. A8 p4 y
创建域扩展: v& _) G" n) O  s3 w; I& T* w
Eclipse 项目中包含有定义域的文件。稍后,本文向您展示了怎样包裹该项目,以与那些也想要使用通用域的其他人进行共享。2 y; J. K# G9 J3 @. h3 B. c) ]
  • 为了使工作台为创建域扩展做好准备,您可以切换至 Plug-in Development 视角,并激活 XML Developer 功能。您可以点击 Window > Open Perspective > Other 并双击 Plugin Development。然后点击 Window > Preferences; General > Capabilities,选中 XML Developer 复选框,并点击 OK
  • 在 IBM Rational Software Architect 中创建一个空白的项目(File > New > Project; General > Project)并将其命名为“org.example.mysql”。
  • 向新项目添加一个名为“model”的文件夹,并在名为“ecore”和“schema”的“model”之下创建其他两个文件夹。这就是我们模型结构的位置。现在项目如图 4 所示。2 p+ H& t3 H0 h- N

4 M0 G3 x7 X  e& ~3 }- @! t图 4. 初始的项目结构5 b' h  q* L! ~; E  i- ]+ q

0 ], Z) P" N3 z6 Z  K
1 M, X" W. [* j9 @+ ]$ |. e; U  ~
  • 在“schema”文件夹之中,创建一个新的 XML Schema Definition,这就是域扩展的起始点,它包含了技术领域扩展的初始模型元素。
  • 右击“schema”文件夹并从菜单中选择“New > Other”。
  • 在 New 窗口中,选择 Example EMF Model Creation Wizards > XSD Model。(如果您不会看到 Example EMF Model Creation Wizards,那么您可以在向导的底部选中 Show All Wizards 复选框)。
  • 点击 Next 并将方案文件命名为“mysql.xsd”然后再次点击 Next。(如果您选中了 Show All Wizards 复选框,那么就会出现一个弹出窗口,问您是否想要激活 Eclipse Modeling Framework 功能;如果您看到了该窗口,那么您可以点击 OK)。
  • 在接下来的对话框中(见于图 5)中,为 XSD 模型指定初始的设置。在这里,您可以将 Target Namespace Prefix 设置为“mysql”,并将 Target Namespace 设置为 http://www.example.org/deploy/mysql/1.0.0/。目标名字域为 XML 方案文件及其域扩展定义了独一的标识符。
  • 点击 Finish。 创建了 XSD 文件,在工作区中打开了 XSD 编辑器。
  • 选择编辑器中的 Source 项以在文本模式下编辑 XSD 的内容。- Z8 J- z2 b0 G2 c6 e8 U1 a

" M- {1 M! o) n) E% @图 5. mysql.xsd 文件的初始设置) g4 w' L  p4 Q5 J& R
, Q+ l5 F' x3 k: @/ _" W/ w6 J

# L9 g  @) z7 a3 F; m+ o
  • 为“ecore”和“core”域添加一个名字域,并使用 ecore 属性来注释 XSD 文件,从而编辑如代码清单 1 所示的文件。转化过程需要 ecore 信息,而属性 ecore:nsPrefix 的值稍后将用作域扩展的名字域前缀。名字域“core”引用了拓扑编辑器的基本元素定义,稍后将需要它来获取您自己的单元与功能。为了访问 core 方案的元素,XSD 导入声明提供了它的位置。+ Q# b. C% {) f, _- {# [

5 T# E, x! J% Z  z7 j& _% E清单 1. 域扩展的初始 XML 方案文件
; e. a! o3 T! s/ p" Q) j8 V9 G6 L6 N; \: k

3 z4 @; N. S! s2 K6 L" a8 p9 H
" {& g% c- F4 `4 O9 B1 O" D/ ^; z

% {8 D& B4 a) r4 X& J/ P7 }; U
- B5 z0 V) k; Q向域添加一个单元
) o! }! T/ y/ F% a. O作为下一步,您需要定义一个新拓扑元素(在目前的情况下,是一个单元),它代表了拓扑中的 MySQL 数据库,并将出现在拓扑编辑器的配置板上。每一个拓扑元素都需要 XSD 文件中的两个元素:一个声明单元类型的 xsd:element 元素,以及一个定义单元类型的超类和属性的 xsd:complexType 元素。9 ~- ^7 b  E4 ?# L% c3 G: T( l" v
第一个 XSD 元素包含有以下的信息:7 I) `7 N+ u  V0 X, I
  • 新图表元素的名字。
  • 属性 substitutionGroup,指定了新元素拓扑元素的种类,例如一个单元或者一个功能。对于单元,该属性被设置为“core:unit”;对于功能,该属性被设置为“core:capability”。
  • 对类型定义的引用。您可以使用与不止一个单元相同的类型,但是实际上这是为每一个单元定义新类型最简单的方式。
    ' E3 P2 Z' c5 A
MySQL 数据库系统的单元定义如代码清单 2 所示:6 z0 C; K+ @+ c2 V! }& A- h9 l

0 e5 B) \$ b. ?7 P/ {清单 2:单元声明代码片段
9 j/ @- Z2 o' U1 J, t
: ]6 X) `7 {7 h& p2 b$ ~2 L0 D  }5 {" T, m+ E
xsd:complexType 元素之中的类型定义为单元指定了超类。对于超类,您可以引用“core”方案之中“Unit”或者“SoftwareComponent”定义的通用类型,或者您可以引用另一种预定义域中更特定的单元。在后面一种情况下,您必须导入域规格(名字域声明与 XSD 导入声明),所以 XSD 分析器就可以解决引用的元素了。
" }. L7 ]" U9 P9 m1 y+ x& H在 MySQL 范例的背景之下,我们可以从数据库域中已存在单元“DatabaseSystemUnit”中,获取我们的新元素,它定义了数据库管理系统的通用概念。单元类型定义如代码清单 3 中的代码所示:9 T) m" K# h: d) K! f( z% \
; j4 b- O' L6 w
清单 3:单元类型定义代码片段, n7 m4 o2 m  G  |0 L; d. `: f

" p& T" j  l6 U; T  }8 P, L" q3 |* K9 d- R! _9 |, G
这种类型定义引用了数据库域之中的单元,所以您必须为数据库域,从代码清单 4 向 XSD 添加名字域声明以及导入声明。该代码清单片段包含了添加至已存在 xsd:schema 元素的新属性,以及作为 xsd:schema 元素子类添加的新 xsd:import 元素。
9 ?3 Q9 b' a) C
! A2 }% x2 l0 x. E6 h" R清单 4:为数据库域导入声明代码片段
- t2 k- }, k. G& s3 T% p
! v- `0 k1 {' q* ]# a
* U5 x: z% K8 E( h该导入声明引用了数据库域名的名字域以及数据库域方案文件的位置。查看 附录 A 以得到可用域及它们的名字域和方案文件。# u5 C3 \! ?' z. z" g8 h
向您的 XSD 文件添加这些三段代码(单元声明,单元类型定义,以及导入声明),确定单元声明的属性“类型”引用了 complexType 定义的名字。在 complexType 定义中,确定对标签“扩展”的数据域引用使用了获取该类型的正确名字。复杂 XSD 文件如代码清单 5 所示。
4 @+ F0 a* }, V7 l. z) \5 ^7 f  T: M2 a+ e, j
清单 5. 使用通用单元来完成 XML 方案文件
. e2 ~0 m6 v0 K2 T. @6 H) A3 D" Z3 \# y) i0 h  K3 c

' z* L$ w* ~; d- {注意: 按照习惯,单元名拥有前缀“单元”以及一个可识别的字符串。在这种情况下,单元被命名为 unit.MySQLSystemUnit。0 f6 h% H# Y+ _4 b9 f% l- w

# C7 `1 G3 q4 B, @# V" j  y. R

; j- u% Q, U* f4 z' W( y6 L9 r& T0 J1 w6 |  S
向域添加一个功能+ E* \! {7 y' T5 S! C( }, ]
为了完成 MySQL 范例,您可以向 XSD 添加带有三个属性(Version、Port 与 MaxAllowedPacket)的功能。拓扑编辑器中使用功能定义,来代表单元可以向其他单元提供的功能。+ y. ^1 G, O1 A; R3 X8 E; B) S
注意: 向单元类型添加属性是可能的,但是按照惯例,所有的通用属性都位于功能而不是单元之中。+ F" S; R: m3 g& c& Z7 G
功能的定义遵循与单元定义相类似的步骤:) ]4 ^  W0 e4 q' ~. j
  • 添加一个带有属性名字、substitutionGroup 和类型的新 XSD 元素。属性 substitutionGroup 的值必须被设置为“core:capability”。按照惯例,功能的名字以“capability”开始。
  • 添加新 XSD 元素的类型定义作为一个 complexType。在类型定义之中,指定功能的超类与功能的属性。
  • 如果属性或者功能是从其他域中引用的,那么您可以添加相应的名字域并导入声明。
    , i& w5 C; \9 g$ Y- g$ j
代码清单 6 为新的 SQL 数据库系统功能提供了一个代码片段,包括元素声明与类型定义。5 u' B% N" D( i5 B6 x( ?
/ F1 c, c( h4 y6 k6 A; u1 H% Q
清单 6:功能代码
* f0 Q8 @0 n3 V: z+ w/ {) T
7 r% [1 Z  g, }9 o! C# Q0 p" D! C% L+ ~$ Z! R7 D% h6 }  h# e  J
代码清单 7 显示了添加“capability.MySQLDatabaseSystem”功能时,对 mysql.xsd 文件所做的所有更改。新功能从预定义的数据库域中扩展了已存在的功能“DatabaseSystem”。另外,属性“Port”的类型来自域操作系统(OS),它需要更多的名字域“os”以及 XSD 导入声明。6 F/ K. A4 Y( w7 \8 j
右击 Project Explorer 视图中的 XSD 文件然后选择 Validate,来向 mysql.xsd 文件添加更改,并确认内容。如果确认成功,那么您可以继续进行本文下一部分的操作。如果确认过程显示失败,那么请确认您的代码能够匹配代码清单 7 中的代码。Resources 部分同样还提供了完整的 XSD 文件。
+ Z8 f+ i" q" d/ @% G2 P6 g, x/ E$ S5 w" D1 l% ]1 t
清单 7. 带有新单元和功能的完整 XSD 文件
# X9 v# \* H' x/ x  x+ b; V0 e  S( O) G7 \/ d
6 N* l4 A' }5 J+ a. X3 O* w8 H' x
您可以向 XSD 文件添加尽可能多的单元与功能类型。当您完成添加新的拓扑元素时,现在就是时候将 XSD 文件转化为一个拓扑编辑器可以使用的域扩展。  E- I- `, ~% B9 k8 j6 ]0 N5 i

* n% H, E6 \- F- ]+ X& Z

. s# g/ Z( _; Q7 p, Z6 e8 t  W$ }5 K
生成域扩展' P/ i$ ]: v# n. \/ C
在这个部分中,您要从 XML Schema Definition 中生成一个 Ecore Model 及一个 EMF Model(也叫做一个 genmodel)。从 genmodel 中,您可以为域扩展创建插件代码。
8 Q& G& t  F! S2 L" D
  • 右击 Package Explorer 视图之中的 mysql.xsd 文件,并选择 New > Other。这样“New Wizard”就会打开了。
  • 点击 Eclipse Modeling Framework > EMF Model 然后点击 Next
  • 在接下来的对话框中,名为“New EMF Model”(见于图 6),选择“ecore”文件夹,并确保 genmodel 的文件名被设置为“mysql.genmodel”。
  • 然后点击 Next6 |5 B3 n  a# l+ {

# ~# g: o% Y" h) c$ W图 6. 为 genmodel 编辑名字与位置8 @; ]1 ^" n- G

8 d2 {- U6 f+ k. v5 R/ e# ?9 j. x4 J$ i; e4 ]8 Z$ F- `
  • 选择 XML Schema 模型导入器并点击 Next
  • mysql.xsd 文件会自动出现在文本区域“Model URIs”之中。如果不是,那么您可以选择 Browse Workspace 并选择您的 mysql.xsd 文件。
  • 点击 Load 以启动 XSD 文件的导入。
  • 如果 XSD 文件没有包含任何错误,所以 Next 按钮就处于激活状态;点击该按钮以继续操作。
  • 在接下来的对话框中,您可以选择根包以及尚未导入的包:在对话框的上面表格中,选择“org.example.mysql”包。在下面的框中,选中所有引用的包(见于图 7)。
    + i% t) G5 k  g. \3 C2 Y) A, M

3 N8 o2 c1 N) b; T6 T5 T* U( \图 7. 完成的 Package Selection, @( L4 e1 K6 Z- ~

+ ~% U. a1 {& ?# l6 b- [. A3 }+ ~- v( q) ^2 i0 m
  • 然后点击 Finish。 在项目的“ecore”文件夹中汇创建一个 mysql.ecore 文件及 mysql.genmodel 文件。
  • 双击“mysql.genmodel”以在 genmodel 编辑器中打开文件,并选择模型的顶部根模型。
  • 编辑 genmodel 文件的属性,并指定以下的属性,如图 8 所示:
    / F' c# D4 ^  c! ]! H: m. J
    • 将“Compliance Level”设置为“1.4”
    • 将“Non-NLS Markers”设置为“true”
    • 从“Edit Directory”中删除“.edit”;该字段的新值是“/org.example.mysql/src”。
    • 将您所做的更改保存到 genmodel 文件之中(Ctrl+s)。* v( j  W9 E! L/ }# ^% W- C

" K$ w- w- f) C; `4 Y5 H图 8. 编辑 genmodel 属性7 B7 C; R9 U4 A) D$ B
/ u2 F: F1 i2 d$ `" c

) i( w/ S5 ]7 L3 Y% K
  • 在 genmodel 编辑器中,右击标为“”的顶部节点,并生成 Model 代码(见于图 9),Edit 代码(见于图 10),以及最终的 Topology Edit 代码(见于图 11)。
    / r. g1 Q5 A5 F: S3 G8 g
在 Project Explorer 视图中,您将会看到每一个生成步骤的生成工件。“Model Code”为域工件与域确认器生成了 EMF 代码。“Edit Code”生成器会创建插件基础,以编辑plug-in.xml 的模型,META-INF 目录,并提供作为 ItemProvider 和 EditPlugin 的类。这些文件允许您去创建单元的实例以及拓扑之中的功能。您不需要直接编辑这些文件。
+ Q' @( S8 T7 a) Q" v3 C' w3 ?域生成器创建了一个名为“templates”的新文件夹,具体和概念性的 MySQL 单元的拓扑模板就存储在那么。另外,生成器创建了一个名为“org.example.mysql.ui”的新项目,它包含了图表扩展的插件代码。
% |$ S! c( t' c$ a. i) t: P: V* t$ W; N. Z' J) m2 X
图 9. 生成 Model Code
6 [3 _; z  t, o + ]2 e6 X! [% s- ^  l5 |

0 R6 h  T8 _$ U. r% _. j
0 v& p1 C5 Z3 v7 {图 10. 生成 Edit Code
5 U; V- o$ ?$ p" U# U
% z! f' S& v1 s, A! a. x1 v! _7 |, b, G& P

" q2 V& j6 ~7 e图 11.生成 Topology Code
5 f9 c3 a& L1 \7 T: s
6 l' _1 c" z3 Z. U, l, ~; p& V2 k$ ?1 r


1 j# O: P1 l/ {, c$ z3 Z" H% l" p$ t: M0 E, I2 M
7 }+ {' d6 O2 K. {, m8 F7 I' n
测试运行时的新技术领域
- T  n. i) H. E5 b2 Z* m为了测试新创建的技术领域,您可以在工作台的运行时实例中运行生成的插件。
8 G) s- R8 d% {, V- c从“org.example.mysql”中打开“plugin.xml”文件并点击 Launch an Eclipse application,如图 12 所示。0 P0 s3 B9 a/ t6 p0 \4 C8 Z

8 b- \6 m, a  N6 j& I图 12. org.example.mysql 项目的 plugin.xml
( m# ]! i* ]: m8 j& B
  j  S- B+ l% [5 r! B: a8 J: g3 X& J- K8 K$ [$ o5 ?, `
工作台的运行时实例在新窗口中得到了初始化。: V: G( _8 @, i. N
  • 在运行时实例中添加一个新项目(File > New > Project | General > Project)。并将其命名为“org.example.mysql.topology”。
  • 在 Project Explorer 中,右击新创建的项目并选择 New > Topology
  • 在对话框中,给拓扑起一个类似于“MySQLExample”的名字并点击 Finish
  • 默认条件下,生成域中的配置板条目位于 Middleware 之中。打开这个折叠项,点击 MySQLDatabaseSystemUnit 条目,并将其置于拓扑图中(见于图 13)。: R% |/ a8 A' p( B3 p: s& q3 h8 }
注意: 您还可以使用快速配置板来选择新单元。点击拓扑图并点击 Ctrl+t,一个带有可用单元的弹出窗口会打开。现在您就可以浏览单元,并且可以更快地输入单元名字的首字母了。
0 K) Z/ H8 ~/ R! t, A; F
/ J- X! z6 M) R+ J图 13. 从配置板中选择 MySQLDatabaseUnit
% H1 M7 U- b) W ) s9 Z, f# \) P6 b" `6 @5 g, n

1 t. I! T" c  C: }! {$ _
  • 在将单元置于图表中之后,您可以检查 MySQLDatabaseSystem 功能是否存在以及单元 Properties 视图中它的属性。
    , w, x, o2 b9 S
注意: 如果选项“Window > Preferences; Topology Editor > Unit Appearance; Capabilities and Requirements”得到设置时,您可以选择,直接从单元中访问功能与需求(见于图 14)。
- h7 e" s6 p' l( t- A" z
, {8 O$ [0 ]9 @! j8 Z# O( d$ |图 14. MySQLDatabaseUnit 功能
) y: Z7 O4 A1 N6 z
+ c5 O1 j% x7 z! x  U) B8 G# l' m: m  y7 f! S4 y9 k  a4 i5 s
为了评审带有 XML 类型的已创建拓扑,您可以保存图表(Ctrl+s)并在文本编辑器中打开一个拓扑文件(右击 MySQLExample.topology 然后点击 Open With > Text Editor)。拓扑文件的源如图 15 所示。
: d3 X, A: ]2 E7 w. F' _4 B, J( N
8 l* H6 V  G6 ]' E5 E/ y. G图 15. 带有 xml 类型的 .topology 文件的源代码0 v" r, Y  k; X! T2 w, g* Y
  b- J5 P. @& e8 O# ^+ `7 U. L9 p
, M4 I" \1 M7 C0 q
该源代码显示了 MySQL 单元是分明的类型,并不仅仅是编辑器中其他单元的拷贝。发布者以及拓扑编辑器中的其他扩展,现在可以将这些单元与其他的数据库单元区分开来。  o/ ~- e4 h6 c. C0 o: l4 z
关闭运行时实例(Ctrl+F4)并继续处理本文的下一部分。
& E  i$ T8 r0 \. Q# \, W  f% `

2 [5 O/ ~' e) B7 R8 E+ L. Y3 y$ x# N, M4 h& I2 M
. O* ^$ b# b3 w+ N/ i
配置拓扑编辑器的配置板
( {& i/ b% S: r0 X! D3 D生成过程创建 拓扑模板 ,它是配置板中的条目,该配置板包含有一个或者多个单元,让您添加至拓扑之中。在这种情况下,生成进程会为您所定义的每一个新单元类型创建两个新的模板,一个包含有单元的概念性版本,另一个包含有单元的实际版本。这些模板默认条件下都位于配置板的“Middleware”之中。1 H0 \) d/ U8 j. q/ y
模板的位置是在 ui 和域项目的 plugin.xml 文件中指定的。在 ui 项目中,折叠项(顶级类别)和栈(相关模板的组)得到了定义,它作为拓扑模板的容器。每一个折叠项都包含了私人的模板条目,以及相关模板的栈。每一个折叠项、栈和模板在相同的层级结构下,都必须拥有一个独一无二的标识符。在域项目之中,模板是同绑定的 UI 一起提供的,它包含了一个配置板路径属性,将模板与一个或者更多的折叠项或栈联系起来。如果路径定义无效或者丢失了,那么模板就不会显示在配置板中。
$ {$ d- U' T0 A4 g( S在 MySQL 范例之中,会创建一个新的折叠项,该折叠项包含了 example.org 域的所有元素。在该折叠项中,会包含已存在的 MySQL 栈(由域生成工具箱所创建)。
, _) @+ E5 N* Z+ j" W$ s2 I& K5 ^# J
  • 打开 UI 项目的插件编辑器(双击 plugin.xml)并切换至 Extensions 项。
  • 展开 org.eclipse.gmf.runtime.diagram.ui.paletteProviders > com.ibm.ccl.soa.deploy.core.ui.providers.DeployCorePaletteProviders。如图 16 所示,拓扑域生成器工具箱为 路径 /serverSoftwareDrawer 上名为 mysqlStack 中的 MySQL 数据库创建一个默认的配置板条目(代表了“Middleware”折叠项)。
    4 L8 I0 D( L: j3 W+ W
& ?7 F, X$ R4 ]7 I9 s4 r
图 16. 为 MySQL Domain 生成的配置板条目; F" a$ w# C$ J8 h
: J* d) m; Y; v5 m" b+ l
5 l& D0 o, ^' \
  • 为了展开带有一个通用折叠项的配置板,您可以右击贡献条目 com.ibm.ccl.soa.deploy.core.ui.providers.DeployCorePaletteFactory 并选择 New > entry,如图 17 所示。8 j( ]* W) T( \$ P3 C
! l) F8 f4 N! D, l  T. j" C
图 17. 添加一个新的配置板条目4 q7 r1 G0 l4 L9 G" l* o

3 g  B( I# V! v0 H+ X# l# \' c$ ?1 S7 I( k5 Y4 X7 @
在界面的右边,您可以编辑新扩展条目的细节信息。: n  y8 @9 A1 b' \! s, N4 o* e
  • kind 区域中,选择 drawer 并输入 id“ExampleOrgExtensions”。折叠项作为配置板中顶级层次的原始,它由 path 区域的 ‘/' 指示。
  • label 区域中,为新折叠项的标签指定“example.org Extensions”。假如属性的值仍然是空白的,那么会设置一个默认的值。您可以选择,为新折叠项设置一个描述与图标。
  • 在您输入数据之后,选择条目 example.org Extensions 并点击对话框中的 Up 按钮(见于图 18)。见折叠项定义移动到栈定义之上,以确保插入 mysqlStack 之前来创建新的折叠项。
    & V8 _) O' b% f/ z- i* V. G0 s( a
  R  s1 @$ s9 Z) f( ]  j9 O
图 18. 检查新折叠项位于栈条目(左边)与新折叠项细节(右边)之上
, z' _5 l  [; u) _0 r ( ]% U/ b- N# o. G, {

* P1 o) d0 f1 j; a$ O
  • 接下来的一步是将 mysqlStack 条目与新创建的折叠项条目联系起来。为了完成这项操作,您可以打开 Mysql Stack 条目并将它的 path 属性设置为“/ExampleOrgExtensions”。
  • 保存 ui plugin.xml(Ctrl+s)。( b- I$ E- S3 ^3 |: o/ h1 W+ ~
接下来,您可以更新模板的路径,以指向新折叠项和栈。: g) @; P& l  Y: A  G# ], M
  • 打开域项目的 plugin.xml 文件(并不是 UI 项目),并切换至 Extensions 项。展开扩展点 com.ibm.ccl.soa.deploy.core.domains。域扩展中的每一个模板都定义为一个 resourceType(它包含了关于资源的通用信息)以及一个 resourceTypeUIBinding(它包含了资源的 UI 定义,包含了它在配置板中的位置以及它的标签和图标)。在 resourceTypeUIBinding 之中,属性“path”定义了配置的路径。
  • 对于两个模板,您可以将配置板属性的值设置为“/ExampleOrgExtensions/mysqlStack/”,如图 19 所示,并保存更改。2 B2 g. ?! d% j

# W% _* ~8 z( g8 Y6 Q5 v' `. M/ W- Y图 19. 域项目 plugin.xml 文件的扩展对话框以及属性“path”的添加值8 r! e% t8 ]: `- x" n& J, i' o- U
3 ]% x- U) i, f# H, v

2 _' m$ F* n7 l5 D1 T! P
  • 点击 Overview 项之上的 Launch an Eclipse application,来测试运行时环境之中的新配置。您可以看到 Overview 中新的折叠项以及栈,如图 20 所示。' K/ v( Z- A, j9 |, p+ z

* p( R" k/ F. a$ M. r' |* y图 20. 新 Palette 折叠项: F7 s- P" B4 U& i) j

( m" C; R9 N; W7 N  m7 a1 B6 v8 ~5 p
& U% R* S2 X0 x6 [8 {" w. }您可以添加尽可能多的 Palette 折叠项以及模板。默认条件下,每一个模板只包含有一个单元,但是您可以通过创建带有单元和功能的拓扑,来创建拥有尽可能多单元和功能的模板,将该拓扑保存在域项目的“模板”文件夹中,并创建 resourceType 和 resourceTypeUIBinding 元素,如前面的范例所示。1 a: u$ e, F$ s7 H) J1 E
您还可以向已存在的折叠项添加 Palette 条目;这些默认折叠项列在 附录 B 的 ID 中。9 R# T, P( X( F. s6 y7 B/ \# O

% H+ j' ]9 v8 o. T2 x7 i
导出并安装新域扩展插件1 U: ^5 k5 P7 e1 T$ v, {+ X7 D# c

6 f5 {/ `8 ~( k为了轻松交换创建的插件与模板,所有的插件都可以集合到一个更新站点项目之中,扩展的所有用户都可以访问该项目。一个更新站点由一些特性的集合体组成,而特性本身由安装在一起的插件组成。对于 MySQL 范例,更新站点将会提供一个特性,它包含了域和 UI 插件。
, ?+ [' u1 J' R# C1 F在创建更新站点之前,请确保插件档案中包含有域插件的模板文件夹:
4 V- e5 E4 z7 H
  • 在插件编辑器中打开域插件的 plugin.xml 文件,并切换至 Build 项。
  • Binary Build 部分中,请确保“templates”文件夹旁边的复选框被选中了。
  • 保存更改(Ctrl+s)并关闭编辑器(Ctrl+F4)。6 d- j% M7 o' f2 Z2 V- W% b2 @
创建一个新的特性,以包含域和 ui 插件:
7 H+ h6 c1 |8 h: H1 _: B: X
  • 创建一个新的 Feature Project(File > New | Plugin Development > Feature Project)。
  • 在如图 21 所示的对话框之中,为项目输入一个名字,例如“org.example.mysql.feature”,给 Feature Name 起一个“MySQL Feature”之类的名字,然后点击 Next
  • 在接下来的对话框中,选择插件以包含到特性之中(见于图 22)。在现在的情况中,选择两个 mysql 插件(org.example.mysql 与 org.example.mysql.ui)的复选框,并点击 Finish
    ) q  I: e0 v( v; V/ F) T
新项目会得到创建,而 feature.xml 编辑器会在工作区中打开。- B( Z% w- E6 S% o( W/ l: ^

7 ?- e" o3 r9 @图 21. 创建一个新特性项目
* S2 b* g2 i' n9 H, c9 |/ c 2 F4 Q& H" @' ]& \2 {

7 m- B% G/ ]8 A; |
, i7 X3 c& q- A# V图 22. 选择插件; J) X( Y. c; ]8 ?  x) k

. J7 f' A9 n: A0 |% A0 h9 C7 d5 G* }  Z7 Y0 H
  • 在编辑器中,切换至 Plug-ins 项并检查两个插件都得到了适当的添加。默认条件下,插件的版本号被设置成了“0.0.0”,它是一个占位符,用于引用插件项目中所配置的最新版本。
  • Information 项上,您可以更改特性(例如特性描述,版权,许可协议和访问的更多网站)的总体信息。当有人在安装特性时,这些信息会显示在“软件更新 ”对话框的前面。
    : q- b7 R- {! b# o" E1 c2 K; V3 r
接下来,创建一个更新网站,以允许人们来安装域扩展:0 N- e/ v0 P. E$ z4 ?% @! g
  • 返回至 Overview 项并在 Publishing 部分中,点击 Create an Update Site Project(见于图 23)。
    ' `* C) o  p  ~: g+ A, b

, w! B4 Q7 a1 c0 g9 J% {图 23. feature.xml 编辑器的概述页面
" U* x* S' u! Q& h! O& a ' a6 `4 {# P. N) P  `0 k
. ]2 c) _+ N2 \
  • New Update Site 对话框之中,输入一个项目名(例如,org.example.mysql.updatesite)并点击 Finish。Update Site 打开时会自动切换至 Site Map 项,从该项中,您可以向更新站点中添加新的类别与特性。
  • 点击 New Category 并输入“MySQL Extension”作为 NameLabel 字段的值。
  • 然后选择类别“MySQL Extension”并点击 Add Feature。一个选择对话框会打开,您可以在这个对话框中添加 mysql 特性(org.example.mysql.feature)。
  • 点击 Build All 以构建插件、特性以及 Update Site(见于图 24)。
  • 最终,您可以从更新站点项目中删除生成的文件“content.xml”与“artifacts.xml”,以避免在新插件的安装过程中产生一条错误信息。9 @+ W/ [: U7 R9 E8 D$ Q# R

  @2 G& e4 u1 i( l& ?图 24. 为 mysql 范例完成 site.xml 的配置工作
. _' X% W' A. L) ~3 y) T  z& y  r
- ^0 `' v5 ^  L( \7 C2 B# E% B$ `. e. v, U' x5 J
现在您可以与想要使用域扩展的其他人一起共享更新站点了。更新站点项目在“features”与“plugins”文件夹之中包含了所有需要的插件与特性,所以当您在分散更新站点时,您并不需要包含其他的项目。按照指南来从更新站点中安装域扩展:  Q+ P0 |! ~, m- l
  • 打开软件安装对话框(Help > Software Updates)并选择 Available Software 项。
  • 点击 Add Site 并选择包含有更新站点项目的文件夹。在软件更新对话框之中,新 MySQL Extension 与 MySQL Feature 显示如图 25 所示。
  • 选中特性的复选框并点击 Install
  • 重启工作台。
  • 为了确认域扩展得到了安装,您可以创建一个带有拓扑的新项目来测试域,并向拓扑添加域中的单元。
    6 e7 ]% j& K( B) s" i0 q

( D+ w0 ^4 }0 j* ?5 c图 25. 软件更新对话框与 MySQL 特性
7 _- c5 Q6 {2 k8 C  ?& n1 \ 7 c, t  @( M) \# f' s, u# R, u8 h

8 e. E. Z2 g# L& V8 t3 x

* ]2 N# l( z' N9 l( e* ]4 \) @) V- ]& P
总结
- R! Q- J6 `" @! g+ w0 DIBM Rational Software Architect 的拓扑结构编辑器是与一系列预定义的单元与功能一起发布的。但是,拓扑的高级用户需要更多的单元和功能,这些单元和功能能够在拓扑文件中被他们的 xml 类型所识别。在本文中,我们涉及到了怎样使用拓扑域生成工具箱来添加定制技术领域。从定义技术领域开始,拓扑域生成工具箱能够帮助您生成拓扑扩展所需要的源文件,并将您的扩展快速集成到拓扑编辑器之中。最终,我们向您展示了,新的单元是如何定制到配置板中,以及插件是怎样在建模者之间交换的。1 W  Y0 E9 B0 b$ h4 W- F( s
* N0 m" y" T2 `3 {

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2011-9-21 14:38:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-4-27 00:18 , Processed in 0.085484 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表