Sun Java logo     上一章      目录      索引      下一章     

Sun logo
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 相关属性。
  2. 请参见表 B-1 中列出的属性文档。

  3. 在以下路径中放置一个 JDBC 驱动程序 jar 文件的副本或符号链接:
  4. /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

  5. 创建 Message Queue 持久性所需的数据库架构。
  6. 使用 imqdbmgr create all 命令(对于嵌入式数据库)或者 imqdbmgr create tbl 命令(对于外部数据库)。请参见“数据库管理器实用程序 (imqdbmgr)”

    示例:

    1. 转到 imqdbmgr 所在的目录。
    2. cd /usr/bin(在 Solaris 平台上)

      cd /opt/imq/bin(在 Linux 平台上)

      cd IMQ_HOME/bin(在 Windows 平台上)

    3. 输入 imqdbmgr 命令。
    4.  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) 包含的子命令:

表 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. 保留所有权利。