内容


在模型驱动的开发环境中开发和部署方面,第 1 部分

如何打包 Aspect for MDD

如何利用 IBM Rational Software Architect 开发和部署用一个简单的基于 AspectJ 的架构机制

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 在模型驱动的开发环境中开发和部署方面,第 1 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:在模型驱动的开发环境中开发和部署方面,第 1 部分

敬请期待该系列的后续内容。

预备知识

本教程介绍了如何利用 IBM® Rational® Software Architect(以下,Software Architect)在基于模型驱动开发(Model-Driven Development,MDD)的软件开发过程中将基于 AspectJ 的资产打包用于交付。本文假设您已经熟悉了 AspectJ、UML和 Software Architect 的基础知识。

方面(Aspects) 可能是令那些与最基本的新 API 和框架集合(Enterprise JavaBeans™ 或 EJB™、JavaServer Faces™ 或 JSF、Portal,等等)斗争的开发人员害怕的技术。大多数人没有时间学习新的语言和技术, 但实际上,Aspects 会得到经常的使用。Aspects for MDD 框架为 AspectJ 技术的本地专家提供机会来将他们的工作打包并部署到大型的开发人员团队中,这些团队可以在根本不了解 AspectJ 的情况下 —— 通过所创造的模型 —— 来引入他们。

此方法的优点是当确定 AspectJ 的使用适合于特定项目时,架构团队可以生成(或复用)方面库、将其打包并部署到将使用 Software Architect 和 UML 模型来应用他们的整个开发人员团队中。开发人员只需要了解什么时候,对什么应用这些方面。方面中的代码 —— 和 Aspect for MDD 框架 —— 将照顾到所有其他方面。除了该场景,该框架还负责生成扩展并引用方面库的实际的 AspectJ 文件。虽然在必要的情况下,开发人员可以使用这些文件来修改并进行调试,但是一般这些文件是功能完全的,并且不应该触及的。

关于本系列

本系列的进行两篇教程详细地介绍了如何利用 Software Architect 将基于 AspectJ 的资产打包和使用。在第1部分中,讨论基础。为简单起见,选择了一个基本的日志实例。在第2部分中,示范了一个更有趣的实例,该实例展示了如何构建可以使方面的应用程序参数化的定制的对话框。

关于本教程

本教程是为架构师准备的 —— 熟悉 AspectJ 和 UML 建模(UML Modeling) —— 那些人想要将架构机制打包并交付给他们的开发团队,以便他们可以在不需要详细了解底层技术的情况下利用 Aspects 的力量。本教程着重于如何利用 Software Architect 和 AspectJ 在 MDD 环境中打包并部署方面。文中没有详细介绍如何设计并创建基于 AspectJ 的架构机制。这是因为本文假设,阅读本文的架构师已经有了一些现存的基于 AspectJ 的资产 —— 或正考虑创建一些具体的 —— 并且主要关心如何在 MDD 环境中以受控的方式将它们打包并部署到开发团队中。

概括的说,您要执行的以下的步骤:

  1. 创建将在某个目标项目中使用并扩展的抽象的 AspectJ 类。
  2. 以能够被 Aspcets for MDD 框架下载并管理的形式打包并部署方面。
  3. 创建一个简单的测试模型和项目来测试方面。
  4. 审查所生成的配置文件的详细信息,并提供一些部署建议。

目标

在本教程中,您将了解到如何创建一个扩展 Aspects for MDD 框架的扩展点的 Eclipse 插件。该插件之后可以作为标准的 Eclipse 特性或 RAS(Reusable Asset Specification)资产很容易的打包并部署到开发团队。该插件包含新的用于标记 UML 模型的 UML 概要文件的定义。本教程将讨论如何打包、测试并部署资产。

先决条件

在您依照本教程中的步骤之前,您首先必须拥有安装在 Software Architect 中的 AspectJ Eclipse 特性和 Aspects for MDD 框架的核心及向导插件(完全的特性)。前者可以在 Eclipse.org 站点上找到,后者可以利用本教程底部的链接作为 RAS 资产来下载并安装。本教程假设您拥有一些 AspectJ 代码的开发经验,并且您知道如何创建项目、编译类,并将其部署为库。

系统需求

要完成本教程,您需要一台能正常地运行 Software Architect 以及 Software Architect 运行时开发配置的机器。典型情况下,该机器应该拥有 1GB 的内存。

开发方面(aspect)

