技术开发 频道

手把手教你定制自己的RTC

【IT168 专稿】

    1. RTC和Jazz概览

    何为Jazz? 我们知道,软件开发通常由一组职责分明的开发人员承担,他们为了一个共同的目标——提交优质软件产品而工作在一起。这是一个相互协作,共同努力的过程。这就好比一个交响乐队演奏一首交响曲,需要乐队的每个成员,既分工明确,又互相关注,默契配合。因此,IBM把其推出的这套用于提高软件开发效率的软件产品称为Jazz。从广义上来说,我们现在所说的Jazz, 是指包括Jazz技术平台及其基于该平台的系列工具在内的Jazz大家族。Jazz技术平台是一个基于团队协作模式,以提高软件开发效率为宗旨,以Eclipse Client端的插件技术、Web客户端的Dojo Ajax技术、Web服务器端的REST Service技术和基于EMF存储模型为核心的、可伸缩、可扩展的平台。目前,以Jazz平台为基础的工具主要有RTC(Rational Team Concert)、RQM(Rational Quality Manager)和RRC(Rational Requirements Composer)。

    RTC是一个针对各种软件开发人员,包括系统架构师、项目经理、软件开发工程师等的团队协作开发平台。它覆盖整个软件开发生命周期,提供对包括过程管理,以敏捷开发技术(如Scrum和Eclipse Way)为模板的项目计划、构建管理、源码版本控制等各个方面的支持,并以work item机制跟踪协调每个开发人员的任务和工作流程。

    为实现其可扩展性,Jazz/RTC提供了众多扩展点。任何一个团队,都可以利用这些扩展点,定制适合自身的RTC。本文即以一个简单的Hello world service插件,详细说明如何在RTC上根据自己的要求定制扩展,并最终将其部署在Web Server上。

    2. 开发环境的搭建

    RTC支持Windows、Linux等常用操作系统,你可以在https://jazz.net/downloads/下载到RTC的各种平台上的各种最新版本。此处我们使用运行于Windows上的RTC2.0 Beta1的Express-C版本(包含Server和Client的All-in-one zip包)。至于各种不同版本的区别,可参考https://jazz.net/downloads/rational-team-concert/betas/2.0Beta1.

    把zip包解开至某固定目录,比如c:\jazz。zip包的结构如下: 

    我们在本例中主要用到的是RTC客户端和服务器端,至于其他工具,比如系统构建工具、配置管理工具等,将在其他文章中论述。

    为开发需要,还需下载如图1所示的三个源程序包。把这三个源程序包解压到c:\jazz\client\eclipse目录下。解压后的目录结构如图2。

    图 1

    图 2

    这时,您的开发环境已基本设置完成。但是,在进入下一步之前,您还需要进入preference->plug-in development->Target Platform, 确保您使用的Target Platform包含Jazz Server和Junit Test插件。如图3。

    图 3

    最后,进入c:\jazz\client\eclipse\,运行TeamConcert.exe启动RTC客户端。OK,欢迎来到RTC开发者乐园!

    3. 开发自己的Hello world服务插件

    现在,我们假设有一位用户,需要在创建完成一个项目区域(Project Area)后,自动生成一些特定的工作任务(work item),那么我们有没有办法来满足这位用户的要求呢。答案是肯定的。RTC提供两种方式自动添加work item。第一种是静态方式,即将需要生成的任务添加到process 模板,当项目区域初始化时,其自动分析模板并生成新任务。或者在项目区域生成但未初始化前,直接修改该项目区域的配置文件(项目区域的配置文件是process 模板的拷贝)。使用这种方式,具体的任务参数等是不能根据具体的项目状况灵活变化。第二种方式是动态的,它通过编程方式来生成工作任务,它可以根据不同的项目要求生成不同的工作任务。这种方式需要编写插件来扩展RTC提供的扩展点com.ibm.team.process.client.operationParticipants,并将该插件的ID加入到process 模板的follow-up action中(同样可以在项目区域初始化前将ID加入项目区域的配置文件)。本文介绍的是后一种方式。我们通过一个简单的服务器端插件的开发,详细介绍如何利用该扩展点来添加定制的follow-up活动。

    3.1 第一步:创建插件

    follow-up活动可以是客户端的活动,也可以是服务器端的活动。在本例中,我们示范如何创建服务器端的后续活动。为此,我们首先需要创建一个服务端插件com.sample.hello。 请按下面的示意在plugin.xml中添加OperationParticipant。在完成一个指定的operation后,系统会调用定义在operationParticipant中的参与者。

    这里,我们定义了一个com.ibm.team.process.server.initializeProjectArea operation的参与者,该参与者会在Project Area初始化活动结束时被调用。注意:参与者id会在后面的Process Template的follow up action中被引用。

    由于我们定义的是一个Server端的活动参与者,因此该参与者将作为一个Server端的Service被加入到服务器中。我们还需要添加<extensionService>。在这个元素中,需要指出所有该服务所需要用到的服务。

    接下来,我们创建具体的实现类com.sample.hello.process.service.internal.InitHelloWorkItem(见附件1),该类必须是com.ibm.team.repository.service.AbstractService。

    函数run(…)实现本服务。它首先获取所需要的服务实例,然后逐项获取创建work item所需的team area, category, worktiem type等,并将它们赋到新创建的work item中。最后保存该work item.

    3.2 第二步:启动Jazz服务

    RTC eclipse客户端内置Jetty服务器,可用于系统调试。有关详细的服务器启动过程,可参考https://jazz.net/wiki/bin/view/Main/JazzServerRunAndDebug 。简单地说,我们需要一个服务器启动脚本hello.launch(见附件2),我们把它存放在插件com.sample.hello中。右键选中该launch文件,选择Run As->hello启动服务器,确定服务器启动成功。见图4。

    图 4

    3.3 第三步:创建存储连接(repository connection)

    在Team Artifacts视图,建立一个新的Jazz repository连接。URI指向刚才启动的服务器,用户名和密码都是ADMIN。

    图 5

    接着,创建一个项目区域(project Area)。初次创建项目区域时,需要首先deploy系统预置的 process template。在这里,我们选择Eclipse Way模板来生成项目区域。如图6配置该template的follow-up action。

    图 6

    3.4 第四步:调试

    在项目初始化过程中,可能由于程序错误而中断,这时,可以在console视图,键入close关闭Jazz 服务器。 然后修改程序,加断点,使用debug方式重启服务。右键选择新创建的项目区域并点击"初始化"菜单项,之后程序就会进入到该插件。

    最后,调试成功,项目区域初始化完成,你会发现已经有一个名为hello world的工作任务(workitem)自动加入到了项目中。

    图 7

    4. 部署Hello world插件

    通过上面的步骤,我们已经开发完成了一个新的插件,但是,万里长征还剩下最后一步:部署。下面,就介绍如何将其部署在一个合适的application服务器上。

    由于RTC包内置了Tomcat服务器,我们就以如何将这个HelloWorld插件部署在Tomcat上为例。

    RTC提供了一种provision机制,使您不需要修改jazz.war就可以轻松部署您的插件。由于RTC的provision 服务会扫描位于provision_profiles目录下的配置文件,并且加载配置文件中指向的update-site目录中的plugin。因此,我们可以通过创建新的update-site和其对应的profile文件的方式来部署HelloWorld插件。具体步骤如下。

  •     创建feature plugin

    新建一个如下图所示的feature plugin: com.sample.hello.feature,加入plugin com.sample.hello。由于该plugin依赖于com.ibm.team.rtc.server.feature定义的plugin,因此,还应在feature.xml中指定这种依赖关系。

    图 8

    图 9

    图 10

  •     创建update-site

    新建如下图所示的update site 项目feature plugin: com.sample.hello.updatesite,同时创建category: Hello World Component并将创建的feature com.sample.hello.feature加入到该category中。然后选择"Build All"生成update site。

  •     在provision_profiles目录下创建Profile文件

    新建一个profile文件helloworld-profile.ini,输入如下内容。注意url应该是指向helloworld-update-site的实际位置,您也可以使用如file:///所示的绝对路径。这样,插件部署基本完成。 

  •     安装运行

    如果插件用到了数据库操作,需要首先运行repotools -addTables增加新的schema。完成后即可运行server.startup.bat来启动服务。

    5. 结束语

    通过上面的旅行,相信大家对于开发RTC扩展插件有了初步的认识。本文只是揭示了RTC强大功能的一角,起到的也仅仅是抛砖引玉的作用。RTC还附带许多非常有用的工具,比如它内置的构建工具,大大提高了我们的开发部署效率,为"每日构建"、"自动单元测试"等敏捷开发实践活动提供支持。它附带的CodeCoverage工具,可以帮助分析统计单元测试的覆盖率。RTC将使软件的开发工作充满乐趣,相信聪明的您在使用它的过程中,会不断发现新的惊喜!

    6. 参考资料

    https://jazz.net/wiki/bin/view/Main/UsingJazzProvisioner

    https://jazz.net/wiki/bin/view/Main/RtcSdk#API_Examples

    7. 附件

    工程包

    hello.launch
 

1
相关文章