然后我们要配置WebSphere MQ队列连接工厂,该连接工厂将指向一个已经配置好的Websphere MQ的队列管理器,它的名称是dcmp2,端口1415,通道名c1。附带说明一下Websphere MQ也有自己的命令行工具,可以用于创建队列管理器、本地队列等。脚本cf.jacl:
#指定cell set myCell zxhNode01Cell #指定要配置的node set myNode zxhNode01 set jmsp [$AdminConfig getid "/Cell:$myCell/Node:$myNode/JMSProvider:WebSphere MQ JMS Provider/"] $AdminConfig attributes MQQueueConnectionFactory set name [list name cf] set jndi [list jndiName mq/cf] set description [list description 描述信息] set transportType [list transportType CLIENT] set queueManager [list queueManager dcmp2] set ccsid [list CCSID 1381] set host [list host 192.168.0.10] set port [list port 1415] set channel [list channel c1] set xa [list XAEnabled true] set mqqcfAttrs [list $name $jndi $description $transportType $queueManager $ccsid $host $port $channel $xa] set template [lindex [$AdminConfig listTemplates MQQueueConnectionFactory] 0] $AdminConfig createUsingTemplate MQQueueConnectionFactory $jmsp $mqqcfAttrs $template $AdminConfig save
上述脚本建立了连接工厂,而且特别指定它要支持分布式事务(二阶段提交协议)。
现在可以在这个工厂内创建队列了,脚本queue.jacl:
#指定cell set myCell zxhNode01Cell #指定要配置的node set myNode zxhNode01 set jmsp [$AdminConfig getid "/Cell:$myCell/Node:$myNode/JMSProvider:WebSphere MQ JMS Provider/"] $AdminConfig attributes MQQueue set name [list name test] set jndi [list jndiName mq/test] set baseQueue [list baseQueueName test] set target [list targetClient MQ] set baseManager [list baseQueueManagerName dcmp2] set mqqAttrs [list $name $jndi $baseQueue $target $baseManager] set template [lindex [$AdminConfig listTemplates MQQueue] 0] $AdminConfig createUsingTemplate MQQueue $jmsp $mqqAttrs $template $AdminConfig save
该脚本创建了一个jndi名为mq/test的队列,并且指定了它映射的WMQ本地队列是test,也指定了它映射的WMQ的队列管理器名称,这是可选的,如果不写的话,它会采用队列连接工厂的设置。需要特别说明的是,我们指定了目标客户机是MQ(它的默认值是JMS),二者的区别在于,如果是JMS的话,那么队列上保存的将是Java对象,即使你发送的是TextMessage,保存的也是一个java String对象。如果是MQ的话,保存的就是纯文本。
假设我们的应用中会有一个消息bean监听mq/test队列,那么我们就需要建立对应的消息侦听器端口(listening port)。脚本listener.jacl:
#指定cell set myCell zxhNode01Cell #指定要配置的node set myNode zxhNode01 set myServer server1 set server [$AdminConfig getid /Cell:$myCell/Node:$myNode/Server:$myServer/] set mls [$AdminConfig list MessageListenerService $server] set new [$AdminConfig create ListenerPort $mls {{name test}{destinationJNDIName mq/test}{connectionFactoryJNDIName mq/cf}}] $AdminConfig create StateManageable $new {{initialState START}} $AdminConfig save
该脚本指定了侦听器端口的名称,它对应的队列的jndi名,它对应的连接工厂的jndi名。
资源建立完成,现在部署我们的应用程序,脚本deploy.jacl:
set myCell zxhNode02Cell set myNode zxhNode02 set myServer server1 $AdminApp install "E:/DCMP2.0/code/MyApp.ear" $AdminConfig save set appManager [$AdminControl queryNames cell=$myCell,node=$myNode,type=ApplicationManager,process=$myServer,*] $AdminControl invoke $appManager startApplication MyApp
该脚本部署了我们自己的应用程序并且启动它,基本的部署工作至此完成。上述脚本在WAS 6.0 Net Deploy和WAS6.0 Express两个版本上测试通过。