在您开始打包基于 AspectJ 的资产之前,您首先需要创建它。出于本教程的目的,我们将以一个简单的日志方面(aspect)开始,它除了向控制台打印了一个字符串没干别的。在实际生活中,此方面(aspect)可以做任何事(例如,管理安全标志、提供高速缓存,或审计消息)。然而,对于本教程,重点不在于方面本身,而是在于您可以如何将其打包,以便可以很容易地将其部署到团队中,并且在 MDD 工作的环境中使用。

创建一个新的 AspectJ 项目,并且创建一个称为 ConsoleLogger 的新方面(aspect)。下面给出了此方面(aspect)的源代码。此方面(aspect)只是在调用方法之前和之后向控制台打印了一行字符。关键字 thisJoinPointStaticPart 是特殊的 AspectJ 对象,它包含了有关调用此方面所需要的实际方法类型和签名信息。

列表 1. 简单的日志方面(aspect)
package com.ibm.aspect.lib.consolelogger;

public abstract aspect ConsoleLogger { protected abstract pointcut log ();

	before() : log() { 
		System.out.println("Entering " + thisJoinPointStaticPart ); 
	} 
	
	after() : log() {
		System.out.println("Exiting " + thisJoinPointStaticPart ); 
	} 
}

创建了方面(aspect)之后,将代码部署为简单的 JAR(Java™ Archive)文件。通过在项目的参数选择中设置 JAR 文件的名称来完成。

图 1. 配置 AspectJ 项目来构建 JAR 文件
AspectJ 项目来构建 JAR 文件
AspectJ 项目来构建 JAR 文件

打包一个用于 Aspects for MDD 框架的方面

能够被 Aspects for MDD 框架管理的方面库,像 Software Architect 的所有新功能一样,必须打包为 Eclipse 的插件。插件是用于向 Software Architect 和 Eclipse 中添加功能的主要机制,因此很自然地利用此机制来打包方面。幸运的是,有一个新的插件向导将帮助您创建此插件,并且完成为部署而配置的大部分工作。

在您创建此项目之前,您将需要知道以下信息。信息的第一页与整个库相关联,而第二页只涉及要在此库中打包的第一个方面。

表 1. 与整个库范围相关联的信息
术语定义
方面库名称(Aspect Library Name)这是您的整个方面库的可阅读的名称。这些方面,其中控制台日志是其中一个,一起打包并部署。
概要文件(Profile)将要创建的 UML 概要文件的名称,这个概要文件将拥有 UML 原型以将模型中方面的每个应用程序进行关联。
表 2. 与单个方面的范围想关联的信息。
术语定义
方面名称(Aspect Name)要在此部署中打包的第一个(也许是唯一的)方面的名称。此名称会出现在弹出菜单中,建模者可以在此菜单上选择。
方面类型(Aspect Type)要应用的方面类的完整定名。在此情况下,它是 com.ibm.aspect.lib.consolelogger.ConsoleLogger。
后缀(Suffix)放置在每个所生成的方面类末尾的短后缀。该后缀是确保在所生成的代码中没有命名空间冲突所必需的。
方面 JAR 文件(Aspect JAR)包含了已编译的方面代码的 JAR 文件名。该 JAR 文件将自动地作为使用该方面的任何项目中的库来导入。应该将此 JAR 文件想成目标项目的运行时工件。
原型(Stereotype)将被创建并应用到建模者希望与方面关联的所有建模元素上的原型简称。为了遵照 UML 2 API,此名称应该为一个有效的 Java 类型标识符(也就是说,没有空格或特殊的字符)。另外,由于默认的行为是对于 Software Architect 在所有图中显示原型,所以保持此名称的简短将帮助您在不使图表太乱的情况下来应用其他的原型。
切点(Pointcut)在方面中创建的,为了形成一个具体的方面实例的抽象的切点(pointcut) 的名称。此切点(pointcut) 必须定义在方面中,并且在每次方面应用到模型元素中时在单独的具体方面中生成。
应用到包、类和操作(Apply to Package, Class, Operation)指示此方面是否可以应用于这些分别的元素类型。例如,如果您想要将此特别的方面限定为只应用到操作,那么去掉 Apply to PackageApply to Class 复选框。

要创建一个新的 Aspect Library Plugin Project,创建新的 Software Architect 项目并选择 Plug-in Project 向导(图 2)。

