技术开发 频道

使用AJAX技术在浏览器端和RTC集成

【IT168 专稿】

    本文所述观点和方法只代表作者个人。所提供的方案或软件是“AS-IS”。

    问题和需求

    大约一年前,我所在的开发团队正式开始采用敏捷开发过程,并采用Rational Team Concert做为我们的管理系统。Rational Team Concert是一个非常全面和先进的软件开发管理系统。在我们团队逐步增加各种敏捷开发实践的过程中,RTC都提供了非常好的支持。但是由于我们开发的项目十分复杂,涉及到许多分布在世界各地不同团队的协作,而RTC服务器的管理和设置无法满足我们团队的一些特殊要求。本文主要介绍我们遇到的两个具体问题和解决方案,希望对您有所启发。

    根据我们项目的特点,我们选取了CruiseControl做为持续集成的工具。但是却发现我们的RTC目前没有设置和构建服务器的集成。开发人员无法从RTC中了解到项目构建的状态。另外,在RTC中可以浏览一个工作部件的相关部件,但是只能看到它的父母和孩子部件,无法回溯到最上层的节点。而在我们的项目中,部件的层次比较多,手工寻找出某个工作部件的出处需要好多步。

    技术背景

    由于我们团队无法对RTC服务器进行设置或修改,为了解决以上两个问题,我们只能从客户端入手。幸运的是RTC提供了REST风格的Web服务,只要了解了它的细节完全可以完成一些特殊的要求。由于我们的开发人员大都使用FireFox浏览器,我们决定开发一个FireFox的插件。由这个插件根据用户的输入,发送Ajax请求到RTC服务器。而插件的开发则采用了编译后的GreaseMonkey的脚本。GreaseMonkey也是一个FireFox的插件,它使用大家喜闻乐见的javascript做为开发语言,提供的API更让用户可以方便的开发自己的插件。为了更好的了解RTC Web服务的细节,我们还使用FireBug调试器来分析协议的细节。

    RTC服务器、安装了GreaseMonkey和FireBug插件的FireFox浏览器、和一个顺手的文本编辑器,这就是所有我们需要的工具。下面让我们一步步来解决问题吧。另外,我们的插件被命名为“Jazz Sidearm”。

    解决方法详述

    对于CriuseControl的集成,十分简单。因为,CC提供了一个Web界面,它的协议十分朴素。打开CC的主页,提交一个构建请求,从FireBug中可以看到一个编译构建请求的HTTP细节如下:

    var buildurl = "http://"+hostandport+"/invoke?operation=build&objectname=CruiseControl+Project%3Aname="+project;

    buildurl:是我们要发送的GET请求

    hostandport:是CC服务器的主机名和端口

    project:是需要构建的项目名称

    对于RTC就相对复杂一些了,首先我在Jazz论坛中找到有关工作构件的Web API好像是“IWorkItemRestService”。然后再用浏览器打开一个工作构件的孩子节点,从FireBug的所有网络通信中果然找到了它:

'https://'+window.location.hostname+':'+window.location.port+'/jazz/service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/workItemDTO2?includeHistory=false&id='+node,

    window.location.hostname/port:是RTC的主机名/端口

    node:是要查询的工作构建号码

    这个请求的返回格式是SOAP,虽然不是大家喜闻乐见的JSON。但是人类还是可以读懂的。总之,它包含了我们需要的信息:工作构件的所有父亲和孩子。所以我们只要递归的调用这个请求,就可以得到它所有的长辈了。

    由于我们对界面的要求不高,所以将两个功能放在一个窗口中,用一个按钮来控制它的显示和隐藏。当用户打开一个RTC页面时,插件动态将按钮插入页面顶端。

    用户就可以在浏览RTC页面的时候,进行CC构建操作或查询某个工作构件的树结构了。

    我们先按照GreaseMonkey的要求,开发Jazz Sidearm,然后用编译器生产独立的FireFox插件发布给每个人。

0
相关文章