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.
 To Set Up Tuxedo as a Distributed Transaction Manager
To Set Up Tuxedo as a Distributed Transaction ManagerInstall 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.
 To Build the Distributed Transaction Sample Programs
To Build the Distributed Transaction Sample ProgramsBuild 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
 To Run the Distributed Transaction Sample Programs
To Run the Distributed Transaction Sample ProgramsStart 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