图 2. 调用新的 Plug-in Project 向导
New Plug-in Project Wizard
New Plug-in Project Wizard

如果您之前没启用 Plug-in Development Environment (PDE)功能,将提示您在此处启动(图 3)。

图 3. 启用 Plug-in Development Environment 功能
 Plug-in Development Environment 对话框
Plug-in Development Environment 对话框

输入一个适当的项目名。典型的 Eclipse 习惯是使用 Java 包名(图 4)。

图 4. 指定新插件项目的名称
新插件项目的名称
新插件项目的名称

指定插件项目属性。您可以接受所有的默认值(图 4)。注意 Runtime Library JAR 文件的名称。这是一个 JAR 文件的名字,部署单元将被打包到这个 JAR 文件中。与包含方面本身的相比这是不同的 JAR 文件。该 JAR 文件最终将与运行时产品一起部署,并且因此应该只包含方面代码,不是任何建模框架代码(例如此项目)。

图 5. 设置插件属性
插件属性
插件属性

选择 Aspect for MDD Library 模板(图 6)。此模板将确保创建并初始化该项目的结构和所有必需的文件。

图 6. 选择 Aspects for MDD New Plug-in 模板
Aspects for MDD New Plug-in Template
Aspects for MDD New Plug-in Template

指定方面库的名称,包含了方面代码的 JAR 文件的名称,并且给包含应用到模型的原型的 UML 文件一个名称(图 7)。

图 7. 定义方面库信息
方面库信息
方面库信息

为要打包的第一个方面指定信息。此信息可能是针对许多方面中的一个方面的,这些方面都是用您所创建的插件项目打包和部署的。此项目中的每个方面将具有以下内容:

  • 名称
  • 完整的方面类型
  • 命名方面的具体实例所用的后缀
  • 原型名称
  • 切点规范
  • 标记什么建模元素的类型能够在方面中使用的指示器

此实例为方面类型指定了前面部分描述的简单的控制台日志方面。切点的 名称也在方面中确定。原型应该是帮助指示应用哪个方面的短名。在此实例中,我们只允许使用此方面标记操作(图 8)。

图 8. 定义第一个方面的信息。
方面信息。
方面信息。

如果这是您第一次创建插件,那么会提示您打开 PDE 透视图(图 9)。

图 9. 启用 PDE 透视图
PDE 透视图
PDE 透视图

当创建完新的插件时,将方面打包的工作已经完成大部分了。对于在新的项目向导中指定的一个方面来说,已经定义了所需的扩展点 —— 并且完成了所需的配置文件。现在唯一剩下没做的事情是将运行时方面 JAR 文件的副本放置到插件项目库文件夹中,以便与插件一起打包和部署(图 10)。该文件将作为导入库加入到该方面所使用的每个项目中。

图 10. 将 Aspect JAR 文件复制到插件项目中。
复制到插件项目中的 Aspect JAR 文件。
复制到插件项目中的 Aspect JAR 文件。

对于此简单的实例,这是您要用 Aspect for MDD 框架测试方面所需要做的所有事情。

测试已打包的方面

要测试此方面(以及其包装),您需要创建一个新的 Runtime Workbench 调试配置。这是测试并调试 eclipse 插件的唯一方法。运行时配置实质上是 Eclipse(Software Architect)外壳的新实例,是一个在调试模式下运行的 Eclipse。要创建新的调试配置,在主菜单中选择Run > Debug(图 11)。

图 11. 选择调试配置菜单项
调试配置菜单项
调试配置菜单项

选择 Runtime Workbench Configuration 类型并按下 New 按钮来创建该配置类型的一个新实例。指定一个名称(例如,Runtime Workbench)。您可以有选择地设置 VM 变量和 Program 变量,如图 12 所示,提高调试性能。按下Debug 按钮开始调试。

图 12. 运行时工作台调试配置
运行时工作台调试配置
运行时工作台调试配置

如果此运行时工作台是一个新的配置实例,那么您将见到新工作区的欢迎屏幕(图 13)。您可以随意配置此工作区,并创建新的测试 Java 项目(例如,SimpleJava)来测试您的插件。在此新项目中,创建新的 UML 模型(例如,SimpleDesign),然后在其中创建新的 UML 包。在该包中,创建新的类。此类可以指定一个标准的静态 main()方法(在测试中使用),以及应用和不应用我们的方面的其他方法。图 14 显示出此模型中的一个类图(图中显示有类的签名)。

