组件的部署选项
通常组件是作为扩展来部署的(见 扩展 章节)。不过使用以前的一些工具同样也可以安装组件,例如 regcomp 和 regmerge,在开发过程中使用这些工具会更加方便。
背景:UNO 注册表
本节介绍将新的 UNO 组件手动部署到安装的 OpenOffice.org 中的必要步骤,还将介绍背景信息,并说明测试部署所需的工具。组件的开发者和部署人员应该熟悉本节的内容。如果采用推荐的步骤,可以轻松实现不同供应商的组件之间的互操作性。
UNO 注册表在一个树状结构中存储二进制数据。通过 com.sun.star.registry.SimpleRegistry 服务以编程方式可以在注册表中访问这些存储的数据,但通常不需要这样做。请注意,UNO 注册表与 Windows 注册表无关,它们只是在数据存储方面运用了相同概念。
UNO 注册表主要存储两类数据:
类型库
- 要从 BASIC 或通过进程间连接调用 UNO 调用,核心 UNO 桥需要有关所用数据类型的信息。UNO 将此信息存储到类型库,以便可以从任意桥重复使用相同的数据。这与 CORBA 方法相反,后者需要为要编译的每个数据类型都生成代码并链接到大的库中。每个 UNOIDL 类型说明都存储为由 com.sun.star.reflection.TypeDescriptionProvider 服务解释的二进制大对象(BLOB)。
有关已注册组件的信息
- UNO 的一个基本概念是通过
ServiceManager
由其服务名称创建组件的实例。服务名称和共享库或 .jar 文件(其中可找到必要的编译代码)之间的关联被存储到 UNO 注册表。此数据的结构在下面提供。OpenOffice.org 的未来版本可能将此信息存储在可使用简单的文本编辑器进行修改的 XML 文件中。
数据的两种类型对于运行 UNO C++ 进程都是必要的。如果不存在数据的类型,将导致程序的终止。UNO 进程通常在启动期间打开其注册表,并在进程终止时关闭这些注册表。数据的两种类型通常都存储在具有 .rdb 前缀(rdb=registry database [注册表数据库])的文件中,但是此前缀不是必需的。
UNO 类型库
所有类型说明必须位于注册表中 /UCR 主关键字(UCR = UNO 核心反射)下,才可用于 UNO C++ 进程。使用 regview 工具查看文件 <officepath>/program/types.rdb。regview 工具随 OpenOffice.org SDK 一起提供。
例如:
$ regview types.rdb /UCR
将办公软件中用到的所有类型说明打印到 stdout。要检查注册表中是否包含特定的类型,请调用以下命令:
$ regview types.rdb /UCR/com/sun/star/bridge/XUnoUrlResolver /UCR/com/sun/star/bridge/XUnoUrlResolver Value: Type = RG_VALUETYPE_BINARY Size = 461 Data = minor version: 0 major version: 1 type: 'interface' name: 'com/sun/star/bridge/XUnoUrlResolver' super name: 'com/sun/star/uno/XInterface' Doku: "" number of fields: 0 number of methods: 1 method #0: com/sun/star/uno/XInterface resolve([in] string sUnoUrl) raises com/sun/star/connection/NoConnectException, com/sun/star/connection/ConnectionSetupException, com/sun/star/lang/IllegalArgumentException Doku: "" number of references: 0
regview 工具将对包含类型说明的 BLOB 格式进行解码,并将其显示为可读形式。
组件注册
UNO 组件将提供有关实现了哪些服务的数据。为避免在启动 UNO 进程时将所有可用的 UNO 组件加载到内存中,这些数据在安装过程中被一次性地组合并存储到注册表中。将这些信息写入注册表的过程称为组件注册。执行此任务的工具将在下面介绍。
对于已安装的 OpenOffice.org,services.rdb 包含组件注册信息。数据存储在 /IMPLEMENTATIONS 和 /SERVICES 关键字中。以下代码显示了 com.sun.star.io.Pipe 服务的示例 SERVICES 关键字。
$ regview services.rdb /SERVICES/com.sun.star.io.Pipe /SERVICES/com.sun.star.io.Pipe Value: Type = RG_VALUETYPE_STRINGLIST Size = 38 Len = 1 Data = 0 = "com.sun.star.comp.io.stm.Pipe"
上述代码包含一个实现名称,但也可以包含多个名称。在后一种情况下,只使用第一个名称。
以下条目可以在 IMPLEMENTATIONS 部分找到:
$ regview services.rdb /IMPLEMENTATIONS/com.sun.star.comp.io.stm.Pipe /IMPLEMENTATIONS/com.sun.star.comp.io.stm.Pipe / UNO / ACTIVATOR Value: Type = RG_VALUETYPE_STRING Size = 34 Data = "com.sun.star.loader.SharedLibrary" / SERVICES / com.sun.star.io.Pipe / LOCATION Value: Type = RG_VALUETYPE_STRING Size = 8 Data = "stm.dll"
实现部分包含数据的三种类型。
- 组件在运行时被请求时要使用的加载程序(此处是 com.sun.star.loader.SharedLibrary)。
- 此实现支持的服务。
- 加载程序访问库时所使用的文件的 URL(URL 可能被指定与本机组件的 OpenOffice.org 库目录相关,
如本示例所示