使用wsadmin脚本创建MQQueueConnectionFactory - JACL篇第一部分
在处理一些冗长的Java代码时,我遇到了这个巨大的沙堆,它耗尽了我仅存的每一分耐心。这是我们每两天都会面临的困境:配置!!
当我讽刺的内心却在向我表示祝贺。现在,你到底期望我如何开始配置?
那么,我的具体问题是什么?我有一个MQ、工厂、数据源、提供者等的列表需要配置。每次在RAD(Rational Application Developer)上创建新配置文件时,我都必须手动进入管理控制台进行配置。
凭借我所熟悉的那点无用的Linux知识,我无法忍受点击操作,至少在编程时是这样。
由于我正在使用WebSphere,而它在所有这些名称中是个大块头,我以为开发人员会很聪明,至少为像我这样的人提供了一些内置工具。好吧,猜猜看,我是对的。
IBM提供了两种脚本语言:
如果我没记错的话,JACL将在未来的版本中被弃用,而Jython将成为我们的脚本工具。
在本文中,我将简要介绍JACL,并在下一版本中转向Jython,届时我们将能够在WebSphere中配置数据源。
那么,JACL到底是什么?或者发音为“JACKAL”。
Jacl,即Java命令语言,非常类似于/是tcl脚本语言的Java版本。它运行在JVM上,就像我们听说的JRuby一样,解释器完全用Java编写。
有关语言本身的更多详细信息,您可以访问这里。
让我们开始正题:如何使用wsadmin和JACL创建WebSphere MQ连接工厂。
您可能已经拥有队列的一些详细信息,但有些需要提取。
步骤1
识别工厂的提供者。默认情况下这是它的名称。如果您使用不同的名称创建了新的提供者,请在此处指定。
1
|
set tmp1 "WebSphere MQ JMS Provider"
|
步骤2
现在您需要找到服务器的单元名称和节点名称。
我的WebSphere配置文件节点配置文件的典型位置如下:
1
|
C:\Programs\IBM\Rational\SDP\6.0\runtimes\base_v6\profiles\test_wsp\config\cells\BNode05Cell\nodes\BNode05
|
此位置中的单元名称在\cells\之后,即BNode05Cell。
节点名称在末尾\nodes\之后,即BNode05。
1
|
set newjmsp [$AdminConfig getid /Cell:CELLNAMECell/Node:NODENAME/JMSProvider:$tmp1/]
|
步骤3
现在您需要指定工厂属性。
我计划设置的属性如下:
名称、jndiName、QueueManager、sname、端口、通道、ttype、xaenabled。
要检查工厂所需的参数,您可以在wsadmin控制台上运行以下命令:
1
|
$AdminConfig required WASQueueConnectionFactory
|
示例输出:
1
2
3
4
|
wsadmin $AdminConfig required WASQueueConnectionFactory
Attribute Type
name String
jndiName String
|
我在哪里可以找到wsadmin?
它通常位于服务器的bin目录中。
在我的情况下,它位于我的RAD安装目录中:
1
|
../Rational/SDP/6.0/runtimes/base_v6/bin
|
要调用wasadmin,只需打开终端并移动到bin目录,然后输入wsadmin即可调用。这样做将调用默认配置文件。如果要指定配置文件,请使用开关-profileName YOURPROFILENAME
。
要查看所有必需和可选参数,请在控制台上写入以下命令:
1
|
$AdminConfig attributes WASQueueConnectionFactory
|
示例输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
wsadmin $AdminConfig attributes WASQueueConnectionFactory
"XAEnabled boolean"
"authDataAlias String"
"authMechanismPreference ENUM(BASIC_PASSWORD, KERBEROS)"
"category String"
"connectionPool ConnectionPool"
"description String"
"jndiName String"
"logMissingTransactionContext boolean"
"manageCachedHandles boolean"
"mapping MappingModule"
"name String"
"node String"
"preTestConfig ConnectionTest"
"propertySet J2EEResourcePropertySet"
"provider J2EEResourceProvider@"
"providerType String"
"serverName String"
"sessionPool ConnectionPool"
"xaRecoveryAuthAlias String"
|
我为那些使用额外选项的人添加了一些额外的可选参数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
set name [list name NAME]
set jndi [list jndiName jms/JNDINAME]
set qManager [list queueManager QMANAGER]
set sname [list host HOSTNAME]
set port [list port 1414]
set channel [list channel CHANNEL]
set ttype [list transportType CLIENT]
set xa [list XAEnabled True|false]
|
步骤4
现在将所有参数设置在一个字符串中,以便它们可以作为一体传递给命令。
1
|
set mqcfAttrs [list $name $jndi $qManager $sname $port $channel $ttype $xa]
|
步骤5
现在使用以下命令创建工厂。这将把工厂添加到步骤2中提到的节点和单元。
1
|
$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs
|
创建后,它不会被保存,仅保留在当前会话中。因此,要保存它,请运行以下命令。您应该全部设置好了。
您也可以将此脚本保存在本地系统的文件中。并通过将其传递给wasadmin来运行它。以下是一个示例命令:
1
|
wsadmin -profileName test_wsp -f $SCRIPT_FILENAME_LOCATION$
|
完整代码列表如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
set tmp1 "WebSphere MQ JMS Provider"
set newjmsp [$AdminConfig getid /Cell:CELLNAMECell/Node:NODENAME/JMSProvider:$tmp1/]
set name [list name NAME]
set jndi [list jndiName jms/JNDINAME]
set qManager [list queueManager QMANAGER]
set sname [list host HOSTNAME]
set port [list port 1414]
set channel [list channel CHANNEL]
set ttype [list transportType CLIENT]
set xa [list XAEnabled false]
set mqcfAttrs [list $name $jndi $qManager $sname $port $channel $ttype $xa]
$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs
$AdminConfig save
|