图 13. 新的 Software Architect 工作区
Software Architect 工作区
Software Architect 工作区
图 14. 简单的测试模型
测试模型
测试模型

将一个方面应用到具体的操作中,在图中或模型浏览器中选择该操作,单击右键并选择 Aspect Lib(图 15)。

图 15. 调用 Aspect Lib 弹出菜单
Aspect Lib 弹出菜单
Aspect Lib 弹出菜单

在对话框中,展开唯一的方面分类并选择Console Aspect。按下 OK 按钮后将用特殊的原型来标记该模型。图 17 显示该操作如何出现在图中。

图 16. 选择方面
所选择的方面
所选择的方面
图 17. 被标记的操作
被标记的操作。

下一个步骤是使用标准的 UML to Java 转换(Transformation )来生成 TestMain 类的代码。由于已经应用了方面,所以还将生成包含所选方面的具体实例的代码的 Aspect .aj 文件。

图 18. 调用 UML to Java 转换(Transformation )
UML 到 Java 的转换
UML 到 Java 的转换

使用 Run Transformation 对话框来选择同样的项目作为默认值来生成代码(图 19)。

图 19. Transformation Configuration 对话框
Transformation Configuration
Transformation Configuration

UML 到 Java 代码的生成创建了两个新文件,TestMain.javaTestMainMyLogAspect.aj(图 20)。

图 20. 更新测试项目
测试项目

UML 到 Java 的代码生成创建了两个新文件,但是 TestMain 类中没有为其定义的方法体。为了提供适合的测试场景,使用列表 2 中的代码。

列表 2. 更新的 TestMain 类
public static void main(String[] args) { 
	System.out.println("Starting"); 
	TestMain main = new TestMain();
	System.out.println( main.sayHello() ); 
	System.out.println( main.sayGoodbye() ); 
	System.out.println( "Finishing" ); 
}
public String sayHello() { return "Hello World"; }
public String sayGoodbye() { return "Goodbye World"; }

生成的方面文件(列表 3)仅仅将带有预编译库的方面与所选操作匹配起来。此代码被设计为不能由开发人员所接触到。

列表 3. 所生成的方面文件
package com.ibm.mytest;

public aspect TestMainMyLogAspect extends com.ibm.aspect.lib.consolelogger.ConsoleLogger {

	protected pointcut log () : call( * com.ibm.mytest.TestMain.sayHello() );

}

您可以通过选择它来测试该类。注意,如果 main 方法不处于方面中或如果您不使用方面路径的话,您只需要将其作为 AspectJ/Java Application 来执行。所以在此情况下,可以作为 Java Application 或方面应用程序来运行。

图 21. 运行测试项目
测试项目
测试项目

在图 22 中的示例输出中,很重要的是要注意对于 sayHello() 方法的调用在没有控制台输出的情况下出现(除了过程的日志),并且,为了看到控制台中显示出消息“Hello World”,您应该等待直到方法 sayHello() 的所有部分完成。合适的测试场景当然包括许多变量。您可以使用 JUnit 测试框架来帮助管理在开发的方面的单元测试。

图 22. 测试输出。
测试输出。
测试输出。

定制已打包的方面

有一些您可以手动调整的可定制的选项。这些大部分都是帮助定位所开发的方面的。新的插件向导模板分别创建了一个标准的 Eclipse plugin.xml 文件和一个名为 aspect-library.xml 的配置文件,这是方面的具体配置信息。首先我们将分析插件配置。

列表 4 中显示了所生成的 plugin.xml 的内容。其中您会找到所需的插件信息以及三个扩展定义。第一个确定的扩展是针对于 Aspects for MDD 框架的。它简单的定义了一个扩展,并指向另一个用于框架的 XML(可扩展的标记语言)文件来进行处理。我们之后将详细地讨论该文件。

另两个扩展是用于管理所生成的 UML 概要文件的。UML 概要文件 用于生成当标记模型和与所选的方面关联时添加到模型中的原型和原型属性(标记的值)的。Software Architect 中的 UML 概要文件 必须使用确定的路径映射来引用,在这种情况下,指向与该插件所安装的位置相关的文件夹。第二个概要文件相关的扩展规范确定了概要文件、它的文件(使用了确定的路径映射)和其他一些有趣的属性。name 属性是对于那些想要明确地将此概要文件应用到模型上的人来说显示在下拉菜单中的概要文件的样子。required 属性 —— 如果设为 TRUE —— 将告诉 Software Architect 自动地将此概要文件应用到所有打开的模型中。最后visible 属性指示建模者是否能看到概要文件。不可见的概要文件对于附加并标记模型是有用的,这些模型通常带有一些对模型的用户来说是不合适或者迷惑的信息。通常您会让所有生成的选项保持原样。

