业务整合
4.1 创建运行环境
在介绍概念时我们提到 WebSphere Message Broker 运行环境中含有三个组件:代理、配置 管理器、用户名服务器。其中代理和配置管理器都需要相应的数据库和队列管理器支撑,两者 可以建立在同一个队列管理器之上。我们假定代理名为 WBRK,对应的数据库为 WBRKDB,
队列管理器为 WBRKQM。配置管理器采用缺省名为 ConfigMgr,它的数据库缺省名为 BERNARD,且与代理共享队列管理器 WBRKQM。一个简单的运行环境如图 4-1 所示。
图 4-1 一个简单的运行环境
4.1.1 选择用户
首先,在 Windows 中执行 WMB 命令创建各组件的用户也必须具有 Administrators 组用户 权限。其次,Windows 中 WMB 的各个组件都以服务方式运行,所以要选择一个同时属于 mqbrkrs 和 mqm 组用户或者属于 Administrators 组用户来运行该组件,该用户标识也称为组件 的服务用户标识(ServiceUserId)。另外,访问队列管理器和数据库也需要合适的用户及权限。
为了简单起见,我们可以沿用第 2 章中安装时的 Administrators 组用户登录并创建运行环 境,并将其赋予各个组件的 ServiceUserId。我们在这里假定用户名为 demo,密码为 demo4me,
它属于 Administrators 组。由于在第 2 章中以该用户身份登录并执行了 WMB 的安装全过程,
故该用户也属于 mqbrkrs 和 mqm 组。再以该用户创建队列管理器和数据库,所以它也应该拥 有相关的全部访问权限。
执行 WebSphere Message Broker 命令行需要命令窗口环境,可以在 WMB 程序组中的“命 令控制台”中运行 WMB 控制命令,也可以在普通命令行窗口中执行 mqsiprofile.cmd 使其具
有 WMB 命令窗口环境,然后再执行各种控制命令。例如:
C:\>c:\mqsi\6.0\bin\mqsiprofile.cmd C:\>mqsilist
4.1.2 创建队列管理器
然后,让我们来创建并启动队列管理器 WBRKQM,配置并启动其中的 TCP/IP 1414 端口 侦听器 L。可以用 dspmq 和 netstat 命令检查队列管理器和侦听器的运行状态。
C:\>crtmqm WBRKQM C:\>strmqm WBRKQM C:\>runmqsc WBRKQM
define listener(L)trptype(TCP)port(1414)control(QMGR) start listener(L)
end C:\>dspmq
QMNAME(WBRKQM) STATUS(正在运行)
C:\>netstat -an
TCP 0.0.0.0:1414 0.0.0.0:0 LISTENING 4.1.3 创建数据库
接着,让我们来创建数据库 WBRKDB。这里假定代理使用的是轻量级数据库 Derby,在 第一次创建 Derby 数据库时需要指定数据库网络服务器引擎的管理员用户及端口(缺省为 1527)。在以后再次创建其他 Derby 数据库时可以复用同一个网络服务器,而无需指定用户名、
密码、端口等信息。创建成功后,可以用 mqsilist 命令来查看当前的 WMB 组件,可以看到网 络服务器实例(DatabaseInstanceMgr6)。
C:\>mqsicreatedb WBRKDB -i demo -a demo4me -p 1527 -e Derby BIP9824I: 正在创建 DatabaseInstanceMgr Service 组件。
BIP9832I: 正在启动 DatabaseInstanceMgr Service 组件。
BIP9828I: 正在连接到端口 1527 上的 Cloudscape Network Server。
BIP9809I: 正在创建 Derby 数据库“WBRKDB”,这可能要花一段时间。
BIP9829I: 正在对 Derby 数据库“WBRKDB”进行分类。
BIP9818I: 使用 IBM Cloudscape/Apache Derby 创建“WBRKDB”数据库。
C:\>mqsilist
BIP8099I: DbInstMgr: DatabaseInstanceMgr6 -
我们可以在 Windows 本地服务中看到自动增添并启动的服务条目 IBM WebSphere Message Broker component DatabaseInstanceMgr6,还可以在系统 ODBC 数据源中观察到自动添加的 WBRKDB 数据源。具体的Derby 数据库WBRKDB 创建在<MQSI_Runtime_Dir>\common\dbinstmgr 目录下。
创建数据库时,需要注意:
(1)Derby 数据库共享一个网络服务器,所以无论用 mqsicreatedb 创建多少个 Derby 数 据库,用 mqsilist 都只能观察到一个实例。Derby 数据库可以用 mqsideletedb 删除,当网络 服务器中的最后一个 Derby 数据库都被删除后,DatabaseInstanceMgr6 服务也会随之被停止 并删除。
(2)如果使用的是商用数据库(如 DB2、Oracle 等),则用相应的命令创建数据库。例 如,DB2 数据库的创建命令为:C:\>db2 "create db WBRKDB"
4.1.4 创建配置管理器
有了前面创建的队列管理器,我们便可以创建配置管理器了,在 mqsicreateconfigmgr 命 令中需要指定 ServiceUserId 及相关的队列管理器名,在 Windows 中可以不必指定配置管理器 名,缺省为 ConfigMgr。创建成功后,可以用 mqsilist 命令来查看当前的 WMB 组件,可以看 到配置管理器(ConfigMgr)。我们可以用 mqsistart 命令将其启动,也可以在 Windows 的服务 中用图形管理界面启动。
C:\>mqsicreateconfigmgr -i demo -a demo4me -q WBRKQM C:\>mqsilist
BIP8099I: ConfigMgr: ConfigMgr - WBRKQM BIP8099I: DbInstMgr: DatabaseInstanceMgr6 - C:\>mqsistart ConfigMgr
我们可以在 Windows 本地服务中看到自动增添的服务条目 IBM WebSphere Message Broker component ConfigMgr。ConfigMgr 相关的数据库是一个以 Derby 内置方式运行的数据 库,名为 BERNARD,不由网络服务器实例(DatabaseInstanceMgr6)管理,数据库实体创建 在<MQSI_Runtime_Dir>\components\ConfigMgr 目录下。
4.1.5 创建代理
创建代理的命令 mqsicreatebroker 语法上类似于创建配置管理器的命令,在命令中需要指 定代理名(WBRK)、ServiceUserId 以及前面创建的队列管理器名和数据库名。创建成功后,
可以用 mqsilist 命令来查看当前的 WMB 组件,可以看到代理(WBRK)。我们可以在 Windows 本地服务中看到自动增添的服务条目 IBM WebSphere Message Broker component WBRK,可以 用 mqsistart 命令将其启动,也可以在 Windows 的服务中用图形管理界面启动。
C:\>mqsicreatebroker WBRK -i demo -a demo4me -q WBRKQM -n WBRKDB C:\>mqsilist
BIP8099I: ConfigMgr: ConfigMgr - WBRKQM BIP8099I: DbInstMgr: DatabaseInstanceMgr6 - BIP8099I: Broker: WBRK - WBRKQM C:\>mqsistart WBRK
4.1.6 查看组件数据库
前面创建组件的过程中创建了 Derby 数据库 BERNARD 和 WBRKDB,可以用 Derby 的命 令行工具 ij 来查看数据库中的内容。由于 BERNARD 数据库是由配置管理器独占的,以 Derby 内置方式运行,所以要访问 BERNARD 数据库,则首先要停止配置管理器的运行,并且将当 前目录移至 BERNARD 所在路径。WBRKDB 数据库则是由 Derby 网络服务器管理,可以并行 访问,无须停止 WBRK 代理。
连接 BERNARD 数据库。
C:\>mqsistop ConfigMgr
cd C:\Documents and Settings\All Users\Application Data\IBM\MQSI\components\ConfigMgr set CLASSPATH=C:\MQSI\6.0\classes\derby.jar;
C:\MQSI\6.0\classes\derbytools.jar;%CLASSPATH%
java -Dij.driver=org.apache.derby.jdbc.EmbeddedDriver -Dij.protocol=jdbc:derby: org.apache.derby.tools.ij ij> connect 'BERNARD';
连接 WBRKDB 数据库。
set CLASSPATH=C:\MQSI\6.0\classes\db2jcc.jar;
C:\MQSI\6.0\classes\db2jcc_license_c.jar;
C:\MQSI\6.0\classes\derbynet.jar;
C:\MQSI\6.0\classes\derbytools.jar;%CLASSPATH%
java -Dij.user=demo -Dij.password=demo4me -Dij.driver=com.ibm.db2.jcc.DB2Driver -Dij.protocol=jdbc:derby:net://
localhost:1527/ org.apache.derby.tools.ij ij> connect 'WBRKDB';
Derby 数据库是一个纯 Java 的数据库,可以执行标准的 SQL-92 操作。在 ij 工具中可以直 接使用 SQL 来访问数据库,所有的 ij 命令以分号“;”结束。
列出数据库中所有的 schema 名。
select CHAR(schemaname, 20)schema_name, CHAR(authorizationid, 20)authorization_id from sys.sysschemas;
列出数据库中所有的表名。
select CHAR(schemaname, 20)schema_name, CHAR(tablename, 20)table_name, CHAR(tabletype, 10)
table_type
from sys.systables TABLES, sys.sysschemas SCHEMAS where TABLES.schemaid = SCHEMAS.schemaid;
查看指定表的结构。
select CHAR(tablename, 20)table_name, CHAR(columnname, 20)column_name, CHAR(columndatatype, 55)column_data_type, CHAR(columndefault, 20)column_default
from sys.syscolumns COLUMNS, sys.systables TABLES where COLUMNS.referenceid = TABLES.tableid and TABLES.tablename = 'BROKERAA';
查看指定表中的数据内容。
select * from BROKERAA;
退出 ij(同时会自动断开数据库连接)。
exit;