The distributed transaction sample programs show how to use the X/Open distributed transaction (XA) support of the Message Queue C-API with an X/Open distributed transaction processing system (in this case BEA Tuxedo: http://edocs.bea.com/tuxedo/tux100/index.html.)
The distributed transaction sample programs include the following files:
Table 1–5 Distributed Transaction Sample Program Files
Sample Program |
Description |
---|---|
jmsserver.c |
Implements Tuxedo services that send and receive messages using the Message Queue C-API |
jmsclient_sender.c |
Tuxedo client that uses the message producing service in jmsserver.c |
jmsclient_receiver.c |
Tuxedo client that uses the message receiving service in jmsserver.c |
async_jmsserver.c |
Implements a Tuxedo service that asynchronously consumes messages using the Message Queue C-API |
jmsclient_async_receiver.c |
Tuxedo client that uses the asynchronous message consuming service in async_jmsserver.c |
Table 1–4 lists the location of the sample programs for each installation method.
Table 1–6 Location of Distributed Transaction Sample Programs
Installation Method |
Directory |
---|---|
IPS image |
IMQ_HOME/examples/C/tuxedo |
Solaris SVR4 packages |
/opt/SUNWimq/demo/C/tuxedo |
Linux rpm packages |
/opt/sun/mq/examples/C/tuxedo |
The following procedures document how to set up Tuxedo as a distributed transaction manager, how to build the sample distributed transaction programs, and how to run the sample programs. The procedures are based on the synchronous message consumption samples and assume a Solaris operating system platform.
Install Tuxedo.
See Tuxedo documentation for instructions.
Set up the following environment variables:
Environment Variable |
Description |
---|---|
LD_LIBRARY_PATH |
Modify to include Message Queue C-API runtime library path and TUXDIR/lib path |
TUXDIR |
Tuxedo install root |
PATH |
modify to include $TUXDIR/bin and compiler path |
TUXCONFIG |
TUXCONFIG filename path |
TLOGDEVICE |
Tuxedo transaction log filename path |
MQ_HOME |
Message Queue install root |
MQ_LOG_FILE |
Message Queue C-API runtime log file name |
MQ_LOG_FILE_APPEND_PID |
Set so that Message Queue C-API runtime log file name will be auto-appended with the Tuxedo server process id |
Build the Tuxedo transaction monitor server (TMS).
Configure the Tuxedo servers.
# tmloadcf config-file
where config-file is the Tuxedo UBBCONFIG file.
Build the server side of the sample application (jmsserver.c).
# cc -I$IMQ_HOME/include -I$TUXDIR/include -g -c jmsserver.c
# buildserver -v -t -r SUN_MQ -s SENDMESSAGES,RECVMESSAGES -o jmsserver -f jmsserver.o -f -lmqcrt
Build the client side of the sample application (jmsclient_sender.c and jmsclient_receiver.c).
# cc -I$TUXDIR/include -c jmsclient_sender.c # buildclient -o jmsclient_sender -f jmsclient_sender.o
# cc -I$TUXDIR/include -c jmsclient_receiver.c # buildclient -o jmsclient_receiver -f jmsclient_receiver.o
Start a Message Queue broker.
# imqbrokerd -tty
Start the Tuxedo servers.
# tmboot
Run the client-side applications.
# jmsclient_sender
# jmsclient_receiver
Confirm the messages are produced to and consumed from the applicable destination.
# imqcmd list dst -u admin
# imqcmd querry dst -t q -n xatestqueue -u admin