Sun Java System Message Queue 3.5 SP1 管理指南 |
附录 B
设置插入的持久性本附录说明如何设置代理,使之使用插入的持久性访问支持 JDBC 的数据存储。
简介Message Queue 代理包含一个持久性管理器组件,该组件用于管理持久性信息的写入和检索(请参见“持久性管理器”)。默认情况下,持久性管理器配置为访问基于文件的内置数据存储,但是可以重新对其进行配置,以插入任何可通过 JDBC 兼容的驱动程序进行访问的数据存储。
要配置代理以使用插入的持久性,需要在代理实例配置文件中设置一些 JDBC 相关的属性。还需要创建相应的数据库架构以执行 Message Queue 持久性操作。Message Queue 提供的数据库管理器实用程序 (imqdbmgr) 可以使用 JDBC 驱动程序和代理配置属性创建和管理插入的数据库。
本附录中列出的步骤以 Java 2 Platform, Enterprise Edition (J2EE) SDK 附带的 PointBase DBMS 为例进行说明。1.4 版本可以从 java.sun.com 下载。该示例使用 PointBase 的嵌入式版本(而不是客户机/服务器版本)。这些步骤以 PointBase 示例中的路径名和属性名为例进行说明。它们标有示例:字样。
可以在附录 A“Message Queue 数据的位置”中显示的示例位置找到 Oracle 和 PointBase 的示例配置。此外,PointBase 嵌入式版本、PointBase 服务器版本、Oracle 和 Cloudscape 的示例作为实例配置文件中的注释值提供。
插入支持 JDBC 的数据存储插入支持 JDBC 的数据存储只需几个步骤。
插入支持 JDBC 的数据存储
- 在代理的配置文件中设置 JDBC 相关属性。
请参见表 B-1 中列出的属性文档。
- 在以下路径中放置一个 JDBC 驱动程序 jar 文件的副本或符号链接:
/usr/share/lib/imq/ext/(在 Solaris 平台上)
/opt/imq/lib/ext/(在 Linux 平台上)
IMQ_VARHOME\lib\ext (在 Windows 平台上)
副本示例 (Solaris):
% cp j2eeSDK_install_directory/pointbase/lib/pointbase.jar /usr/share/lib/imq/ext
符号链接示例 (Solaris):
% ln -s j2eeSDK_install_directory/lib/pointbase/pointbase.jar /usr/share/lib/imq/ext
- 创建 Message Queue 持久性所需的数据库架构。
使用 imqdbmgr create all 命令(对于嵌入式数据库)或者 imqdbmgr create tbl 命令(对于外部数据库)。请参见“数据库管理器实用程序 (imqdbmgr)”。
示例:
- 转到 imqdbmgr 所在的目录。
cd /usr/bin(在 Solaris 平台上)
cd /opt/imq/bin(在 Linux 平台上)
cd IMQ_HOME/bin(在 Windows 平台上)
- 输入 imqdbmgr 命令。
imqdbmgr create all
注意
如果使用嵌入式数据库,建议在以下目录中创建数据库架构:
/instances/instanceName/dbstore/dabatabseName。
如果嵌入式数据库没有设置用户名和密码保护,则可能设置了文件系统权限保护。要确保代理能够对数据库进行读写操作,运行该代理的用户应该是使用 imqdbmgr 命令创建该嵌入式数据库的同一个用户(请参见“数据库管理器实用程序 (imqdbmgr)”)。
JDBC 相关的代理配置属性代理的实例配置文件位于一个目录中,该目录用与此配置文件相关联的代理实例的名称 (instanceName) 标识(请参见附录 A“Message Queue 数据的位置”):
/instances/instanceName/props/config.properties
如果该文件尚不存在,必须使用 -nameinstanceName 选项启动代理,以便 Message Queue 创建该文件。
表 B-1 列出了插入支持 JDBC 的数据存储时需要设置的配置属性。在使用插入持久性的每个代理实例的实例配置文件 (config.properties) 中设置这些属性。
利用实例配置属性可以自定义用于创建 Message Queue 数据库架构的 SQL 代码:有一个可配置的属性可指定用于创建每个数据库表的 SQL 代码。正确指定插入数据库使用的数据类型时需要这些属性。
由于数据库供应商之间存在准确 SQL 语法不兼容问题,请务必检查数据库供应商提供的相应文档并对表 B-1 中的属性进行相应调整。例如,对于 PointBase 数据库,可能需要调整 IMQMSG35 表中 MSG 列所允许的最大长度(请参见 imq.persist.jdbc.table.IMQMSG35 属性)。
表 B-1 包含了将为 PointBase DBMS 示例指定的值。
表 B-1 JDBC 相关属性
属性名称
说明
imq.persist.store
指定基于文件或基于 JDBC 的数据存储。
示例:
jdbc
imq.persist.jdbc.brokerid(可选)
指定附加到数据库表名称中的代理实例标识符。当多个代理实例使用同一个数据库作为持久性数据存储时,标识符可使代理实例保持唯一。(嵌入式数据库只存储一个代理实例的数据,因此通常不需要代理实例标识符。)标识符必须是字母数字字符串,其长度不能超过数据库所允许的最大表名长度减去 12 后的长度。
示例:PointBase 嵌入式版本不需要。
imq.persist.jdbc.driver
指定连接到数据库的 JDBC 驱动程序的 Java 类名。
示例:
com.pointbase.jdbc.jdbcUniversalDriver
imq.persist.jdbc.opendburl
指定打开现有数据库连接的数据库 URL。
示例:
jdbc:pointbase:embedded:dbName;database.home= /instances/instanceName/dbstore
imq.persist.jdbc.createdburl(可选)
指定打开创建数据库连接的数据库 URL。(仅在要使用 imqdbmgr 创建数据库时才指定。)
示例:
jdbc:pointbase:embedded:dbName;new,database.home= /instances/instanceName/dbstore
imq.persist.jdbc.closedburl(可选)
指定当代理关闭时关闭当前数据库连接的数据库 URL。
示例:PointBase 不需要
imq.persist.jdbc.user(可选)
指定打开数据库连接的用户名(如果需要)。出于安全性考虑,可以指定值,而不使用命令行选项: imqbrokerd -dbuser 和 imqdbmgr -u
imq.persist.jdbc.needpassword(可选)
指定数据库是否要求输入为访问代理的密码。如果值为 true,则表示需要提供密码。可以使用以下命令行选项指定密码: imqbrokerd -dbpassword imqdbmgr -p
如果不使用命令行选项或密码文件提供密码(请参见“使用密码文件”),代理将提示输入密码。
imq.persist.jdbc.password(可选)
指定用于打开数据库连接的密码(如果需要)。只能在密码文件中指定该属性(请参见“使用密码文件”)。
有多种提供密码的方式。最安全的方式是让代理提示您输入密码。较安全的方式是使用密码文件并对密码文件进行读保护。最不安全的方式是使用以下命令行选项指定密码:imqbrokerd -dbpassword imqdbmgr -p
imq.persist.jdbc.table.IMQSV35
用于创建版本表的 SQL 命令。
示例:
CREATE TABLE ${name} (STOREVERSION INTEGER NOT NULL, BROKERID VARCHAR(100))
imq.persist.jdbc.table.IMQCCREC35
用于创建配置更改记录表的 SQL 命令。
示例:
CREATE TABLE ${name} (RECORDTIME BIGINT NOT NULL, RECORD BLOB(10k))
imq.persist.jdbc.table.IMQDEST35
用于创建目标表的 SQL 命令。
示例:
CREATE TABLE ${name} (DID VARCHAR(100) NOT NULL, DEST BLOB(10k), primary key(DID))
imq.persist.jdbc.table.IMQINT35
用于创建 Interest 表的 SQL 命令。
示例:
CREATE TABLE ${name} (CUID BIGINT NOT NULL, INTEREST BLOB(10k), primary key(CUID))
imq.persist.jdbc.table.IMQMSG35
用于创建消息表的 SQL 命令。
示例:
CREATE TABLE ${name} (MID VARCHAR(100) NOT NULL, DID VARCHAR(100), MSGSIZE BIGINT, MSG BLOB(1m), primary key(MID))
MSG 列的默认最大长度为 1 Megabyte (1m)。如果希望消息超过该长度,请对长度进行相应的设置。如果已经创建了这些表,则需要重新创建它们以进行更改。
imq.persist.jdbc.table.IMQPROPS35
用于创建属性表的 SQL 命令。
示例:
CREATE TABLE ${name} (PROPNAME VARCHAR(100) NOT NULL, PROPVALUE BLOB(10k), primary key(PROPNAME))
imq.persist.jdbc.table.IMQILIST35
用于创建 Interest 状态表的 SQL 命令。
示例:
CREATE TABLE ${name} (MID VARCHAR(100) NOT NULL, CUID BIGINT, DID VARCHAR(100), STATE INTEGER, primary key(MID, CUID))
imq.persist.jdbc.table.IMQTXN35
用于创建事务表的 SQL 命令。
示例:
CREATE TABLE ${name} (TUID BIGINT NOT NULL, STATE INTEGER, TSTATEOBJ BLOB(10K), primary key(TUID))
imq.persist.jdbc.table.IMQTACK35
用于创建事务确认表的 SQL 命令。
示例:
CREATE TABLE ${name} (TUID BIGINT NOT NULL, TXNACK BLOB(10k))
所有代理配置属性的值都可以使用 -D 命令行选项进行设置。如果某个数据库要求设置某些特定的数据库属性,也可以在启动代理 (imqbrokerd) 时使用 -D 命令行选项进行设置,或者使用数据库管理器实用程序 (imqdbmgr) 进行设置。
示例:
以 PointBase 嵌入式数据库为例,可以使用 -D 命令行选项定义 PointBase 系统目录,而不是在数据库连接 URL 中指定数据库的绝对路径(如表 B-1 示例中所示):
-Ddatabase.home=IMQ_VARHOME/instances/instanceName/dbstore
在这种情况下,可以分别将用于创建和打开数据库的 URL 简单指定为:
imq.persist.jdbc.createdburl=jdbc:pointbase:embedded:dbName;new
和
imq.persist.jdbc.opendburl=jdbc:pointbase:embedded:dbName
数据库管理器实用程序 (imqdbmgr)Message Queue 为设置持久性所需的架构提供了数据库管理器实用程序 (imqdbmgr)。当 Message Queue 数据库表被损坏或者您希望使用不同的数据库作为数据存储时,也可以使用该实用程序删除数据库表。
本节介绍了基本的 imqdbmgr 命令语法,提供了一个子命令列表,并概述了 imqdbmgr 命令选项。
imqdbmgr 命令的语法
imqdbmgr 命令的一般语法如下:
imqdbmgr subcommand argument [options]imqdbmgr -h|-helpimqdbmgr -v|-version
请注意,如果指定 -v 或 -h 选项,将不会执行命令行中指定的子命令。例如,输入以下命令将显示版本信息,而不执行 create 子命令。
imqdbmgr create all -v
imqdbmgr 子命令
表 B-2 列出了数据库管理器实用程序 (imqdbmgr) 包含的子命令:
imqdbmgr 命令选项概述
表 B-3 列出了 imqdbmgr 命令的选项。
表B-3imqdbmgr 选项
选项
说明
-Dproperty=value
将指定的属性设置为指定值。
-b instanceName
指定代理实例名称并使用对应的实例配置文件。
-h
显示使用帮助。不在命令行执行其他命令。
-p password
指定数据库密码。
-u name
指定数据库用户名。
-v
显示版本信息。不在命令行执行其他命令。