Before running these samples, you must build the server environment.
It is assumed that you have a working TUXEDO environment.
$ export CFLAGS="-I /usr/mqm/inc -I /<APPDIR> -L /usr/mqm/lib"
$ export LDOPTS="-lmqm -lmqmzse -lnet -insl -lsocket -lc -ldl"
$ export FIELDTBLS=/usr/mqm/samp/amqstxvx.flds
$ export VIEWFILES=/<APPDIR>/amqstxvx.V
$ export LIBPATH=$TUXDIR/lib:/usr/mqm/lib:/lib
MQSeries_XA_RMI:MQRMIXASwitchDynamic: \ /usr/mqm/lib/libmqmxa.a /usr/mqm/lib/libmqm.a
$ mkfldhdr /usr/mqm/samp/amqstxvx.flds
$ viewc /usr/mqm/samp/amqstxvx.v
$ buildtms -o MQXA -r MQSeries_XA_RMI
$ buildserver -o MQSERV1 -f /usr/mqm/samp/amqstxsx.c \
-f /usr/mqm/lib/libmqm.a \
-r MQSeries_XA_RMI -s MPUT1:MPUT \
-s MGET1:MGET \
-v -bshm
$ buildserver -o MQSERV2 -f /usr/mqm/samp/amqstxsx.c \
-f /usr/mqm/lib/libmqm.a \
-r MQSeries_XA_RMI -s MPUT2:MPUT
-s MGET2:MGET \
-v -bshm
$ buildclient -o doputs -f /usr/mqm/samp/amqstxpx.c \
-f /usr/mqm/lib/libmqm.a
$ buildclient -o dogets -f /usr/mqm/samp/amqstxgx.c \
-f /usr/mqm/lib/libmqm.a
$ tmloadcf -y /usr/mqm/samp/ubbstxcx.cfg
$tmadmin -cA prompt then appears. At this prompt, enter:
> crdl -z /<APPDIR>/TLOG1
$ strmqm
$ tmboot -y
You can now use the doputs and dogets programs to put messages to a queue and retrieve them from a queue.
$ export CFLAGS="-I /<APPDIR>"
$ export FIELDTBLS=amqstxvx.flds
$ export VIEWFILES=amqstxvx.V
$ export SHLIB_PATH=$TUXDIR/lib:/opt/mqm/lib:/lib
$ export LD_LIBRARY_PATH=$TUXDIR/lib:/opt/mqm/lib:/lib
MQSeries_XA_RMI:MQRMIXASwitchDynamic: \ /opt/mqm/lib/libmqmxa.a /opt/mqm/lib/libmqm.so \ /opt/tuxedo/lib/libtux.a /opt/mqm/lib/libmqmcs.so \ /opt/mqm/lib/libmqmzse.so
$ mkfldhdr amqstxvx.flds
$ viewc amqstxvx.v
$ buildtms -o MQXA -r MQSeries_XA_RMI
$ buildserver -o MQSERV1 -f amqstxsx.c \
-f /opt/mqm/lib/libmqm.so \
-r MQSeries_XA_RMI -s MPUT1:MPUT \
-s MGET1:MGET \
-v -bshm
-l -ldl
$ buildserver -o MQSERV2 -f amqstxsx.c \
-f /opt/mqm/lib/libmqm.so \
-r MQSeries_XA_RMI -s MPUT2:MPUT \
-s MGET2:MGET \
-v -bshm
-l -ldl
$ buildclient -o doputs -f amqstxpx.c \
-f /opt/mqm/lib/libmqm.so \
-f /opt/mqm/lib/libmqmzse.co \
-f /opt/mqm/lib/libmqmcs.so
$ buildclient -o dogets -f amqstxgx.c \
-f /opt/mqm/lib/libmqm.so
-f /opt/mqm/lib/libmqmzse.co \
-f /opt/mqm/lib/libmqmcs.so
$ tmloadcf -y ubbstxcx.cfg
$tmadmin -cA prompt then appears. At this prompt, enter:
> crdl -z /<APPDIR>/TLOG1
$ strmqm
$ tmboot -y
You can now use the doputs and dogets programs to put messages to a queue and retrieve them from a queue.
$ export CFLAGS="-Aa -D_HPUX_SOURCE"
$ export LDOPTS="-lmqm"
$ export FIELDTBLS=/opt/mqm/samp/amqstxvx.flds
$ export VIEWFILES=<APPDIR>/amqstxvx.V
$ export SHLIB_PATH=$TUXDIR/lib:/opt/mqm/lib:/lib
$ export LPATH=$TUXDIR/lib:/opt/mqm/lib:/lib
MQSeries_XA_RMI:MQRMIXASwitchDynamic: \
/opt/mqm/lib/libmqmxa.a /opt/mqm/lib/libmqm.sl \
/opt/tuxedo/lib/libtux.sl
$ mkfldhdr /opt/mqm/samp/amqstxvx.flds
$ viewc /opt/mqm/samp/amqstxvx.v
$ buildtms -o MQXA -r MQSeries_XA_RMI
$ buildserver -o MQSERV1 -f /opt/mqm/samp/amqstxsx.c \
-f /opt/mqm/lib/libmqm.sl \
-r MQSeries_XA_RMI -s MPUT1:MPUT \
-s MGET1:MGET \
-v -bshm
$ buildserver -o MQSERV2 -f /opt/mqm/samp/amqstxsx.c \
-f /opt/mqm/lib/libmqm.sl \
-r MQSeries_XA_RMI -s MPUT2:MPUT \
-s MGET2:MGET \
-v -bshm
$ buildclient -o doputs -f /opt/mqm/samp/amqstxpx.c \
-f /opt/mqm/lib/libmqm.sl
$ buildclient -o dogets -f /opt/mqm/samp/amqstxgx.c \
-f /opt/mqm/lib/libmqm.sl
$ tmloadcf -y /opt/mqm/samp/ubbstxcx.cfg
$tmadmin -cA prompt then appears. At this prompt, enter:
> crdl -z /<APPDIR>/TLOG1
$ strmqm
$ tmboot -y
You can now use the doputs and dogets programs to put messages to a queue and retrieve them from a queue.
$ export CFLAGS="-lmqm -lmqmcs -lmqmzse -lmqmxa \
-lnsl -lsocket -ldl -lmproc -lext"
$ export FIELDTBLS=amqstxvx.flds
$ export VIEWFILES=amqstxvx.V
$ export VIEWDIR=The path to the directory where the views
are held
$ export TUXDIR=The path to the directory where TUXEDO
is installed (/opt/tuxedo).
$ export CFLAGS="-lmqm -lmqmcs -lmqmzse -lmqmxa \
-lnsl -lsocket -ldl -lmproc -lext"
MQSeries_XA_RMI:MQRMIXASwitchDynamic: \ /opt/mqm/lib/libmqmxa.so /opt/mqm/lib/libmqm.so /opt/mqm/lib/libmqmcs.s
$ mkfldhdr amqstxvx.flds
$ viewc amqstxvx.v
export CFLAGS="$CFLAGS -LDuMQRMIXASwitchDynamic -lmqmxa"
$ buildtms -o MQXA -r MQSeries_XA_RMI
$ buildserver -o MQSERV1 -f amqstxsx.c \
-f /opt/mqm/lib/libmqm.so i \
-r MQSeries_XA_RMI -s MPUT1:MPUT \
-s MGET1:MGET \
-v -bshm
$ buildserver -o MQSERV2 -f amqstxsx.c \
-f /opt/mqm/lib/libmqm.so \
-r MQSeries_XA_RMI -s MPUT2:MPUT \
-s MGET2:MGET \
-v -bshm
$ buildclient -o doputs -f amqstxpx.c \
-f /opt/mqm/lib/libmqm.so
$ buildclient -o dogets -f amqstxgx.c \
-f /opt/mqm/lib/libmqm.so
tmadmin -c
At the prompt (>), enter:
crdl -z filename
where filename is the path to the Tuxedo TLOG file.
$ tmloadcf -y ubbstxcx.cfg
$ strmqm
$ tmboot -y
You can now use the doputs and dogets programs to put messages to a queue and retrieve them from a queue.
For further information on building the TUXEDO server environment, see the README file in the WebSphere MQ sample directory, /opt/mqm/samp.
Figure 38. Example of ubbstxcx.cfg file for UNIX systems
*RESOURCES
IPCKEY <IPCKey>
#Example:
#IPCKEY 123456
MASTER <MachineName>
MAXACCESSERS 20
MAXSERVERS 20
MAXSERVICES 50
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="<WorkDirectory>"
TUXCONFIG="<WorkDirectory>/tuxconfig"
ROOTDIR="<RootDirectory>"
<MachineName> LMID=<MachineName>
TLOGDEVICE="<WorkDirectory>/TLOG1"
TLOGNAME=TLOG
*GROUPS
GROUP1
LMID=<MachineName> GRPNO=1
TMSNAME=MQXA
OPENINFO="MQSeries_XA_RMI:MYQUEUEMANAGER"
*SERVERS
DEFAULT:
CLOPT="-A -- -m MYQUEUEMANAGER
MQSERV1 SRVGRP=GROUP1 SRVID=1
MQSERV2 SRVGRP=GROUP1 SRVID=2
*SERVICES
MPUT1
MGET1
MPUT2
MGET2
|
| <MQMDIR> | the directory path specified when WebSphere MQ was installed, for example g:\Program Files\IBM\WebSphere MQ |
| <TUXDIR> | the directory path specified when TUXEDO was installed, for example f:\tuxedo |
| <APPDIR> | the directory path to be used for the sample application, for example f:\tuxedo\apps\mqapp |
To build the server environment and samples:
f:\tuxedo\apps\mqapp
amqstxmn.mak
amqstxen.env
ubbstxcn.cfg
MQSeries_XA_RMI;MQRMIXASwitchDynamic;
<MQMDIR>\tools\lib\mqmtux.lib <MQMDIR>\tools\lib\mqm.lib
where <MQMDIR> is replaced as above. Although shown here as two lines, the new entry must be one line in the file.
TUXDIR=<TUXDIR>
TUXCONFIG=<APPDIR>\tuxconfig
FIELDTBLS=<MQMDIR>\tools\c\samples\amqstxvx.fld
LANG=C
crdl -z <APPDIR>\TLOG
where <APPDIR> is replaced as above.
msvc amqstxmn.mak
Select build to build all the sample programs.
Figure 39. Example of ubbstxcn.cfg file for WebSphere MQ for Windows
*RESOURCES
IPCKEY 99999
UID 0
GID 0
MAXACCESSERS 20
MAXSERVERS 20
MAXSERVICES 50
MASTER SITE1
MODEL SHM
LDBAL N
*MACHINES
<MachineName> LMID=SITE1
TUXDIR="f:\tuxedo"
APPDIR="f:\tuxedo\apps\mqapp;g:\Program Files\IBM\WebSphere MQ\bin"
ENVFILE="f:\tuxedo\apps\mqapp\amqstxen.env"
TUXCONFIG="f:\tuxedo\apps\mqapp\tuxconfig"
ULOGPFX="f:\tuxedo\apps\mqapp\ULOG"
TLOGDEVICE="f:\tuxedo\apps\mqapp\TLOG"
TLOGNAME=TLOG
TYPE="i386NT"
UID=0
GID=0
*GROUPS
GROUP1
LMID=SITE1 GRPNO=1
TMSNAME=MQXA
OPENINFO="MQSeries_XA_RMI:MYQUEUEMANAGER"
*SERVERS
DEFAULT: CLOPT="-A -- -m MYQUEUEMANAGER"
MQSERV1 SRVGRP=GROUP1 SRVID=1
MQSERV2 SRVGRP=GROUP1 SRVID=2
*SERVICES
MPUT1
MGET1
MPUT2
MGET2
|
The sample ubbconfig file for WebSphere MQ for Windows is listed in Figure 39. It is supplied as ubbstxcn.cfg in the WebSphere MQ samples directory.
The sample makefile (see Figure 40) supplied for WebSphere MQ for Windows is called ubbstxmn.mak, and is held in the WebSphere MQ samples directory.
Figure 40. Sample TUXEDO makefile for WebSphere MQ for Windows
TUXDIR = f:\tuxedo
MQMDIR = g:\Program Files\IBM\WebSphere MQ
APPDIR = f:\tuxedo\apps\mqapp
MQMLIB = $(MQMDIR)\tools\lib
MQMINC = $(MQMDIR)\tools\c\include
MQMSAMP = $(MQMDIR)\tools\c\samples
INC = -f "-I$(MQMINC) -I$(APPDIR)"
DBG = -f "/Zi"
amqstx.exe:
$(TUXDIR)\bin\mkfldhdr -d$(APPDIR) $(MQMSAMP)\amqstxvx.fld
$(TUXDIR)\bin\viewc -d$(APPDIR) $(MQMSAMP)\amqstxvx.v
$(TUXDIR)\bin\buildtms -o MQXA -r MQSeries_XA_RMI
$(TUXDIR)\bin\buildserver -o MQSERV1 -f $(MQMSAMP)\amqstxsx.c \
-f $(MQMLIB)\mqm.lib -v $(INC) $(DBG) \
-r MQSeries_XA_RMI \
-s MPUT1:MPUT -s MGET1:MGET
$(TUXDIR)\bin\buildserver -o MQSERV2 -f $(MQMSAMP)\amqstxsx.c \
-f $(MQMLIB)\mqm.lib -v $(INC) $(DBG) \
-r MQSeries_XA_RMI \
-s MPUT2:MPUT -s MGET2:MGET
$(TUXDIR)\bin\buildclient -o doputs -f $(MQMSAMP)\amqstxpx.c \
-f $(MQMLIB)\mqm.lib -v $(INC) $(DBG)
$(TUXDIR)\bin\buildclient -o dogets -f $(MQMSAMP)\amqstxgx.c \
-f $(MQMLIB)\mqm.lib $(INC) -v $(DBG)
$(TUXDIR)\bin\tmloadcf -y $(APPDIR)\ubbstxcn.cfg
|
The procedure is the same on Compaq Tru64 UNIX Version 4.0 and Version 5.0. It is assumed that you have a working TUXEDO environment.
$ TUXDIR=/TUXDIR; export TUXDIR
$ PATH=$TUXDIR/bin:$PATH; export PATH
$ COBCPY=:$TUXDIR/cobinclude; export COBCPY
$ COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI \
-C OSEXT=cbl"; export COBOPT
$ LD_LIBRARY_PATH=$TUXDIR/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
MQSeries_XA_RMI:MQRMIXASwitchDynamic:-lmqm -lmqmzse \ -lmqmxa -lmqmcs -L/$TUXDIR/lib -ltux
$ mkfldhdr /opt/mqm/samp/amqstxvx.flds
$ viewc /opt/mqm/samp/amqstxvx.v
$ buildtms -o MQXA -r MQSeries_XA_RMI
$ buildserver -o MQSERV1 -f /opt/mqm/samp/amqstxsx.c \
-f /opt/mqm/lib/libmqm.so -r MQSeries_XA_RMI \
-s MPUT1:MPUT -s MGET1:MGET -v -bshm
$ buildserver -o MQSERV2 -f /opt/mqm/samp/amqstxsx.c \
-f /opt/mqm/lib/libmqm.so -r MQSeries_XA_RMI \
-s MPUT2:MPUT -s MGET2:MGET -v -bshm
$ buildclient -o doputs -f /opt/mqm/samp/amqstxpx.c \
-f /opt/mqm/lib/libmqm.so -f /opt/mqm/lib/libmqmzse.so \
-f /opt/mqm/lib/libmqmcs.so
$ buildclient -o dogets -f /opt/mqm/samp/amqstxgx.c \
-f /opt/mqm/lib/libmqm.so -f /opt/mqm/lib/libmqmzse.so \
-f /opt/mqm/lib/libmqmcs.so
$ tmloadcf -y ubbstxcx.cfg
$ tmadmin -c
A > prompt then appears. At this point, enter:
> crdl -z /<appdir>/TLOG1
$ strmqm MYQUEUEMANAGER
$ tmboot -y
You can now use the doputs and dogets programs to put messages to a queue and retrieve them from a queue.
This sample server program (amqstxsx) is designed to run with the Put (amqstxpx.c) and the Get (amqstxgx.c) sample programs. The program runs automatically when TUXEDO is started.
The sample server provides two TUXEDO services, MPUT1 and MGET1.
The MPUT1 service is driven by the PUT sample and uses MQPUT1 in syncpoint to put a message in a unit of work controlled by TUXEDO. It takes the parameters QName and Message Text, which are supplied by the PUT sample.
The MGET1 service opens and closes the queue each time it gets a message. It takes the parameters QName and Message Text, which are supplied by the GET sample.
Any error messages, reason codes, and status messages are written to the TUXEDO log file.
Figure 41. How TUXEDO samples work together
![]() |
This sample allows you to put a message on a queue multiple times, in batches, demonstrating syncpointing using TUXEDO as the resource manager. The sample server program amqstxsx must be running for the put sample to succeed - the server sample program makes the connection to the queue manager and uses the XA interface. To run the sample enter:
For example:
This puts 30 messages on to the queue named myqueue, in 6 batches each with 5 messages in them. If there are any problems it will back a batch of messages out, otherwise it will commit them.
Any error messages are written to the TUXEDO log file and to stderr. Any reason codes are written to stderr.
This sample allows you to get messages from a queue in batches. The sample server program amqstxsx must be running for the put sample to succeed - the server sample program makes the connection to the queue manager and uses the XA interface. To run the sample enter:
For example:
This takes 24 messages off the queue named myqueue, in 6 batches each with 4 messages in them. If you ran this after the put example, which put 30 messages on myqueue, you would now have only 6 messages on myqueue. Note that the number of batches and the batch size can vary between the putting of messages and the getting of them.
Any error messages are written to the TUXEDO log file and to stderr. Any reason codes are written to stderr.