列表 4. 生成的 plug-in.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin
   id="com.ibm.aspect.mylib"
   name="My Aspect Library"
   version="1.0.0"
   provider-name="IBM"
   class="com.ibm.aspect.mylib.MylibPlugin">

   <runtime>
      <library name="mylib.JAR">
         <export name="*"/>
      </library>
   </runtime>

   <requires>
      <import plugin="org.eclipse.ui"/>
      <import plugin="org.eclipse.core.runtime"/>
      <import plugin="com.ibm.aspect.mdd.core"/>
      <import plugin="org.eclipse.help"/>
      <import plugin="org.eclipse.ui.cheatsheets"/>
   </requires>

   <extension
         point="com.ibm.aspect.mdd.core.aspectProviders">
      <aspectProvider
            descriptor="aspect-library.xml">
      </aspectProvider>
   </extension>
   <extension
         point="com.ibm.xtools.emf.msl.Pathmaps">
      <pathmap
            name="MYASPECTLIBRARY_PROFILES"
            plugin="com.ibm.aspect.mylib"
            path="profiles">
      </pathmap>
   </extension>
   <extension
         id="com.ibm.aspect.mylib.extension"
         point="com.ibm.xtools.uml2.msl.UMLProfiles">
      <UMLProfile
            name="My Aspect Library Profile"
            path="pathmap://MYASPECTLIBRARY_PROFILES/MyAspectLibraryProfile.epx"
            visible="true"
            required="false"
            id="com.ibm.aspect.mylib.id">
      </UMLProfile>
   </extension>

</plugin>

大多数实现 Aspects for MDD 框架扩展所需的配置信息在 aspect-library.xml 文件中可以找到。所生成的文件包含针对单个方面的完整条目。在同一个插件中包含若干方面是可能的。通过向配置文件加入其他的 <aspect> 元素来将它们包含在内。您还可以在该文件中指定带有新 <category> 元素的额外的分类。

列表 5 显示出被生成的 aspect-library.xml 文件的内容。

列表 5. 所生成的 aspect-library.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<aspect-library>

    <category name="My Category of Aspects" id="com.ibm.aspect.mylib.category">
        Enter a description for this category of aspects.
    </category>

    <aspect name="Console Logger" 
            id="com.ibm.aspect.lib.consolelogger.ConsoleLogger.id"
            category="com.ibm.aspect.mylib.category"
            type="com.ibm.aspect.lib.consolelogger.ConsoleLogger"
            aspectClassSuffix="MyLogAspect" 
            pointcut="log"
            applyToPackage="false"
            applyToClass="false"
            applyToOperation="true"
            profilePathmap="pathmap://MYASPECTLIBRARY_PROFILES/MyAspectLibraryProfile.epx"
            profile="My Aspect Library Profile"
            stereotype="clog"
    >
        <required-jars>
            <required-JAR name="lib/consolelogger.JAR"/>
        </required-jars>
        <description>
            This is the description of my simple library aspect.
        </description>
    </aspect>

</aspect-library>

每个方面定义必须确定可以应用的并提供一些具体信息的方面(表 3)。每个方面应该至少依赖于一个所提供的运行时 JAR 文件。多个方面可能需要多个 JAR 文件。假如这样的话,它们应该被包含到 <required-jars> 部分。最后,对于每个方面指定一段长的描述,并且在弹出对话框中使用。

