级别: 中级 Zhou Tian Shan, 资深软件工程师, IBM Hu Sheng, 软件工程师, IBM Yin Zhi Yong, 软件工程师, IBM Al Maxwell, 高级软件工程师, IBM Bruce Roberts, 架构师, IBM
2009 年 7 月 31 日 本文介绍 IBM® Lotus® Quickr™ 8.1 中的新特性,即管理控制台,并简述 Lotus Quickr 8.1 的一个新策略特性,然后详细阐述控制台所使用的基于 REST 的服务,您还可以重用该服务改进服务器的管理。
IBM Lotus Quickr 管理控制台对 Lotus Domino® 而言是新的 Lotus Quickr 服务。它提供一个简单的 Web 用户界面,让 Lotus Quickr 服务器管理员可以通过窗口查看 Lotus Quickr 服务器各个位置的活动,以及提供一种方法控制这些位置所消耗的资源。本文介绍这个控制台的功能,并简述 Lotus Quickr 8.1 的一个新策略特性,然后详细阐述控制台所使用的基于 REST 的服务,您还可以重用该服务改进服务器的管理。在了解针对管理的 REST 服务和使用附带的样例代码之后,您就能更好地理解如何使用 Atom 式服务构建控制台,以及如何在自己的服务器管理中重用这些服务。
先决条件
本文假设您熟悉 Lotus Quickr 服务器及其主要特性。如果您具有关于 QPTool 的经验,那就更好。此外,您还应该大体了解 C++、XML 和 Web 2.0 技术。
本文描述的示例应用程序提供一个简单的 C++ 原型,以演示管理服务如何表达一系列 XML 请求-响应消息。每个请求-响应消息都显示实际的管理任务的工作结果,它们能够帮助您理解 Atom XML 格式。在访问管理服务之前,确保您得到服务器管理员的授权。
概述
QPTool 是 Lotus Quickr for Domino 中的一个工具,可以使用参数运行以执行管理任务。它提供 QPTool 命令来完成管理任务,比如生成关于位置和服务器的报告,向管理者或各个位置的成员发送电子邮件,更新 Place Catalog 中的统计数据,以及删除位置和模板。不过 QPTool 也有一个缺点:对于不能直接访问主机服务器的服务器管理员而言,使用它很不方便,因为它必须直接在 Lotus Quickr 服务器上执行。Lotus Quickr 8.1 for Domino 为客户提供一个新的管理工具,即基于 Representational State Transfer (REST) 和 Dojo 1.0 的管理控制台。
Lotus Quickr 的管理 REST 服务的目标是通过最少的工作为用户的管理任务构建协作性更强并且更加健壮的解决方案。这些服务基于开放标准和 Web 2.0 技术。Lotus Quickr 管理服务的设计和实现基于在 RFC 4287 中定义的 Atom Syndication Format RFC 4287 和在 RFC 5023 中定义的 Atom Publishing Protocol (APP)。
根据管理服务中的 APP 设计原则,Lotus Quickr 服务器位置被当作 APP 集合,并且单个位置被当作 APP 资源。这些概念也适用于策略和模板。为每个集合和资源定义对应的 URL,这样只需在 APP 定义的 URL 上调用正确的 HTTP 方法(比如 GET、POST、PUT 和 DELETE)就能在管理控制台中成功完成不同的管理任务。
Lotus Quickr 管理控制台
管理控制台是 Lotus Quickr 8.1 for Domino 中强大的新管理工具。通过这个 URL
http://<<hostname>>:<<port>>/LotusQuickr/lotusquickr/admin.nsf/index.htm?Open
,管理员能够登录并执行他们的任务,比如查看服务器的所有位置、模板和策略,查看某个位置的详细信息和操作策略等。这个管理控制台中的所有管理任务都是由 REST 服务实现的,本文将对此进行描述。图 1 显示了管理控制台的一个示例。
图 1. 管理控制台用户界面
关于样例
图 2 展示了一个简单、独立的样例,帮助您理解如何使用 Lotus Quickr 完成管理任务。您需要指定服务器的 URL 和连接到服务器的用户 ID 和密码。当顺利通过服务器授权验证之后,用户就可以执行以下管理任务,这些任务列出在 DEMO 窗口的左边面板,以及在 DEMO 窗口的右边面板查看请求-响应 XML 模式:
- 获取位置列表
- 获取关于单个位置的信息
- 锁定一个位置
- 创建一个策略
- 将策略应用到某个位置
- 删除策略
图 2. Admin Service DEMO 用户界面
获取位置列表
首先,获取一个位置列表,从总体上了解 Lotus Quickr 服务器。您使用的 URL 类似于:
http://mikebook.cn.ibm.com/myqcs/rest/places/feed
使用一个 HTTP GET 方法发送一个请求来获取位置列表。HTTP 响应包含一个 Atom 提要文档,其中每个条目都对应一个位置(见清单 1)。从提要文档可以看到,每个条目都有一个指向自身的链接,这是在 Atom 中使用的一个有用模式,用于提供关于管理工作的位置的信息。
清单 1. 关于所有位置信息的 Atom 提要
<?xml version="1.0" encoding="utf-8"?>
<feed xml:base="http://mikebook.cn.ibm.com" xmlns="http://www.w3.org/2005/Atom"
xmlns:td="urn:ibm.com/td">
<id>http://mikebook.cn.ibm.com/myqcs/rest/places/feed</id>
<title type="text">Quickr Place Collection</title>
<link rel="alternate" type="text/html"
href="http://mikebook.cn.ibm.com/AdminConsole"/>
<link rel="self" type="application/atom+xml"
href="http://mikebook.cn.ibm.com/myqcs/rest/places/feed?page=1&
pagesize=20&sortby=&sortorder=1&total=1"/>
<author>
<name>qp</name>
</author>
<generator version="1.0"
uri="http://mikebook.cn.ibm.com/LotusQuickr">Quickr 8.1</generator>
<entry xmlns:td="urn:ibm.com/td">
<id>6B6E24213DA1364C882573A70002B497</id>
<title>Mike Place</title>
<published>2007-12-03T23:43:24Z</published>
<updated>2007-12-03T23:29:36Z</updated>
<link rel="alternate" type="text/html"
href="http://mikebook.cn.ibm.com/mikeplace"/>
<link rel="self" type="application/atom+xml"
href="http://mikebook.cn.ibm.com/myqcs/rest/place/
6B6E24213DA1364C882573A70002B497/entry"/>
<td:locked>0</td:locked>
<td:alert>0</td:alert>
<td:size>2540</td:size>
<td:policyname>Policy1</td:policyname>
<td:lastmodified>2007-12-03T23:29:36Z</td:lastmodified>
</entry>
</feed>
|
如果用户对管理任务中的其他 Atom 提要感兴趣,比如策略和模板文档,那么可以根据样例代码 chttpDlg.cpp 实现它们。
获取关于单个位置的信息
在获取位置列表之后,您需要得到某个位置的详细信息,以完成管理任务。您的 URL 类似于:
http://mikebook.cn.ibm.com/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry
APP Get 操作获取单个位置的信息。HTTP 响应包含一个 Atom 条目文档,其中包含详细的信息(见清单 2)。
清单 2. 提供单个位置信息的 Atom 条目文档
<?xml version="1.0" encoding="utf-8"?>
<entry xml:base="http://mikebook.cn.ibm.com" xmlns="http://www.w3.org/2005/Atom"
xmlns:td="urn:ibm.com/td">
<id>6B6E24213DA1364C882573A70002B497</id>
<link href="/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry"
rel="self" />
<link href="http://mikebook.cn.ibm.com/mikeplace" rel="alternate"/> <link
href="/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry" rel="current"/>
<link href="/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry"
rel="edit"/>
<updated>2007-12-03T23:29:36Z</updated>
<author>
<name></name>
<email></email>
</author>
<td:loginuser>
<name>qp</name>
<email></email>
</td:loginuser>
<title>Mike Place</title>
<td:placename>mikeplace</td:placename>
<td:logincounts>0</td:logincounts>
<td:placesize>2540</td:placesize>
<td:lastaccessed></td:lastaccessed>
<td:numdocs>3</td:numdocs>
<td:numdrafts>0</td:numdrafts>
<td:numattachs>0</td:numattachs>
<td:numcustomforms>0</td:numcustomforms>
<td:numofflineinstalls>0</td:numofflineinstalls>
<td:nummanagers>1</td:nummanagers>
<td:numauthors>0</td:numauthors>
<td:numreaders>0</td:numreaders>
<td:lastweekuses>0</td:lastweekuses>
<td:lastweekreads>0</td:lastweekreads>
<td:lastweekwrites>0</td:lastweekwrites>
<td:lastmonthuses>0</td:lastmonthuses>
<td:lastmonthreads>0</td:lastmonthreads>
<td:lastmonthwrites>0</td:lastmonthwrites>
<td:servername>mikebook.cn.ibm.com</td:servername>
<td:islocked>0</td:islocked>
<td:sizePolicyStatus>ok</td:sizePolicyStatus>
<td:sizePolicyAction>unlock</td:sizePolicyAction>
<td:agePolicyStatus>ok</td:agePolicyStatus>
<td:agePolicyAction>unlock</td:agePolicyAction>
<td:policy>
<td:policyName>Policy1</td:policyName>
<td:policyID>A54BE63EA15F4898882573A70003B39D</td:policyID>
<td:policySize>
<td:max>1</td:max>
<td:warn>1</td:warn>
</td:policySize>
<td:policyAge>
<td:max>1</td:max>
<td:warn>1</td:warn>
</td:policyAge>
</td:policy>
</entry>
|
如果用户对其他 Atom 条目文档感兴趣,比如策略和模板文档,那么可以根据样例代码 chttpDlg.cpp 实现它们。
锁定一个位置
为了获取特定位置的详细信息,您可以在该位置启动对应的管理任务,比如锁定一个位置和将策略应用到某个位置等。用于锁定一个位置的 URL 类似于:
http://mikebook.cn.ibm.com/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry
使用 APP Put 操作更新该位置的锁定信息。请求 Atom XML 文档类似于清单 3。
清单 3. 锁定一个位置的 Atom Put 操作
HTTP Request:
Method:POST
URL: http://mikebook.cn.ibm.com/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry
Content-Type:application/x-www-form-urlencoded
x-method-override: PUT
<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom'>
<td:lock xmlns='urn:ibm.com/td'>true</td:lock>
</entry>
|
成功处理这个请求之后,该服务返回一个包含状态码 200 的响应。
如果用户对用于管理任务的其他 Atom Put 操作感兴趣,比如更新现有策略,那么可以根据样例代码 chttpDlg.cpp 实现它们。
创建一个策略
Lotus Quickr 8.1 for Domino 为位置管理引入了一个新概念,即策略。可以使用管理控制台将命名策略应用到模板或位置,从而限制这些位置的磁盘使用,以及它们处于非活动状态的时间长度。当实现了这些限制之后,可以向位置成员或管理者发送通知和由管理员定义的消息。如果某个位置超出这些限制,那么就可以锁定它。这些策略限制由一个后台代理程序实施。
要为一个位置定义命名策略,您可以在该位置创建之后将策略直接应用到其上。还可以将命名策略应用到模板,这样从该模板创建的所有位置都默认继承这个策略。最后,系统还定义了一个默认策略,并且该策略是经常可用的;对于没有使用策略或其模板未使用策略的位置,将对其应用默认策略。
用于创建策略操作的 URL 类似于:
http://mikebook.cn.ibm.com/myqcs/rest/policy/feed
使用 APP Post 操作创建一个新的策略管理工作(见清单 4)。
清单 4. 用于创建策略的 Atom Post 操作
POST http://mikebook.cn.ibm.com/myqcs/rest/policy/feed HTTP/1.0
Accept: */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Host: mikebook.cn.ibm.com
Content-Length: 2227
Pragma: no-cache
Authorization: Basic cXA6cXA=
<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom'>
<published>2007-12-04T00:48:54Z</published>
<updated>2007-12-04T00:48:54Z</updated>
<title type="text">Policy2</title>
<author>
<name>Frank Upton Barry</name>
<email>fubarry@work.com</email>
</author>
<link href="/myqcs/rest/policy/0/entry" rel="self"
type = "application/atom+xml" />
<link href="/myqcs/rest/policy/0/entry" rel="edit"
type = "application/atom+xml" />
<td:policy>
<td:policyAge>
<td:max>2</td:max>
<td:warn>2</td:warn>
<td:warnNotification>
<td:notificationWho>1</td:notificationWho>
<td:notificationSubject>Warning Notice about %Place Name% |
Details Inside</td:notificationSubject>
<td:notificationBody>This place has not shown any recent activity.
Please visit or perform maintenance to this place to prevent it
from being locked. Contact your place admin for additional help.
<Enter the admin contact here></td:notificationBody>
</td:warnNotification>
<td:limitNotification>
<td:notificationSubject>%Place Name% has been locked |
Details Inside</td:notificationSubject>
<td:notificationWho>1</td:notificationWho>
<td:notificationBody>This place has been locked because
there has been no activity over the past (insert violation limit).
Contact your admin to have this place unlocked. <Enter the admin
contact here></td:notificationBody>
</td:limitNotification>
</td:policyAge>
<td:policySize>
<td:max>2</td:max>
<td:warn>2</td:warn>
<td:warnNotification>
<td:notificationWho>1</td:notificationWho>
<td:notificationSubject>Warning Notice about %Place Name% |
Details Inside</td:notificationSubject>
<td:notificationBody>This place is approaching the maximum size.
Please take the necessary actions to resolve this
or contact your place admin for help.
<Enter the admin contact here>
</td:notificationBody>
</td:warnNotification>
<td:limitNotification>
<td:notificationWho>2</td:notificationWho>
<td:notificationSubject>%Place Name% has been locked |
Details Inside</td:notificationSubject><td:notificationBody>
This place has been locked because it has exceeded the maximum
size. Contact your admin to have this place unlocked. <Enter the
admin contact here></td:notificationBody>
</td:limitNotification>
</td:policySize>
</td:policy>
</entry>
|
成功处理这个请求之后,服务将返回一个包含状态码 201 的响应。
将策略应用到某个位置
在创建一个新策略之后,管理员可以将其应用到需要策略的位置。用于创建策略操作的 URL 类似于:
http://mikebook.cn.ibm.com/myqcs/rest/place/6B6E24213DA1364C882573A70002B497/entry
使用 APP Put 操作将策略应用到一个位置,以实现管理工作(见清单 5)。
清单 5. 将策略应用到一个位置的 Atom Put 操作
POST http://mikebook.cn.ibm.com/myqcs/rest/place/
6B6E24213DA1364C882573A70002B497/entry HTTP/1.0
Accept: */*
Accept-Language: zh-cn
x-method-override: PUT
Content-Type: application/x-www-form-urlencoded
Pragma: no-cache
Host: mikebook.cn.ibm.com
Content-Length: 331
Authorization: Basic cXA6cXA=
<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom>
<published>2007-12-04T01:02:26Z</published>
<updated>2007-12-04T01:02:26Z</updated>
<td:policy_uuid xmlns='urn:ibm.com/td'>
A54BE63EA15F4898882573A70003B39D</td:policy_uuid>
<td:policy_title xmlns='urn:ibm.com/td'>Policy1</td:policy_title>
</entry>
|
成功处理这个请求之后,该服务返回一个包含状态码 200 的响应。
删除策略
可以删除对管理工作没有用的策略。您可以使用 APP Delete 操作在管理工作中删除策略(见清单 6)。
清单 6. 用于删除策略的 ATOM Delete 操作
POST http://mikebook.cn.ibm.com/myqcs/rest/policy/
37F6E75DB22FC9F5882573A700047A93/entry HTTP/1.0
Accept: */*
Accept-Language: zh-cn
x-method-override: DELETE
Content-Type: application/x-www-form-urlencoded
Pragma: no-cache
Host: mikebook.cn.ibm.com
Content-Length: 0
|
成功处理这个请求之后,该服务返回一个包含状态码 200 的响应。
结束语
Lotus Quickr 8.1 for Domino 包含一个新特性(管理控制台),它为实现服务器管理工作提供了比以前的发行版更加便捷的方法。因为所有管理任务都被设计为 REST 式的,并且使用 Atom Publishing Protocol 描述管理操作,所以可以更加协作和健壮地完成服务器管理工作。本文演示了如何使用一些服务执行关于位置、策略和模板的基本操作,并且解释了针对每个请求和响应消息的基本模式。
下载 | 名字 | 大小 | 下载方法 |
|---|
| QuickrDemo.zip | 42KB | HTTP |
参考资料 学习
讨论
作者简介  | |  | Zhou Tian Shan 是 IBM 的资深软件工程师,在位于北京的 China Software Development Lab 的 IBM Lotus Quickr 团队工作。 |
 | |  | Hu Sheng 是 IBM 的软件工程师,在位于北京的 China Software Development Lab 的 IBM Lotus Quickr 团队工作。 |
 | |  | Yin Zhi 是 IBM 的软件工程师,在位于北京的 China Software Development Lab 的 IBM Lotus Quickr 团队工作。 |
 | |  | Al Maxwell 是位于马萨诸塞州 Westford 的 IBM Lotus Quickr 团队的高级软件工程师。 |
 | |  | Bruce Roberts 是 IBM Lotus Quickr 团队的架构师。 |
对本文的评价
|