级别: 初级 曹 世锋 (caoshif@cn.ibm.com), 解决方案专家 张 羽 (alfzhang@cn.ibm.com), 解决方案专家 兰 建忠 (lanjz@cn.ibm.com), 解决方案专家 拱 旭升 (gongxsh00@cn.ibm.com), 解决方案专家
2007 年 1 月 31 日 MQ_Tuxedo 是一套基于消息中间件 IBM WebSphere MQ 来整合 Tuxedo 应用的适配器。MQ_Tuxedo 可以支持用户在 Java 环境下使用同步请求/回复,异步请求/回复,会话等方式来调用基于 Tuxedo 的应用所提供的服务。其中,对会话方式的支持是 MQ_Tuxedo 独特于其他 Tuxedo 适配器(比如 XMLink,BEA Jolt 等)地方,也是 MQ_Tuxedo 的创新点。本文通过示例介绍了此解决方案。
一 项目背景
1 企业应用系统整合过程中的问题
随着企业IT信息化的进一步发展,越来越多的企业在关注如何解决企业多个应用系统之间的全方位整合,使企业的应用、数据、流程能够得到进一步改善,提高企业的运营效率。IBM在帮助企业进行应用整合的时候,面临的一个问题是:在目前国内的很多银行、电信、移动等企业,核心系统都是基于交易中间件Tuxedo开发的,如何来整合基于交易中间件Tuxedo开发的企业应用?
Tuxedo应用是基于标准C开发,并且通过BEA Tuxedo产品包装成service,而IBM的WebSphere应用解决方案是基于开放框架J2EE设计的,因此如何使用适当的适配器产品整合WebSphere和Tuxedo相关应用是急需解决的一个问题。
2 已有解决方案
Prolifics公司开发的XMLink是一种专门用于对基于BEA Tuxedo交易中间件技术开发的应用系统的数据、业务整合的适配器产品。该适配器全称为XMLink Tuxedo Adapter。它可以将J2EE应用程序连接到基于BEA Tuxedo开发的服务上,特别适用于基于IBM WebSphere Application Server开发的EJB, Servlet 和 JSP,以及基于WebSphere Business Integration Family开发的相应流程、服务等。
如下图所示,XMLink的架构是完全符合J2C/J2EE架构规范的,它就是针对Tuxedo专门实现的J2C连接器。因此可以方便的跟其它Java应用进行互联互通。
图1 XMLink体系结构示意图
XMLink提供了一个资源适配器并且支持两种情形的部署场景。J2EE资源适配器不但能够在有应用服务器(比如IBM WebSphere Application Server)的环境中运行,而且能够在独立的Java应用程序中被调用执行。
就像J2C架构一样,XMLink架构也同样提供了相应的访问方式:JavaBeans、Servlet、JSP和EJB。
XMLink Tuxedo Adapter允许用户将任何已有的BEA Tuxedo应用无缝地集成到一个Java应用中,无论该应用是否部署在应用服务器上。XMLink只需要标准的Tuxedo配置就能完成相关功能。这使得用户可以方便快捷地访问Tuxedo标准层中的相关服务。
在Tuxedo中,使用IPC(Inter-Process Communication)消息队列等方式实现了在客户端和服务器端之间服务请求的传递。这些消息被封装在相应的缓冲区中。XMLink使用已有的IPC等配置方式,来跟相应的数据缓冲区交互数据,从而连接到Tuxedo的指定服务。
在这个过程中,XMLink就像其它Tuxedo客户端一样,使用ATMI (Application to Transaction Monitor Interface) 层来连接到Tuxedo。相应的,ATMI接口来控制信息交互、事务处理、数据缓冲区管理等功能。
根据XMLink在前图的J2C连接器架构中所处的位置,我们把它进一步细化,如下图所示:
图2 XMLink体系结构示意图
如上图所示,XMLink可以实现以下操作:
1. XMLink是一个J2EE/JCX实现。通过它的Tuxedo适配器,将J2EE调用行为转换成为Tuxedo API调用行为。
2. XMLink的适配器层处于J2EE/JCX和Tuxedo之间。该适配器层的职责是将Java输入流转换成Tuxedo本地缓冲区的流(反之亦然),并且通过Tuxedo的链接池进行相应调用。
3. XML parser验证从客户端提交的Java流并转换成为XML流,同时也验证反向的XML流并转换成为Java流。
XMLink提供了一个无状态会话Bean的组件,它可以读取外部的XML格式的配置文件,从而实现指定的用户业务服务调用。
3 新的解决方案:MQ_Tuxedo
MQ_Tuxedo是我们开发的一套基于消息中间件IBM WebSphere MQ来整合Tuxedo应用的适配器。MQ_Tuxedo可以支持用户在Java环境下使用同步请求/回复,异步请求/回复,会话等方式来调用基于Tuxedo的应用所提供的服务。其中,对会话方式的支持是MQ_Tuxedo独特与其他Tuxedo适配器(比如XMLink,BEA Jolt等)地方,也是MQ_Tuxedo的创新点。
二 IBM WebSphere MQ安装和配置
本节介绍IBM WebSphere MQ的安装和配置。WebSphere MQ包括服务端和客户端,下面分别予以介绍。
1 WebSphere MQ服务端的安装和配置
本节以WebSphere MQ Windows V5.3版为例来介绍WebSphere MQ服务端在Windows XP(sp2) 下的安装和配置。
Windows下WebSphere MQ 服务端的安装:
(1)把WebSphere MQ Windows版服务器CD-ROM插入CD-ROM驱动器。
(2)如果安装了自动运行,那么会启动安装进程。如果不启动,则双击CD-ROM上的根目录中的Setup图标以启动安装程序。
(3)请等待,直到出现"WebSphere MQ 安装启动板"窗口为止。
(4)如果需要更改安装的本地语言,单击"选择语言"图标,然后从列表中选择所需的语言。
(5)选择必备软件选项。
选择典型安装后,安装界面上的每个安装项右边有一个对钩号(表示已安装),反之则为一个叉号(表示还没有安装,如果要装MQ,则必须先把这些软件装好)。
如果出现了叉号:
1)单击项目左边的"+"号以显示安装连接;
2)选择要使用的安装源的选项,从以下各项选择:
(6)安装完成时,单击项目左边的"-"符号。
注意:对于定制安装,可能不需要所有的必备软件。
(7)安装完所有的必备软件,然后选择"网络先决条件"选项。
(8)选择"WebSphere MQ"安装选项。
(9)选择启动WebSphere MQ安装程序,然后等待,直到显示了带有欢迎信息的"WebSphere MQ安装"窗口为止。
(10)单击"下一步"按钮继续。
(11)阅读面板上的信息和许可证条款,选择接受,然后单击"下一步"。
(12)如果机器上未安装过此产品的前一个版本,则显示"安装类型"面板。
选择希望的安装类型(一般选择"典型"安装即可),然后单击"下一步"按钮。
(13)"WebSphere MQ安装"窗口显示"安装WebSphere MQ就绪"信息。该窗口还显示用户选中的安装摘要,单击"安装"开始正式安装。
(14)成功安装WebSphere MQ后,"WebSphere MQ安装"窗口显示以下信息:安装向导成功完成。
(15)单击"完成"按钮启动"准备WebSphere MQ"向导。
验证安装:
(1)创建名为venus.queue.manager的默认队列管理器。
在DOS窗口命令提示符下,输入以下命令:
crtmqm -q venus.queue.manager
|
(2)启动刚才创建的队列管理器。
在DOS窗口命令提示符下,输入以下命令:
strmqm venus.queue.manager
|
(3)启动MQSC命令。
在DOS窗口命令提示符下,输入以下命令:
runmqsc venus.queue.manager
|
(4)新建名为orange.queue的本地队列。
输入以下命令:
define qlocal (orange.queue)
|
注意:MQSC中任何小写字母将自动转换成大写,除非用单引号将它们括起来。这意味着如果使用名称Orange.Queue创建了队列,则记住在MQSC以外其他命令中都必须使用Orange.Queue。
(5)停止MQSC。
输入以下命令:
现在,我们已经定义了以下对象:
(1)名为venus.queue.manager的默认队列管理器。
(2)名为ORANGE.QUEUE的队列。
测试对象:要测试队列管理器和队列,请使用样本程序amqsput(将消息放入队列)和amqsget(从队列获取消息),步骤如下:
(1)启动DOS窗口,进入到C:\Program Files\IBM\WebSphere MQ\bin目录下。
(2)将消息放入队列。
输入以下命令:
显示以下消息:
Sample amqsput0 start
Target queue is ORANGE.QUEUE
|
(3)输入一些字符数据,然后双击"Enter"键,则显示以下消息:
现在消息已经被放在队列中了。
(4)要从队列中获取消息,输入以下命令:
在屏幕上将显示您刚才输入的字符数据消息。暂停后,例子程序结束。
如果以上步骤都能完成,则完成了本地安装的验证。
注意:如果在任何阶段中断整个安装过程,则应该从头开始重新运行安装。
2 WebSphere MQ客户端的安装和配置
如果我们开发的基于MQ的应用与MQ服务器不在同一台机器上,那么就必须在MQ应用端安装MQ客户端。下面我们以在Suse Linux 10下安装WebSphere MQ v6.0 Client为例介绍MQ客户端在Linux下的安装和配置步骤。
(1)解压缩MQ客户端安装包:C84CJML.WebSphere MQ V6.0 Linux x86 Client.tar.gz,命令如下:
tar -xvfz C84CJML.WebSphere MQ V6.0 Linux x86 Client.tar.gz
|
(2)创建WebSphere MQ 必需的文件系统,命令如下:
mkdir /opt/mqm # for product code
mkdir /var/mqm # for working data
|
创建完后效果如下:
图3 创建WebSphere MQ 必需的文件系统
(3)创造MQ用户和用户组,命令如下:
groupadd mqm
useradd -d /var/mqm -g mqm -G mqm mqm
passwd mqm # change password to "password"
|
如下图:
图4 创造MQ用户和用户组
(4)为mqm用户组添加root组
修改 mqm:!:1000:mqm ? mqm:!:1000:mqm,root
如下图:
图5 为mqm用户组添加root组
(5)调整系统参数(视需要而定)
修改最大共享内存,命令如下:
cat /proc/sys/kernel/shmmax
echo 268435456 > /proc/sys/kernel/shmmax
|
修改最大文件句柄,命令如下:
cat /proc/sys/fs/file-max
echo 32768 > /proc/sys/fs/file-max
|
如下图所示:
图6 调整系统参数
(6)转到WebSphere MQ解压后的目录中,获得WebSphere MQ授权,命令如下:
./mqlicense.sh -text_only
|
阅读全文后,选择1接受授权。
如图所示:
图7 获得WebSphere MQ授权
图8 获得WebSphere MQ授权
(7)安装WebSphere MQ客户端,命令如下:
rpm -ivh MQSeriesRuntime-6.0.0-0.i386.rpm
rpm -ivh MQSeriesSDK-6.0.0-0.i386.rpm
rpm -ivh MQSeriesJava-6.0.0-0.i386.rpm
rpm -ivh MQSeriesClient-6.0.0-0.i386.rpm
rpm -ivh MQSeriesSamples-6.0.0-0.i386.rpm
|
(8)安装校验
结果如下则表明MQ 客户端的安装已成功。
MQSeriesRuntime-6.0.0-0
MQSeriesSDK-6.0.0-0
MQSeriesJava-6.0.0-0
MQSeriesClient-6.0.0-0
MQSeriesSamples-6.0.0-0
|
3 WebSphere MQ的服务端和客户端的互联
本节的WebSphere MQ的服务端和客户端不在同一台机器上。
本节以上述1,2两个步骤安装好的MQ服务端和MQ客户端为例,介绍如何配置MQ的服务端和客户端使两者能够互联。
(1)服务端配置
1)点"开始"->"所有程序"->"IBM WebSphere MQ"->"WebSphere MQ 资源管理器",进入WebSphere MQ 资源管理器界面。如下图所示:
图9 服务端配置
2)创建名为"QM_JACK"的队列管理器
<1>选中"队列管理器"->"新建"->"队列管理器",如下图所示:
图10 创建名为"QM_JACK"的队列管理器
<2>在队列管理中输入"QM_JACK",其他选项默认不变,点"下一步":
图11 在队列管理中输入"QM_JACK"
<3>设置队列日志(本步骤采用系统默认设置),点"下一步":
图12 设置队列日志
<4>启动队列管理器,创建服务器连接通道,允许在TCP/IP上进行队列管理器的远程管理,点击"下一步":
图13 创建服务器连接通道
<5>设置队列管理器QM_JACK的侦听端口:8927(用户可以根据需要自行更改端口号),点击"完成"。
图14 设置队列管理器QM_JACK的侦听端口
<6>系统进入等待界面:
图15 系统等待界面
<7>队列管理器QM_JACK创建成功
图16 系统队列管理器QM_JACK创建成功
3)在QM_JACK下创建名为"QUEUE_RECV"和"QUEUE_REPLY"的本地队列(客户可以根据自己的需求随意更改本地队列的名字和数量,这里创建这两个本地队列只是为之后的MQ_Tuxedo项目作准备):
图17 定义本地队列
图18 定义本地队列
设置队列名后其他属性全为系统默认值,点击"确定"。
4)在QM_JACK下创建名为"CNN_JACK"的服务器通道。
图19 创建服务器连接通道
图20 创建服务器连接通道
通道名称设为CNN_JACK,其他选项保留为系统默认设置,点击"确定"。
5)在MQ服务器端的计算机用户中添加MQ客户端所在计算机的系统用户。比如我的MQ客户端被Suse Linux下的root用户使用,那么,我们就需要在MQ的服务端(也就是Windows xp系统中添加名为"root"的用户)所在的计算机系统中添加名为"root"的用户。具体步骤如下:
<1>点击"开始"->"控制面板"->"计算机管理"->"系统工具"->"本地用户和组"->"用户",点右键,选"新用户",如下图所示:
图21 创建系统用户
<2>创建新用户:root(注意:这里的用户名"root"是MQ客户端所在系统的用户名,用户要根据具体情况进行修改)
图22 创建系统用户
随意设置一个有效密码,选中密码永不过期,点击"创建"。
<3>将新用户加入mqm组(注意:这里的mqm组是我们安装完MQ Server后系统自动创建的)。具体操作如下:
图23 设置系统用户所在组
点击"属性":
图24 设置系统用户所在组
点击"添加":
图25 设置系统用户所在组
输入对象名称:mqm,点击"确定":
图26 设置系统用户所在组
root用户被添入mqm组中:
图27 设置系统用户所在组
点击"应用",点击"确定"。
重启机器。至此,MQ服务端的配置完成。
(2)客户端配置
按照我们前面的步骤,MQ客户端是安装在Suse Linux 10 上,所以本节以Suse Linux 10下的MQ Client v6为例说明如何配置MQ客户端才能连上MQ服务器。
1)设置MQSERVER环境变量,命令如下:
export MQSERVER='CNN_JACK/tcp/9.186.110.133(8927)'
|
参数说明:
服务器连接通道名称:CNN_JACK
服务器连接通道协议类型:tcp
服务器IP地址:9.186.110.133
服务器连接通道所在的队列管理器QM_JACK的侦听端口:8927
2)测试客户端与服务端的网络连接
在客户端使用ping命令检查客户端是否能连上服务端机器。
同样,在服务端使用ping命令检查服务端是否能连上客户端机器。
测试完成后,进入下一步。
3)进入/opt/mqm/samp/bin,使用样本程序amqsputc(用来将消息发送到服务端队列)和amqsgetc(用来从服务端队列中读取消息)来测试客户端与服务端的MQ连接是否畅通,具体步骤如下:
<1>输入命令:
./amqsputc QUEUE_RECV QM_JACK
|
则会显示以下消息:
Sample AMQSPUT0 start
target queue is QUEUE_RECV
|
<2>输入一些字符,然后双击"Enter"键,则显示如下信息:
<3>要从队列获取消息,则输入如下命令:
./amqsgetc QUEUE_RECV QM_JACK
|
则会在屏幕上打印出刚才输入的字符数据消息。暂停后,;例子程序结束。
如果以上步骤都能够完成,则完成了MQ服务端和客户端的互联配置。
注意:有时候,MQ客户端联服务端时会因为两端字符集编码CCSID不一样造成连接的失败,典型错误是:MQCONN ended with reason code 2059。在队列管理器的错误日志(位于/var/mqm/errors/AMQERROR**.log)中有如下信息:
-------------------------------------------------------------------------------
08/23/2002 11:51:48
AMQ9541: CCSID supplied for data conversion not supported.
EXPLANATION:
The program ended because,
either the source CCSID '437' or the target CCSID '1381' is not valid,
or is not currently supported.
ACTION:
Correct the CCSID that is not valid, or ensure that the requested CCSID can be supported.
|
解决方法如下:在服务端用runmqsc qmname命令,输入dis qmgr查看CCSID属性值nnnn,在客户端上配置环境变量:
Windows 下:set MQCCSID=nnnn(在服务端看到的CCSID),
Linux下:export MQCCSID=nnnn(在服务端看到的CCSID),
重新启动MQ 客户端机器即可。
三BEA Tuxedo 在Window2000/XP上的安装
本文以BEA Tuxedo 8.1在Window XP上的安装为例,介绍Tuxedo 在Window2000/XP上的安装。
1. 安装前的准备
1.1 硬件要求
安装前,首先要检查机器的硬件是否满足安装Tuxedo的最小要求,一般来说,至少需要128MB的内存,120MB硬盘空间。
1.2 软件要求
为了能使Tuxedo正常运行,需要安装的软件有:
| 软件 | 说明 |
|---|
| C/C++编译器 | 最好能完全安装Visual C/C++6.0 SP4或兼容版本。如果没有VC6,可以使用Microsoft Visual C++ Toolkit 2003和VC6_SP6两个免费工具结合,编译C代码,安装的方法见疑难解答。 | | COBOL编译器 | 如果需要COBOL编程,需要安装Net Express 3.1 (COBOL)或其他的兼容COBOL编译器。 | | Internet浏览器 | 如果要查看联机帮助或运行Tuxedo管理控制台,使用Windows自带的IE6.0即可,或使用Netscape7.0 以上 | | JAVA环境 | 如果要运行Tuxedo管理控制台,则安装J2SDK1.3.1以上版本
LDAP目录服务器 如果需要LDAP功能,需要安装Netscape Enterprise Server |
在上述软件中,如果只做ATMI编程,则只需安装C/C++编译器即可。
1.3 Tuxedo安装文件
Tuxedo的安装文件可以从BEA官方网站上下载,同时可以获得一个30天的试用序列号。下载的网址是http://commerce.beasys.com/showallversions.jsp?family=TUX,其Window XP平台的安装文件为tuxedo81_win.exe,序列号文件为lic.txt。
2. 安装BEA Tuxedo 8.1
在做好准备工作后,就可以运行tuxedo81_win.exe安装Tuxedo了。按照程序中的提示安装,需要注意以下几步:
1.在安装方式选择中,选择Full Install (完全安装)。
图28 选择安装方式
2.选择BEA Home目录。BEA Home目录是所有BEA产品的安装目录,如果已经有了BEA Home,选择即可,如果还没有,则可以创建一个。
图29 选择BEA Home目录
3.设置tlisten密码。运行于同一域 (domain) 的所有机器都必须有相同的tlisten密码,在一台机器上可以设置多个tlisten密码,方法在后文疑难解答中介绍。
图30 设置tlisten密码
4.LDAP for SSL设置。在本例中选择了不支持。
图31 LDAP for SSL Support
5.安装序列号。在向导提示 "Would you like to install your license now?"时,选择yes则开始安装序列号,找到lic.txt文件所在的文件夹,点Next。你也可以在提示的时候选择no,稍后再安装序列号,安装的方法在后文疑难解答中介绍。
图32 安装序列号
现在BEA Tuxedo8.1已经安装好了。
3. 安装后验证
安装后,可以运行Tuxedo附带的例程simpapp检验安装是否成功。
3.1 打开命令行工具
如果使用的Visual C++ 6.0,直接打开"命令提示符"程序即可。
如果使用的是Microsoft Visual C++ Toolkit 2003,则打开 开始'所有程序' Microsoft Visual C++ Toolkit 2003' Visual C++ Toolkit 2003 Command Prompt。
3.2 准备程序文件
从%tuxdir%\samples\atmi(%tuxdir%是Tuxedo的安装目录)中复制simpapp文件夹到新建目录C:\home\me下,将simpapp文件夹重命名为amti。
3.3 修改UBBCONFIG文件
该例程的UBBCONFIG文件是ubbsimple,用文本编辑器打开这个文件,修改以下行:
| 原文 | 修改后 |
|---|
| IPCKEY <Replace with a valid IPC Key> | IPCKEY 123456 | | APPDIR="<Replace with the current directory pathname>" | APPDIR="C:\home\me\atmi" | | TUXCONFIG="<Replace with your TUXCONFIG Pathname>" | TUXCONFIG="C:\home\me\atmi\tuxconfig" | | TUXDIR="<Directory where TUXEDO is installed>" | TUXDIR="%tuxdir%" | | <Machine-name> LMID=simple | LMID=simple |
注意:%tuxdir%是Tuxedo的安装目录,如C:\bea\tuxedo8.1。***处使用安装Tuxedo的计算机名代替,此计算机名中间不能带"-",如果原来的计算机名带"-",则先修改计算机名,然后重启计算机后再继续配置。
3.4 运行例程
如果完成了以上的步骤,则在打开的命令行工具中依次输入如下命令:
cd C:\home\me\atmi
set APPDIR=C:\home\me\atmi
set TUXCONFIG=%APPDIR%\tuxconfig
buildclient -o simpcl -f simpcl.c
buildserver -o simpserv -f simpserv.c -s TOUPPER
tmloadcf -y ubbsimple
tmboot -y
simpcl "hello world"
|
如果返回:
Returned string is: HELLO WORLD
|
则证明Tuxedo安装成功了,用下面命令关闭Tuxedo服务:
4.疑难解答
4.1如何使用微软工具包安装C++编译器
Microsoft Visual C++ Toolkit 2003是微软的免费VC++工具包,用这个工具包可以在命令行下编译C\C++源代码。如果仅安装VCToolkit后运行Tuxedo buildclient或buildserver时会提示缺少lib文件,所以需要结合VC6_SP6使用,步骤如下:
1.装VCToolkitSetup.exe,安装目录:D:\Program Files\Microsoft Visual C++ Toolkit 2003。
2.装VC6_SP6.exe,安装目录:D:\Program Files\vc6。
3.将D:\Program Files\vc6\VC98\Lib下的lib文件拷贝到D:\Program Files\Microsoft Visual C++ Toolkit 2003\lib下,将D:\Program Files\Microsoft Visual Studio\VC98\Include下文件拷贝到D:\Program Files\Microsoft Visual C++ Toolkit 2003\include下(注意,复制时不要覆盖原有文件)。
4.2如何在一台机器上可以设置多个tlisten密码
用文本编辑器打开%tuxdir%\udataobj下的tlisten.pw文件,可以看到安装时设置的密码。在密码后的新行中输入新密码,然后保存。
4.3如何在Tuxedo安装好后安装/升级序列号
如果在Tuxedo安装时没有安装序列号,或者序列号过期,可以使用工具bealic安装/省级序列号。
选择开始->所有程序->BEA WebLogic E-Business Platform->Tuxedo 8.1->bealic,运行bealic程序,如下图,在Source中选择lic.txt文件,点ok即可。
图33 运行bealic更新序列号
也可以用新的lic.txt文件覆盖%tuxdir%\udataobj下的lic.txt文件来更新序列号。
四BEA Tuxedo 在RedHat Linux 9.0上的安装
本文以BEA Tuxedo 8.1在RedHat Linux 9.0上的安装为例,介绍Tuxedo 在Linux系统上的安装。
1.安装前的准备
1.1 硬件要求
安装前,首先要检查机器的硬件是否满足安装Tuxedo的最小要求,一般来说,至少需要256MB的内存,250MB硬盘空间。
1.2 软件要求
为了能使Tuxedo正常运行,需要安装的软件有:
| 软件 | 说明 |
|---|
| C/C++编译器 | gcc egcs-2.96或兼容版本。 | | COBOL编译器 | 如果需要COBOL编程,需要安装Net Express 3.1 (COBOL)或其他的兼容COBOL编译器。 | | Internet浏览器 | 如果要查看联机帮助或运行Tuxedo管理控制台,需要使用Netscape7.0 以上 | | JAVA环境 | 如果要运行Tuxedo管理控制台,则安装J2SDK1.3.1以上版本 | | LDAP目录服务器 | 如果需要LDAP功能,需要安装Netscape Enterprise Server |
在上述软件中,如果只做ATMI编程,则只需安装C/C++编译器即可。
1.3 Tuxedo安装文件
Tuxedo的安装文件可以从BEA官方网站上下载,同时可以获得一个30天的试用序列号。下载的网址是http://commerce.beasys.com/showallversions.jsp?family=TUX。
注意,在RedHat Linux 9.0上安装时,要选择下载Tuxedo 8.1 (Includes Jolt and SNMP Agent) for Novell SuSE Pentium (9, Red Hat 4.0, Turbo Linux V10) 32-bit,其安装文件为tuxedo81_inlnxsles9_x86_32.bin,序列号文件为lic.txt。
2.在图形界面下安装BEA Tuxedo 8.1
在下载了BEA Tuxedo安装文件和序列号后,就可以运行程序安装Tuxedo了。在控制台模式下,切换为root用户,然后切换到存放tuxedo81_inlnxsles9_x86_32.bin文件的目录下,输入如下命令,开启GUI安装界面:
sh tuxedo81_inlnxsles9_x86_32.bin
|
图34 Tuxedo8.1 Linux下安装界面
接下来,按照安装向导的提示开始安装,需要注意以下步骤。
1.在安装方式选择中,选择Full Install (完全安装)。
图35 选择安装方式
2.选择BEA Home目录。BEA Home目录是所有BEA产品的安装目录,如果已经有了BEA Home,选择即可,如果还没有,则可以创建一个。本例创建在/root/bea。
图36选择BEA Home目录
3.设置tlisten密码。运行于同一域 (domain) 的所有机器都必须有相同的tlisten密码,在一台机器上可以设置多个tlisten密码,方法在后文疑难解答中介绍。
图37 设置tlisten密码
4.LDAP for SSL设置。在本例中选择了不支持。
图38 LDAP for SSL Support
5.安装序列号。在向导提示 "Would you like to install your license now?"时,选择yes
图39 安装序列号
则开始安装序列号,找到lic.txt文件所在的文件夹,点Next。你也可以在提示的时候选择no,稍后再安装序列号,安装的方法在后文疑难解答中介绍。
现在BEA Tuxedo8.1已经安装好了。
3.在控制台下模式下安装BEA Tuxedo 8.1
如果希望在控制台下安装Tuxedo,在控制台模式下,切换为root用户,然后切换到存放tuxedo81_inlnxsles9_x86_32.bin文件的目录下,输入如下命令,开始Tuxedo安装
sh tuxedo81_inlnxsles9_x86_32.bin -i console
|
然后按照程序的提示安装。
4.安装后验证
安装后,可以运行Tuxedo附带的例程simpapp检验安装是否成功。
4.1 设置环境变量
编辑/etc/profile,设置Tuxedo运行需要的环境变量。如果Tuxedo实际安装的目录是/root/bea/tuxedo8.1,则添加如下行:
TUXDIR="/root/bea/tuxedo8.1"
PATH="$PATH:/root/bea/tuxedo8.1/bin"
LD_LIBRARY_PATH="$TUXDIR/lib:/lib:/usr/lib"
|
在export PATH … 行尾添加TUXDIR LD_LIBRARY_PATH。重启机器,使设置的环境变量生效。
4.2 准备程序文件
从$tuxdir/samples/atmi ($tuxdi是Tuxedo的安装目录)中复制simpapp到新建目录/home/me下,将simpapp重命名为amti。
4.3 修改UBBCONFIG文件
该例程的UBBCONFIG文件是ubbsimple,用文本编辑器打开这个文件,修改以下行:
| 原文 | 修改后 |
|---|
| IPCKEY <Replace with a valid IPC Key> | IPCKEY 123456 | | APPDIR="<Replace with the current directory pathname>" | APPDIR="/home/me/atmi" | | TUXCONFIG="<Replace with your TUXCONFIG Pathname>" | TUXCONFIG="/home/me/atmi/tuxconfig" | | TUXDIR="<Directory where TUXEDO is installed>" | TUXDIR="/root/bea/tuxedo8.1" | | <Machine-name> LMID=simple | LMID=simple |
注意:TUXDIR中应填写Tuxedo的实际安装目录。***处使用安装Tuxedo的计算机名代替,此计算机名中间不能带"-",如果原来的计算机名带"-",则先修改计算机名,然后重启计算机后再继续配置。
4.4 运行例程
如果完成了以上的步骤,则在打开的终端中依次输入如下命令:
cd /home/me/atmi
APPDIR=/home/me/atmi
TUXCONFIG=$APPDIR/tuxconfig
export APPDIR TUXCONFIG
chmod 755 simpserv simpcl
chmod 644 ubbsimple
buildclient -o simpcl -f simpcl.c
buildserver -o simpserv -f simpserv.c -s TOUPPER
tmloadcf -y ubbsimple
tmboot -y
./simpcl "hello world"
|
如果返回:
Returned string is: HELLO WORLD
|
则证明Tuxedo安装成功了,用下面命令关闭Tuxedo服务:
5.疑难解答
5.1如何在一台机器上可以设置多个tlisten密码
用文本编辑器打开tux_prod_dir/udataobj下的tlisten.pw文件,可以看到安装时设置的密码。在密码后的新行中输入新密码,然后保存。tux_prod_dir代表Tuxedo的安装目录。
5.2如何在Tuxedo安装好后安装/升级序列号
如果在Tuxedo安装时没有安装序列号,或者序列号过期,可以将新的序列号文件lic.txt复制到tux_prod_dir/udataobj下,tux_prod_dir代表 Tuxedo的安装目录。
五 MQ_Tuxedo服务端和客户端的安装、配置和使用
在安装MQ_Tuxedo的服务端和客户端前,一定要先按上面的步骤安装并配置好WebSphere MQ和Tuxedo。
1 MQ_Tuxedo服务端的安装和配置
(1)MQ_Tuxedo服务端在Linux下的安装和配置
1)解压MQ_Tuxedo_Linux_Edition.tar.gz到合适的目录,命令为:
tar -xvzf MQ_Tuxedo_Linux_Edition.tar.gz yourpath
|
解压后,包含6个文件,分别是:
- TuxedoMQServer:MQ_Tuxedo系统核心可执行文件。
- setenv.sh:用来设定MQ,Tuxedo等所需的环境变量
- managemt.sh:用来管理MQ_Tuxedo应用程序,比如启动,关闭,重新启动等。
- mqset.properties:设置MQ的各项参数。
- sessionapp.tar.gz: Tuxedo服务端示例程序,演示一个典型的会话通信过程。
- user.fld.h: 由Tuxedo服务端示例程序的FieldTable生成的h文件。
2)安装Tuxedo服务端示例程序:sessionapp
<1>解压sessionapp.tar.gz到合适目录;
<2>修改其内部的setenv.sh和ubbsimple,使之符合系统当前状况。具体修改之处如下:
#!/bin/sh
#common for every project
export TUXDIR=/home/feiming/bea/tuxedo9.1(Tuxedo的安装目录)
export COBCPY=:$TUXDIR/cobinclude
export COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"
export SHLIB_PATH=$TUXDIR/lib:$SHLIB_PATH
export LIBPATH=$TUXDIR/lib:$LIBPATH
export LD_LIBRARY_PATH=$TUXDIR/lib:$LD_LIBRARY_PATH
export WEBJAVADIR=$TUXDIR/udataobj/webgui/java
#just for this project
export APPDIR=/home/feiming/pro/sessionapp/simpapp(sessionapp的程序目录)
export TUXCONFIG=$APPDIR/tuxconfig
export PATH=$TUXDIR/bin:$APPDIR:$PATH
export WSNADDR=//192.168.102.128:7898
(WorkStation方式连接Tuxedo服务端时需要设置此项,
192.168.102.128为服务端IP,7898是服务端为sessionapp开放的端口号)
export FLDTBLDIR32=$APPDIR(用来定义FML字段的文件所在的目录)
export FIELDTBLS32=user.fld(用来定义FML字段的文件的文件名)
|
# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.5 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the <bracketed> items with the appropriate values.
*RESOURCES
IPCKEY 123456
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 30
MAXSERVICES 50
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="/home/feiming/pro/sessionapp/simpapp"
TUXCONFIG="/home/feiming/pro/sessionapp/simpapp/tuxconfig"
TUXDIR="/home/feiming/bea/tuxedo9.1"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
JAZZON2
LMID=simple
(JAZZON2是服务端的机器名)
MAXCONV=5 (WorkStation方式连接服务端时,服务端需要设置此项)
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
serv SRVGRP=GROUP1 SRVID=1 CONV=Y (CONV=Y表明通信方式是会话方式)
serv2 SRVGRP=GROUP1 SRVID=2 CONV=Y
*SERVICES
TEST
S_SERVICE
|
<3>设置环境变量,命令为:source setenv.sh
<4>重新生成tuxconfig,命令为:tmloadcf ubbsimple -y
<5>启动sessionapp,命令为:tmboot -y,如果启动后显示如下,则表示Tuxedo服务端会话通信示例程序启动成功:
<6>测试sessionapp示例程序:
输入./cli,输出应该如下:
示例程序
3)修改setenv.sh(注意:这里的setenv.sh是MQ_Tuxedo应用的setenv.sh)
#!/bin/sh
#Tuxedo_common for every project
export TUXDIR=/home/feiming/bea/tuxedo9.1
export COBCPY=:$TUXDIR/cobinclude
export COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"
export SHLIB_PATH=$TUXDIR/lib:$SHLIB_PATH
export LIBPATH=$TUXDIR/lib:$LIBPATH
export LD_LIBRARY_PATH=$TUXDIR/lib:$LD_LIBRARY_PATH
export WEBJAVADIR=$TUXDIR/udataobj/webgui/java
#Tuxedo_Cli just for this project
export APPDIR=/home/feiming/pro/sessionapp/simpapp
export TUXCONFIG=$APPDIR/tuxconfig
export PATH=$TUXDIR/bin:$APPDIR:$PATH
export WSNADDR=//192.168.102.128:7898
export FLDTBLDIR32=$APPDIR
export FIELDTBLS32=user.fld
#MQ Cli Settings
export MQSERVER='S_jazzon/tcp/192.168.102.1(1414)'
(注意前后要加单引号,关于MQSERVER各个部分的具体含义可以参考前面对MQ的介绍)
#Lib Settings
export LD_LIBRARY_PATH=/opt/mqm/lib:/home/feiming/bea/tuxedo9.1/
lib:$LD_LIBRARY_PATH
export LIBPATH=/opt/mqm/lib:/home/feiming/bea/tuxedo9.1/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=/opt/mqm/lib:/home/feiming/bea/tuxedo9.1/lib:$LD_LIBRARY_PATH
|
4)修改mqset.properties
文件名:mqset.properties
#定义连入MQ服务端的方式:0(本机绑定),1(客户端连接)
MQ_CONNTYPE=1
#定义MQ服务服务器连接通道
MQ_SERVER=S_jazzon/tcp/192.168.102.1(1414) (注意,这里不要加上单引号)
#消息的消息管理器 (注意:MQ_Tuxedo系统使用统一的一个队列管理器)
MQ_MGR=QM_jazzon
#接收消息的消息队列
Q_RECV=test
#回复消息的消息队列
Q_REPLY=default
5)启动管理脚本managemt.sh,命令为source managemt.sh,启动之后屏幕显示如下:
按照提示进行操作,比如按1可以启动TuxedoMQServer。启动后屏幕显示如下:
这表明TuxedoMQServer后台进程启动成功。
至此,MQ_Tuxedo的服务端在Linux下安装和配置完成。
(2)MQ_Tuxedo服务端在Windows下的安装和配置
1)解压MQ_Tuxedo_Windows_Edition.zip到合适的目录
解压后,包含5个文件,分别是:
- TuxedoMQServer:MQ_Tuxedo系统核心可执行文件。
- setenv.bat:用来设定MQ,Tuxedo等所需的环境变量
- mqset.properties:设置MQ的各项参数。
- sessionapp: Tuxedo服务端示例程序,演示一个典型的会话通信过程。
- user.fld.h: 由Tuxedo服务端示例程序的FieldTable生成的h文件。
2)安装Tuxedo服务端示例程序:sessionapp(具体安装方法类似Linux下的安装,这里略去)。
3)修改setenv.bat(注意:这里的setenv.bat是MQ_Tuxedo应用的setenv.bat,具体修改办法类似Linux下的修改方法,这里略去)。
4)修改mqset.properties(具体修改办法类似Linux下的修改方法,这里略去)。
5)启动MQ_Tuxedo服务端
<1>新开MS-DOS窗口,进入MQ_Tuxedo_Windows_Edition.zip的解压目录。
<2>在操作提示符下键入setenv.bat,这样就执行了环境变量设置操作。
<3>在操作提示符下键入TuxedoMQServer.exe,这样就启动了MQ_Tuxedo服务端。启动后显示如下:
====MQ_Tuxedo_integration project (session) start successful===
The MQ settings are as follows.
MQ_CONNTYPE:1
MQ_SERVER:S_jazzon/tcp/192.168.102.1(1414)
MQ_MGR:QM_jazzon
MY_Q_RECV:test
MY_Q_REPLY:default
|
<4>如何察看以及停止TuxedoMQServer.exe这个进程?
答:使用Windows自带的任务管理器,找到TuxedoMQServer.exe这个进程,然后可以对其进行察看或者结束进程操作。
2 MQ_Tuxedo客户端的安装和配置
MQ_Tuxedo客户端就是一些Jar包,java程序以及资源文件,因此在Linux下和Windows下的配置都是类似的。下面Windows下的安装和配置为例:
(1)Tuxedo_MQ的Java客户端需要使用的第三方Jar包列表如下:
├─MQTuxedoClientNeedJars
│ ├─otherlib(主要是处理XML的、J2EE的一些Jar包)
│ │ │ j2ee.jar
│ │ │ jsr173_1.0_api.jar
│ │ │ resolver.jar
│ │ │ xalan.jar
│ │ │ xbean.jar
│ │ │ xbean_xpath.jar
│ │ │ xerces.jar
│ │ │ xmlpublic.jar
│ │ │
│ │ ├─SyncCallXMLBeans(同步请求/回复调用Tuxedo服务所需的输入输出XML文件对应的XMLBeans)
│ │ │ servicecall32.jar
│ │ │ servicecall32.xsd
│ │ │ serviceret32.jar
│ │ │ serviceret32.xsd
│ │ │
│ │ ├─SyncCallUserDataBean(DataExchanger的用户定义的数据Bean)
│ │ │ myuser.jar
│ │ │ myuser.xsd
│ │ │
│ │ └─SessionXMLBeans(会话方式调用Tuxedo服务所需的输入输出XML文件对应的XMLBeans)
│ │ sconn.jar
│ │ sconn.xml
│ │ sconn.xsd
│ │ sconnres.jar
│ │ sconnres.xml
│ │ sconnres.xsd
│ │ sdisconn.jar
│ │ sdisconn.xml
│ │ sdisconn.xsd
│ │ sdisconnres.jar
│ │ sdisconnres.xml
│ │ sdisconnres.xsd
│ │ srecv.jar
│ │ srecv.xml
│ │ srecv.xsd
│ │ ssend.jar
│ │ ssend.xml
│ │ ssend.xsd
│ │
│ └─mqlib(WebSphere MQ的lib)
│ com.ibm.mq.jar
│ com.ibm.mqbind.jar
│ com.ibm.mqjms.jar
│ connector.jar
│ fscontext.jar
│ jms.jar
│ jndi.jar
│ jta.jar
│ ldap.jar
│ postcard.jar
│ providerutil.jar
│ rmm.jar
│
└─DataExchangerNeedJars(DataExchanger所需的Jar包)
j2ee.jar
jsr173_1.0_api.jar
myuser.jar
resolver.jar
servicecall32.jar
serviceret32.jar
tconn.jar
xalan.jar
xbean.jar
xbean_xpath.jar
xerces.jar
xmlpublic.jar
|
(2)由Tuxedo_MQ客户端生成的Jar包如下:
DataExchanger.jar
MQTuxedoClient.jar
(3)Tuxedo_MQ的客户端测试程序为:MQTuxedoCliTest(Java项目),它需要配置的两个资源文件如下:
- mqset.properties(根据具体情况设置MQ的一些参数)。
- tux.properties(根据具体情况设置Tuxedo的一些参数)。
MQTuxedoCliTest的ClassPath(即需要引用的Jar包)如下:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliJars/DataExchanger.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliJars/MQTuxedoClient.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/j2ee.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/
jsr173_1.0_api.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/myuser.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/resolver.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/
servicecall32.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/serviceret32.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/tconn.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/xalan.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/xbean.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/xbean_xpath.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/xerces.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/DataExchangerNeedJars/xmlpublic.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/com.ibm.mq.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/com.ibm.mqbind.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/com.ibm.mqjms.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/connector.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/fscontext.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/jms.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/jndi.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/jta.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/ldap.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/postcard.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/providerutil.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/mqlib/rmm.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
xmlpublic.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/j2ee.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
jsr173_1.0_api.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/resolver.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/xalan.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/xbean.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/xbean_xpath.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/xerces.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/sconn.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/sconnres.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/sdisconn.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/sdisconnres.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/srecv.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SessionXMLBeans/ssend.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SyncCallUserDataBean/myuser.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SyncCallXMLBeans/servicecall32.jar"/>
<classpathentry kind="lib"
path="D:/lanjz/MQTuxedoCliNeedJars/MQTuxedoClientNeedJars/otherlib/
SyncCallXMLBeans/serviceret32.jar"/>
<classpathentry kind="output" path=""/>
</classpath>
|
配置完两个资源文件以及Classpath后,就可以运行 MQTuxedoCliTest中的TpTestSession.java了。注意:TpTestSession.java需要运行在WebSphere v5.1 EE JRE 或者 WebSphere v5.1 JRE等JRE之上(因为XMLBeans需要运行在比较高版本的JRE上)。
(4)Tuxedo_MQ的Java客户端的测试
如果前面都配置成功的话,TpTestSession.java的运行结果应该如下:
发送tpconnect消息:
<sconn xmlns="http://xmlbeans.lan.org/sconn">
<serviceName>S_SERVICE</serviceName>
</sconn>
|
接收tpconnect回复消息:
<sconnres xmlns="http://xmlbeans.lan.org/sconnres">
<serviceName>S_SERVICE</serviceName>
<sid>0</sid>
<resFlag>CONNECT SUCCESS</resFlag>
<gid>414d5120514d5f6a617a7a6f6e20202064ef3a412000c301</gid>
</sconnres>
|
发送tpsend消息1:
<ssend serviceName="S_SERVICE"
gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301" flag=""
resFlag="" sid="0" xmlns="http://xmlbeans.lan.org/ssend">
<FML32Record>
<field name="COUNT">lanjz1</field>
</FML32Record>
</ssend>
|
接收tpsend回复消息1:
<ssend flag="" resFlag="-858993460" serviceName="S_SERVICE" sid="0"
gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301"
xmlns="http://xmlbeans.lan.org/ssend">
<FML32Record>
<field name="COUNT">lanjz1</field>
</FML32Record>
</ssend>
|
发送tpsend消息2:
<ssend serviceName="S_SERVICE"
gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301" flag="TPRECVONLY"
resFlag="" sid="0" xmlns="http://xmlbeans.lan.org/ssend">
<FML32Record>
<field name="COUNT">lanjz4</field>
</FML32Record>
</ssend>
|
接收tpsend回复消息2:
<ssend flag="TPRECVONLY" resFlag="-858993460" serviceName="S_SERVICE"
sid="0" gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301"
xmlns="http://xmlbeans.lan.org/ssend">
<FML32Record>
<field name="COUNT">lanjz4</field>
</FML32Record>
</ssend>
|
发送tpreceive消息:
<srecv serviceName="S_SERVICE"
gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301" flag="" resFlag=""
sid="0" xmlns="http://xmlbeans.lan.org/srecv"/>
|
接收tpreceive回复消息:
<srecv flag="" resFlag="" serviceName="S_SERVICE" sid="0"
gid="414d5120514d5f6a617a7a6f6e20202064ef3a412000c301"
xmlns="http://xmlbeans.lan.org/srecv">
<FML32Record>
<field name="COUNT">lanjz</field>
</FML32Record>
</srecv>
|
发送tpdisconnect消息:
<sdisconn xmlns="http://xmlbeans.lan.org/sdisconn">
<serviceName>S_SERVICE</serviceName>
<sid>0</sid>
<gid>414d5120514d5f6a617a7a6f6e20202064ef3a412000c301</gid>
</sdisconn>
|
接收tpdisconnect回复消息:
<sdisconnres xmlns="http://xmlbeans.lan.org/sdisconnres">
<serviceName>S_SERVICE</serviceName>
<sid>0</sid>
<resFlag>DISCONNECT SUCCESS</resFlag>
<gid>414d5120514d5f6a617a7a6f6e20202064ef3a412000c301</gid>
</sdisconnres>
|
如上所示,Tuxedo_MQ的Java客户端显示了整个会话周期内的所有通信信息。
作者简介  | |  | 曹世锋是 Lab Based Services 团队的一名成员,在过去的几年里,一直专著于基于 IBM 产品的 EAI/SOA 项目实施,是一名资深的 Solution Expert。您可以通过caoshif@cn.ibm.com 和他联系。 |
 | |  | 张羽是 Lab Based Services 团队的一名成员,在过去的几年里,一直专著于基于 IBM 产品的 EAI/SOA 项目实施,是一名资深的 Solution Expert。您可以通过alfzhang@cn.ibm.com和他联系。 |
 | |  | 兰建忠在过去的一段时间里一直专注于基于 WebSphere 产品的适配器开发,是一名 Solution Expert 。您可以通过lanjz@cn.ibm.com和他联系。 |
对本文的评价
|