表 3. 方面库属性定义。
属性定义
id方面的唯一标识符。使用 Eclipse 的习惯用法,其经常是完整的类名,以 .id 作为后缀实现。
category一个被定义在这个配置文件中的类别 id 的引用,或者也可能被定义在已知的被安装在激活的 IDE 配置中的配置文件中。
type提供目标实现的抽象 AspectJ 类的完整名。这是实际方面的主类,其有一个抽象的切点的定义。
aspectClassSuffix当代码生成时应用于具体 AspectJ 类的简单后缀。该后缀是区分同一个目标 Java 类所生成的 AspectJ 类所需要的。如有超过一个方面应用到 一个 Java 类,那么会有潜在的 AspectJ 类冲突。后缀提供一种简单的机制来区分哪个方面在哪个所生成的类中。
pointcut定义在主 AspectJ 类中的抽象切点的名称。
applyToPackageBoolean(true/false)属性,指示该方面是否能立即应用于整个包。
applyToClassBoolean(true/false)属性,指示该方面是否能立即应用于整个类。
applyToOperationBoolean(true/false)属性,指示该方面是否能立即应用于单个操作。
profilePathmap被 UML 概要文件所使用的到模型的被定义的路径映射。
profile当该方面应用于模型中的一个元素时,应用的概要文件的名称。
customize-class实现 BaseLibraryAspect 的类的完整类名。该类负责处理框架请求。其包含对代码生成过程的定制,及在模型的标记过程中为用户进行额外信息的提示。

添加在线帮助

开发开发人员自动化中的一个常常被忽视的部分是提供适当的在线帮助和指导。Eclipse 环境拥有极好的且容易的方法来提供在线帮助(以 HTML 文件的形式)。强烈推荐您将一些帮助页面添加到解释在正常的开发过程中,怎样及什么时候使用方面的在线内容中。

对于使用 Eclipse 提供规范性的指导的另一个有用的机制,是 Cheat Sheets 机制。Cheat Sheets 是在开发环境中完成具体任务的简短的不连续的规范步骤的说明。它们表现为快速视图窗口中的选择表形式(所以在您执行任务时,它们被保留在视图)。要了解更多关于如何创建 Cheat Sheets 的信息,阅读 Eclipse Platform Plugin Development Guide > Programmer's guide > Advanced workbench concepts > Guiding the user through tasks > Cheat sheet 主题。

部署

部署一个打包的用于 Aspects for MDD 框架的 Aspect 只不过涉及打包并部署 Eclipse 自动化所需要的事情。首先创建 Eclipse Feature 项目,将所有需要的插件组合并一个可部署的包中。这允许您不仅可以包含自己定制的 Aspect 库,还可以包含 Aspects for MDD 运行时。这意味着,新用户可以只安装一个特性来让所有东西运行,而不是要求明确地安装 Aspects for MDD 运行时。Eclipse 特性和插件导入机制足够巧妙,以处理跨多个特性的副本插件,并且有不同的插件版本。

部署单元的另一个形式可以是 RAS 资产。此格式是基于用于资产管理的 OMG 标准的。 Software Architect 可以导出和导入 RAS 文件。RAS 文件也可以包含可安装的二进制插件或特性。最好的是,首先将所有可安装的插件包装成特性,然后将该特性打包为 RAS 资产,因为这样可以使 Eclipse 配置管理人员将来更容易地卸载该方面。

在创建了特性项目之后,您可以将方面导出为 RAS 资产了,选择主菜单中的 File > Export。然后从列表中选择RAS(图 23)。

图 23. 选择 RAS 输出
选择 RAS 输出
选择 RAS 输出

您需要指定被安装的 RAS 存储库服务器,或者指定将资产导出到文件中的文件名。在图 24 中,我们简单地在本地机器上指定了文件名。

图 24. 指定 RAS 文件名
指定 RAS 文件名
指定 RAS 文件名

每个 RAS 资产都包含关于资产的元信息。Export Wizard 只提示最一般且必要的信息。图 25 显示出一些填入的信息。

图 25. 指定 RAS 分类信息
RAS 分类信息
RAS 分类信息

最后,特性需要作为可部署的特性导出。另外,资产只包含项目源,让开发人员手动地在本地机器上编译并安装。图 26 显示了如何将该特性标记为可部署的。

图 26. 指定二进制安装的特性
二进制安装的特性
二进制安装的特性

当完成 Export Wizard 时,结果是 .ras 文件,可以在 Software Architect 工作站上共享及安装。

结束语

本教程介绍了如何采用一种简单的基于 AspectJ 的架构机制,并且用一种能够使其交付到一个开发团队并且用于模型驱动开发过程中的方式进行打包。本教程着重于利用 Aspects for MDD 框架打包并部署一个方面所需要的基本步骤。本系列教程的第 2 部分将展示如何创建定制的对话框来提示关于每个方面应用程序的额外信息,以及如何定制所生成的方面代码。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=163478
ArticleTitle=在模型驱动的开发环境中开发和部署方面,第 1 部分: 如何打包 Aspect for MDD
publish-date=09282006