级别: 初级 蒋 建民 (jiangjm@cn.ibm.com), 高级软件工程师, IBM中国软件开发中心
2009 年 5 月 14 日 本文主要讲述 IBM Lotus Notes 8 复合应用的 Eclipse 组件的部署和更新机制,通过基于 NSF 更新站点的这一有力工具,展示插件的打包、部署和更新的步骤。
企业应用系统的成本不光是应用本身,还应包括对该应用系统的维护,或者更精确地说是总体拥有成本(TOC)。企业应用具有的可管理性,即远程的进行安装、部署、配置、升级和维护,这是降低总体拥有成本的最重要的解决方案。
IBM Lotus Notes 8 采用了 Eclipse 和 Expeditor 的技术架构,使得用户可以采用新的部署方式来安装和部署复合应用。当复合应用启动时,会识别和检测该应用程序使用的插件,并从相应的服务器上下载。如果检测到复合应用的组件有了新的版本,就会动态地将插件更新为最新版本。
Lotus Notes 8 复合应用
与以前版本的最大不同之处在于 Notes 8 客户端采用了 Lotus Expeditor 的平台架构,底层依托于开放标准的 Eclipse 架构。因此,Notes 8 的复合应用组件与 Expeditor 复合应用组件具有一致性。同时,Notes 8 应用组件和传统的 Notes 应用也是兼容的,Notes 8 应用组件具有了双重身份。因此,Notes 8 的客户端做了两层封装:第一层用于与 Notes 传统客户端应用兼容且具有复合应用组件能力的封装;第二层是可以在 Expeditor 平台上与其它 Eclipse 复合应用组件交互的封装。
图 1. Lotus Notes 8 平台架构
由于 Notes 8 底层是 Expeditor 平台,使它可以支持 SWT/Eclipse 组件、AWT/SWING 组件、内嵌浏览器组件、支持 JSR168 标准的 Portlet 查看器组件、显示 Servlet 及 JSP 的 Web 容器组件、.Net/ActiveX 组件等。事实上,Notes 8 中的组件可分为两类:传统的 NSF 数据库组件和 Eclipse 组件。
复合应用组件之间可通过 Property Broker 进行相互通讯。 Notes 8 复合应用可以通过复合应用编辑器进行组装,也可以连接有交互的组件。
可管理客户端
Notes 8 采用了服务器管理分发模式,所有的插件都可以通过 Domino 服务器自动部署到 Notes 客户端上。可以根据用户角色的不同,分发与之相应的插件,用于完成相关业务职责工作。这种服务器管理分发模式可以中心化地管理、部署和升级 Notes 8 的客户端软件和复合应用。其服务器端的配置设定和策略管理,可以使企业管理员有更多的灵活性,控制用户的访问能力。
在 Eclipse 架构体系中,插件是最基本的组成单元,插件中包含 Manifest 和 Java 二进制码,可打包成 Jar 文件并放在更新站点中的 plugins 目录中。功能部件是一组相关的插件,也有相应的 Manifest,也可打包成 Jar 文件,但它不是插件的容器,而是插件的一组引用,打包后放在更新站点中的 features 目录中。在更新站点的根目录下,有一个 site.xml 文件用于描述站点中所包含的所有功能部件和插件,整个更新站点的目录结构如图 2 所示。
图 2. 更新站点的结构
在以前的版本中,用户可以使用智能升级(Smart Upgrade)过程来更新 Notes,这一功能在 Domino 8 上仍旧可以使用。 Domino 8 还可以配置成 Eclipse 更新站点,它可以和其他的基于 Eclipse RCP 的应用(如 SameTime Connect)一样,自动分发到客户端,也可以配置成基于 NRPC 协议的更新站点,用以支持基于 NRPC 的 Notes 8 客户端的分发。
Notes 8 中基于 NSF 的更新站点
在我们详细描述基于 NSF 的更新站点之前,先来再看看 Eclipse 更新站点是如何工作的,理解了 Eclipse 功能部件的更新过程,就会很容易将这一过程应用于基于 NSF 的更新站点。
Eclipse 功能部件(feature)将一个或多个插件作为一个功能整体,Eclipse 的更新只针对新加的或者已存在但版本较新的功能部件。也就是说,如果一个功能部件的版本不更新,而只更新其引用的插件的版本,Eclipse 并不做更新。它首先扫描功能部件的版本,如果有更新的功能部件,再进一步扫描该功能部件引用的可能。因此,若要让插件更新版本,必须首先更改功能部件的版本为新的版本号,以确保系统能更新对应的插件。
那么,复合应用又是如何进行更新的呢?复合应用有一个对应的描述性文件(CA xml),用以描述该复合应用与哪几个功能部件相关。如果要想与之相关的功能部件以及插件进行升级,必须将功能部件的版本号增加,而且至少将某一个插件的版本号增加。除此之外,由于性能方面的考虑,复合应用基础性架构(Composite Application Infrastructure 或简写为 CAI)在运行复合应用时,仅判断该复合应用的描述性文件(CA xml)的时间和日期戳是否发生了变化,如果没有发生改变,CAI 就不再进一步的判断是否更新功能部件和插件。表 1 是 CAI 对插件进行更新的判别条件和次序,只有所有的条件均满足时,CAI 才对相应的插件进行更新。
表 1. CAI 对复合应用插件更新的判别标准
| 判别对象 | 判别次序 | 判别条件 | | CA xml | 1 | 描述文件的时间日期 | | Features | 2 | 功能部件的版本号 | | Plugins | 3 | 插件的版本号 |
基于 NSF 更新站点
Notes 8 提供了基于 NSF 的更新站点机制,站点内容以 NSF 数据库的形式存在。那么,既然有了 Eclipse 的更新站点技术,为什么还需要基于 NSF 更新站点的技术呢?
主要基于下面四个原因:
- 利用 NSF 现有的安全机制,更新站点的内容就不必考虑 HTTP 协议下数据安全的问题,Notes/Domino 支持的 NRPC 协议保证了数据的安全和对访问权限的限制。
- 容易部署,利用 NSF 文件在多个服务器间同步的原理,基于 NSF 的更新站点可部署到多个服务器上。
- 易操作,管理员只要将 Eclipse 的更新站点导入到 NSF 文件中即可,并且一个 NSF 文件可包含多个功能部件和插件。
- 容易测试,可将 CA xml 和更新站点放在一个文件中,能更容易测试更新站点的内容。
生成 NSF 更新站点的过程
下面介绍如何创建一个基于 NSF 的更新站点。打开 Notes 8 客户端程序中的菜单项,选择“文件” > “应用程序” > “新建”,在“新建应用程序”对话框中,选择“显示高级模板”。在模板选择项里,选择“ Eclipse Update Site (8) ”。命名自己的更新站点的标题为 MyUpdateSite、NSF 文件为 MyUpdateSite.NSF 后确认。
图 3. Notes 8 更新站点的 NTF 模板
在 MyUpdateSite.NSF 界面中有四个按钮,分别用于导入本地 Eclipse 更新站点、导入一个功能部件、从已有的更新站点数据库中导入以及从远程一个 URL 中更新。点击“ Import Local Update Site ”,即可将已经制作的 Eclipse 更新站点导入进来。
图 4. Notes 8 更新站点的导入
复合应用 Eclipse 组件的升级
复合应用中的 Eclipse 组件,需要用复合应用编辑器来增加。复合应用编辑器的右面有组件选用板,点击右键菜单有“添加组件”,选择“添加来自站点的组件”,在 URL 输入框输入服务器端的更新站点,例如 http://vmsrv.lotus.com/MyUpdateSite.nsf, 如果该更新站点数据库对访问权限有限制,也可输入 NRPC 协议的 URL(如图 5)。通过该更新站点的 site.xml,复合应用编辑器获取其中插件中包含的视窗,用户可以通过拖拽的方式,定义出一个复合应用。
图 5. 组件所在的更新站点
插件升级的过程
通过复合应用编辑器加到一个复合应用中的组件,包含了功能部件的信息,其中有些信息说明该功能部件中要使用哪些 Java 文件及其它相关文件。当新的版本做好之后,复合应用组件需要将这些信息进行更新,以反映出该组件是新的组件所使用的新的文件。通常,最简单的方法是将该组件对应的功能部件版本号及包含的插件版本号进行升序的修改,但有时会增加或拆掉部分的功能部件。
下面我们以仅做插件升序的方式,来说明如何将一个复合应用进行升级。
首先,用 Eclipse 等开发工具,将新开发或修改的插件进行插件版本的升级,即版本号做升序处理,如原来的版本为 1.0.0,升级后的版本为 1.0.1 。在插件配置编辑器中的概览页中的插件版本的输入框中直接输入新的版本号(如图 6),也可以直接修改 MANIFEST.MF 中的 Bundle-Version 项。
图 6. 更改插件的版本号
其次,将功能部件的版本进行升级,在功能部件编辑器中的概览页中修改功能部件的版本号。需要注意的是在包含插件的选项卡页面中,需要将上面修改的插件版本做同步(如图 7)。
图 7. 同步功能部件的版本号
做好功能部件后在 Eclipse 更新站点的工程中,生成新版本的功能部件和插件,并将该更新站点导入到服务器端的更新站点的 NSF 数据库中(如图 8)。
图 8. 在更新站点 NSF 数据库里导入新版本的功能部件
最后,是对复合应用做升级,即将复合应用的 CA xml 做修改,其步骤如下:
- 用复合应用编辑器,打开复合应用(复合应用在服务器上,需要有编辑权限);
- 在导航树面板上,选定所要升级的组件,编辑高级属性;
- 在功能部件编辑框里,将原来的版本号修改成新的版本号(如图 9);
- 保存所有的编辑内容,并将复合应用保存。
图 9. 复合应用组件中新的功能部件
当所有这些完成后,用 Notes 客户端打开该复合应用,系统会提示用户有新的插件需要更新,确认后重新启动,则新的插件开始工作。
对复合应用做更新升级,也可以通过 Domino 设计器来完成,其步骤如下:
- 用设计器打开该复合应用,在左边的导航栏中找到复合应用,点击组合应用程序下的应用程序,在右面的主窗口中选中复合应用程序后,点击导出,并保存为 MyCompApp.xml 。
- 编辑该 xml 文件,找到 url.feature 对应的元素,修改对应的值,如:
<preference name="url.feature">
<base:value
value="NRPC://vmsrv.lotus.com/__88257492004F10FC/site.xml"
xsi:type="base:String" />
</preference>
|
其中,88257492004F10FC 是对应的更新站点 NSF 数据库的复制 ID 。
- 用设计器打开的复合应用中,点击右上方的刷新按钮,并选择刚编辑的 xml 文件(如图 10),即完成了对复合应用的更新。
图 10 用设计器更新复合应用
Domino/Notes 8.0.1 管理员配置允许升级的站点
Domino/Notes 8.0.1 可以对更新站点做进一步的控制,管理员定义允许的站点列表,所有的用户只能从列表中的站点进行更新,这一列表也称为更新站点白名单(whitelist)。
Domino 管理器中,在服务器配置里,新加入了对插件分发的设置。原来的智能升级的标签卡,改为了客户端升级。在该标签卡内,有两个子项:智能升级和分发。智能升级还是保持原有的功能,而新加的分发功能中,用于说明最终用户获取功能组件和插件的更新站点。更新的功能组件或插件包括第三方安装软件安装到 Notes 运行时环境中的 Eclipse 功能部件和插件,也包括用户自己通过用户界面中的菜单项“文件—应用程序-安装”安装的功能部件或插件。
注:缺省设置下,用户界面中的菜单中,没有“文件—应用程序-安装” 这个子菜单,如果用户希望激活该菜单项手工安装第三方的插件,需要在 Notes 安装目录 <Notes> \framework\rcp 中编辑 plugin_customization.ini 文件,在最后加入如下一行:com.ibm.notes.branding/enable.update.ui=true 。
Notes 8 及以后的版本,是使用 Eclipse 的更新管理作为基础,用于组件的检测、版本管理和分发,用户首先要保证有权限发起组件安装或更新的请求,更新站点可以是传统的 Eclipse 更新站点,也可以是 Notes 提供的更新站点模板 UPDATESITE.NTF 生成的更新站点数据库。
Notes 管理员通过“客户端升级-分发”子标签卡,定义允许使用的站点,其过程如下:
- 使用 Domino 管理器,选择左侧导航栏中的服务器-配置。
- 在右面的窗口上方,点击 Add Configuration 。
- 在第 3 个标签卡 Client Upgrade 中到子项 Provisioning 。
- 在 Provisioning settings are enabled 选择 Yes(如图 11)
- 点击 New,在对应的输入框中,输入更新站点名字和 URL 。其中 URL 可以是 http 或 NRPC 地址,如 http://vmsrv.lotus.com/MyUpdateSite.nsf/site.xml,或者 NRPC://<server>/__<replicationID>/site.xml 。
图 11. 用管理器设置复合应用的更新站点
利用窗口小部件进行插件部署和更新
Domino/Notes 8.0.2 以及最近发布的 Domino/Notes 8.5 提供了窗口小部件(Widget),可以对插件进行部署和更新。为了利用窗口小部件,需要创建窗口小部件目录,目录中定义一个小部件并附上一个 extension.xm 文件,Notes 客户端通过调用小部件中的 extension.xml 完成插件的安装和更新。
利用窗口小部件进行插件部署的步骤如下:
-
准备好 NSF 格式的更新站点(如上述的 MyUpdateSite.nsf)。
-
创建窗口小部件目录,并设定窗口小部件的管理策略。
通过窗口小部件目录模板创建一个窗口小部件目录(如图 12);
图 12. 创建窗口小部件目录
配置窗口小部件的策略(如图 13)。
图 13. 窗口小部件策略
-
创建窗口小部件的 extension.xml,窗口小部件利用该文件中的描述对 eclipse 插件进行安装。
编辑窗口小部件的附件 extension.xml 有如下内容,其中蓝色部分可以更改。
<?xml version="1.0" encoding="UTF-8"?>
<webcontextConfiguration version="1.1">
<palleteItem
id="com.lotus.vmsrv.MySampleFeature"
imageUrl=""
providerId="com.ibm.rcp.toolbox.prov.provider.ToolboxProvisioning"
title="MySample Plugin"
url="nrpc://vmsrv.lotus.com/MyUpdateSite.nsf/site.xml">
<preferences>
</preferences>
<data>
<installManifest>
<![CDATA[
<install>
<installfeature
description="MySample Plugin"
id="MySampleFeature"
name="MySampleFeature"
version="1.0.1">
<requirements>
<feature
download-size="10"
id="MySampleFeature"
match="perfect"
size="10"
version="1.0.1"/>
</requirements>
</installfeature>
</install>
]]>
</installManifest>
</data>
</palleteItem>
</webcontextConfiguration> |
将 extension.xml 附加到窗口小部件中(如图 14)
图 14. 窗口小部件的附件
-
Notes 用户获取窗口小部件并完成插件更新。
通过客户端的窗口小部件的首选项,更新插件(如图 15)。
图 15. 窗口小部件的首选项及小部件的更新

 |

|
总结
本文主要讲述 IBM Lotus Notes 8 复合应用的 Eclipse 组件的部署和更新机制,通过基于 NSF 更新站点的这一有力工具,展示插件的打包、部署和更新的步骤。
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | 蒋建民,1997 年加入 IBM 中国研究中心,2005 年转入 IBM 开发中心,现在软件服务部从事 Lotus 产品解决方案的设计及开发工作,参与多个大型企业解决方案的设计开发,有丰富的实施经验。
|
对本文的评价
|