上一章 目录 索引 下一章 |
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 的数据存储

> 1. 在代理的配置文件中设置 JDBC 相关属性。

> 请参见表 B-1 中列出的属性文档。

> 2. 在以下路径中放置一个 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

> 3. 创建 Message Queue 持久性所需的数据库架构。

> 使用 imqdbmgr create all 命令（对于嵌入式数据库）或者 imqdbmgr create tbl 命令（对于外部数据库）。请参见“数据库管理器实用程序 (imqdbmgr)”。

> 示例：

> 1. 转到 imqdbmgr 所在的目录。

> cd /usr/bin（在 Solaris 平台上）

> cd /opt/imq/bin（在 Linux 平台上）

> cd IMQ_HOME/bin（在 Windows 平台上）

> 2. 输入 imqdbmgr 命令。

> imqdbmgr create all

> 注意 | 如果使用嵌入式数据库，建议在以下目录中创建数据库架构： /instances/instanceName/dbstore/dabatabseName。 如果嵌入式数据库没有设置用户名和密码保护，则可能设置了文件系统权限保护。要确保代理能够对数据库进行读写操作，运行该代理的用户应该是使用 imqdbmgr 命令创建该嵌入式数据库的同一个用户（请参见“数据库管理器实用程序 (imqdbmgr)”）。

> ##

> JDBC 相关的代理配置属性

> 代理的实例配置文件位于一个目录中，该目录用与此配置文件相关联的代理实例的名称 (instanceName) 标识（请参见附录 A“Message Queue 数据的位置”）：

> /instances/instanceName/props/config.properties

> 如果该文件尚不存在，必须使用 -name instanceName 选项启动代理，以便 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) 包含的子命令：

> 表 B-2 imqdbmgr 子命令

> 子命令和参数 | 说明
> --- | ---
> create all | 创建一个新的数据库和 Message Queue 持久性存储库架构。此命令用于嵌入式数据库系统，使用时需指定 imq.persist.jdbc.createdburl 属性。
> create tbl | 在现有数据库系统中创建 Message Queue 持久性存储库架构。此命令用于外部数据库系统。
> delete tbl | 删除当前持久性存储库数据库中的现有 Message Queue 数据库表。
> delete oldtbl | 删除早期版本的持久性存储库数据库中的所有 Message Queue 数据库表。将持久性存储库自动迁移至 Message Queue 当前版本后使用。
> recreate tbl | 删除当前持久性存储库数据库中的现有 Message Queue 数据库表，然后重新创建 Message Queue 持久性存储库架构。
> reset lck | 对锁进行重置，以便其他进程可以使用该持久性存储库数据库。

> ### imqdbmgr 命令选项概述

> 表 B-3 列出了 imqdbmgr 命令的选项。

> 表B-3imqdbmgr 选项

> 选项 | 说明
> --- | ---
> -Dproperty=value | 将指定的属性设置为指定值。
> -b instanceName | 指定代理实例名称并使用对应的实例配置文件。
> -h | 显示使用帮助。不在命令行执行其他命令。
> -p password | 指定数据库密码。
> -u name | 指定数据库用户名。
> -v | 显示版本信息。不在命令行执行其他命令。

> 上一章 目录 索引 下一章

> 版权所有 2004 Sun Microsystems, Inc. 保留所有权利。