![]() |
Sun ONE Message Queue, Version 3.0.1 管理员指南 |
本附录说明如何设置代理,使之使用插入的持久性访问支持 JDBC 的数据存储。
简介
Sun ONE Message Queue (MQ) 代理包含一个持久性管理器组件(请参阅持久性管理器),用于管理持久性信息的写入和检索。默认情况下,持久性管理器被配置为访问基于文件的内置数据存储,但是您可以重新对其进行配置,以插入任何可通过 JDBC 兼容的驱动程序进行访问的数据存储。
要配置代理以使用插入的持久性,需要在代理实例配置文件中设置一些 JDBC 相关的属性。还需要创建相应的数据库架构以执行 MQ 持久性操作。MQ 提供的数据库管理器实用程序 (imqdbmgr) 可以使用 JDBC 驱动程序和代理配置属性创建和管理插入的数据库。
本附录中列出的步骤以 Java 2 SDK Enterprise Edition 附带的 Cloudscape DBMS 为例进行说明(J2EE SDK 可以从 java.sun.com 下载)。本实例使用 Cloudscape 的嵌入式版本(而不是客户机/服务器版本)。这些步骤以 Cloudscape 实例中的路径名和属性名为例进行说明。它们标有“实例:”字样。
其它实例可以从以下地址找到:
IMQ_HOME/demo/jdbc(在 Solaris 操作系统上为 /usr/demo/imq/jdbc)
插入支持 JDBC 的数据存储
插入支持 JDBC 的数据存储只需几个步骤。
插入支持 JDBC 的数据存储的步骤
- 在代理的配置文件中设置 JDBC 相关属性。
请参阅表 A-1 中列出的属性。
- 在以下路径中放置一个 JDBC 驱动程序 jar 文件的副本或符号链接:
IMQ_VARHOME/lib/ext(在 Solaris 操作系统上为 /usr/share/lib/imq/ext/)
副本实例 (Solaris):
% cp j2sdk_install_directory/lib/cloudscape/cloudscape.jar IMQ_VARHOME/lib/ext
符号链接实例 (Solaris):
% ln -s j2sdk_install_directory/lib/cloudscape/cloudscape.jar IMQ_VARHOME/lib/ext
- 创建 MQ 持久性所需的数据库架构。
使用 imqdbmgr create all 命令(对于嵌入式数据库)或者 imqdbmgr create tbl 命令(对于外部数据库)。请参阅数据库管理器实用程序 (imqdbmgr)。
实例:
% cd IMQ_HOME/bin(在 Solaris 操作系统上为 /usr/bin)
% imqdbmgr create all
注 如果使用嵌入式数据库,建议在以下目录中创建数据库架构:
如果嵌入式数据库没有设置用户名和密码保护,则可能设置了文件系统权限保护。要确保代理能够对数据库进行读写操作,运行该代理的用户应该是使用 imqdbmgr 命令创建该嵌入式数据库的同一个用户(请参阅数据库管理器实用程序 (imqdbmgr))。
JDBC 相关的代理配置属性
代理的实例配置文件位于以下位置:
IMQ_VARHOME/instances/brokerName/props/config.properties
(在 Solaris 操作系统上为 /var/imq/instances/brokerName/props/config.properties)如果该文件尚未创建,必须使用 -name 代理名称选项启动 MQ 的代理,以创建该文件。
表 A-1 列出了插入支持 JDBC 的数据存储时需要设置的配置属性。这些属性是在使用插入持久性的每个代理实例的实例配置文件 (config.properties) 中设置的。该表包含了需要为 Cloudscape DBMS 实例指定的值。
表 A-1    JDBC 相关属性
属性名称
说明
imq.persist.store
指定基于文件或基于 JDBC 的数据存储。
实例:
jdbc
imq.persist.jdbc.brokerid
(可选)
指定附加到数据库表名称中的代理实例标识符。当多个代理实例使用同一个数据库作为持久性数据存储时,标识符可使代理实例保持唯一。(嵌入式数据库只存储一个代理实例的数据,因此通常不需要代理实例标识符。)标识符必须是字母数字字符串,其长度不能超过数据库所允许的最大表名长度减去 12 后的长度。
实例:对于 Cloudscape 来说不需要
imq.persist.jdbc.driver
指定连接到数据库的 JDBC 驱动程序的 Java 类名。
实例:
COM.cloudscape.core.JDBCDriver
imq.persist.jdbc.opendburl
指定打开现有数据库连接的数据库 URL。
实例:
jdbc:cloudscape:IMQ_VARHOME/
instances/brokerName/dbstore/imqdb
(在 Solaris 操作系统上为 jdbc:cloudscape:var/imq...)
imq.persist.jdbc.createdburl
(可选)
指定打开创建数据库连接的数据库 URL。(仅当要使用 imqdbmgr 创建数据库时指定。)
实例:
jdbc:cloudscape:IMQ_VARHOME/
instances/brokerName/dbstore/
imqdb;create=true
(在 Solaris 操作系统上为 jdbc:cloudscape:var/imq...)
imq.persist.jdbc.closedburl
(可选)
指定当代理关闭时关闭当前数据库连接的数据库 URL。
实例(对 Cloudscape 来说是必需的):
jdbc:cloudscape:;shutdown=true
imq.persist.jdbc.user
(可选)
指定打开数据库连接的用户名(如果需要)。出于安全性考虑,可以指定值,而不要使用命令行选项:
imqbrokerd -dbuser
和 imqdbmgr -uimq.persist.jdbc.needpassword
(可选)
指定数据库是否要求为代理访问提供密码。如果值为 true,则表示需要提供密码。可以使用以下命令行选项指定密码:imqbrokerd -dbpassword
imqdbmgr -p如果没有使用命令行选项或密码文件提供密码(请参阅使用密码文件),代理将提示输入密码。
imq.persist.jdbc.password
(可选)
指定用于打开数据库连接的密码(如果需要)。只能在密码文件中指定(请参阅使用密码文件)。为了增强安全性,最好让代理提示您输入密码,或使用以下命令行选项指定密码:
imqbrokerd -dbpassword
imqdbmgr -p所有代理配置属性的值都可以使用 -D 命令行选项进行设置。如果某个数据库要求设置某些特定的数据库属性,也可以在启动代理 (imqbrokerd) 时使用 -D 命令行选项进行设置,或者使用数据库管理器实用程序 (imqdbmgr) 进行设置。
实例:
以 Cloudscape 嵌入式数据库为例,可以使用 -D 命令行选项定义 Cloudscape 系统目录,而不是在数据库连接 URL 中指定数据库的绝对路径(如表 A-1 中的实例所示):
-Dcloudscape.system.home=IMQ_VARHOME/instances/brokerName/dbstore
在这种情况下,可以分别将用于创建和打开数据库的 URL 简单指定为:
imq.persist.jdbc.createdburl=jdbc:cloudscape:imqdb;create=true
和
imq.persist.jdbc.opendburl=jdbc:cloudscape:imqdb
数据库管理器实用程序 (imqdbmgr)
MQ 为设置持久性所需的架构提供了数据库管理器实用程序 (imqdbmgr)。当 MQ 数据库表被损坏或者您希望使用不同的数据库作为数据存储时,也可以使用该实用程序删除数据库表。
注 如果代理实例异常崩溃,未引用的持久性信息可能会保留在数据存储中。启动代理后再将其关闭通常可以清除数据存储。
本节介绍了基本的 imqdbmgr 命令语法,提供了一个子命令列表,并概述了 imqdbmgr 命令选项。
命令语法
imqdbmgr 命令的一般语法如下:
imqdbmgr subcommand argument [options]
imqdbmgr -h|-help
imqdbmgr -v|-version请注意,如果指定 -v 或 -h 选项,将不会执行命令行中指定的子命令。例如,输入以下命令将显示版本信息,而不是执行 create 子命令。
imqdbmgr create all -v
imqdbmgr 子命令
表 A-2 列出了数据库管理器实用程序 (imqdbmgr) 包含的子命令:
imqdbmgr 命令选项概述
表 A-3 列出了 imqdbmgr 命令的选项。
表 A-3    imqdbmgr 选项
选项
说明
-Dproperty=value
将指定属性设置为指定的值。
-b brokerName
指定代理实例名称并使用对应的实例配置文件。
-h
显示使用帮助。不执行命令行上的命令。
-p password
指定数据库密码。
-u name
指定数据库用户名。
-v
显示版本信息。不执行命令行上的命令。