Home

 

WebSphere MQ for Linux

 

Before you use an existing user exit for the first time on WebSphere MQ for Linux, recompile it to enable it to take advantage of thread-safe system calls. If your user exits use thread-unsafe system calls, you will need to modify them before using them on this platform.

The exit is a dynamically loaded object that must be written in C. To ensure that it can be loaded when required, put 32-bit exits in /var/mqm/exits and 64-bit exits in /var/mqm/exits64. These are the default paths for exits in the ExitPath stanza of the 'qm.ini' file or the ClientExitPath stanza of the 'mqs.ini' file and can be changed if required. Exits on the server use the 'qm.ini' file, those on the client use the 'mqs.ini' file. Alternatively we can specify the full path name in the MQCD if MQCONNX is used or in the DEFINE CHANNEL command.

Define a dummy MQStart() routine in the exit and specify MQStart as the entry point in the module. Figure 1 shows how to set up an entry to your program:

Figure 1. Sample source code for a channel exit on Linux
#include <cmqc.h>
#include <cmqxc.h>
void MQStart() {;} /* dummy entry point */
void MQENTRY ChannelExit ( PMQVOID pChannelExitParms, 
PMQVOID pChannelDefinition, 
PMQLONG pDataLength, 
PMQLONG pAgentBufferLength, 
PMQVOID pAgentBuffer, 
PMQLONG pExitBufferLength, 
PMQPTR  pExitBufferAddr) 
{ 
... Insert code here 
}  

Figure 2 shows the compiler and linker commands for channel-exit programs on Linux:

Figure 2. Sample compiler and linker commands for channel-exits on Linux platforms where the queue manager is 64-bit
$ gcc -m64 -shared -fPIC -o /var/mqm/exits64/exit exit.c -I/opt/mqm/inc 
-L/opt/mqm/lib64 -Wl,-rpath=/opt/mqm/lib64 -Wl,-rpath=/usr/lib64 -lmqm_r
In this case exit is the library name and ChannelExit is the function name. These names are used by the channel definition to reference the exit program using the format described in Exit name fields. See also the MSGEXIT parameter of the Define Channel command in WebSphere MQ Script (MQSC) Command Reference

On the client, a 32-bit or 64-bit exit can be used. This must be linked to mqic_r. For WebSphere MQ for Linux (x86 platform), if you use a 32-bit server platform, then use the compiler and linker commands shown in Figure 3.

Figure 3. Sample compiler and linker commands for channel-exits on Linux platforms where the queue manager is 32-bit
$ gcc -shared -fPIC -o /var/mqm/exits/exit exit.c -I/opt/mqm/inc 
-L/opt/mqm/lib -Wl,-rpath=/opt/mqm/lib -Wl,-rpath=/usr/lib -lmqm_r

 

Parent topic:

Writing and compiling channel-exit programs


ic17710_


 

Home