This section contains product-sensitive programming interface information.
An exit is a point in IBM-supplied code where you can run your own code. WebSphere MQ for z/OS provides an API-crossing exit that you can use to intercept calls to the MQI, and to monitor or modify the function of the MQI calls. This section describes how to use the API-crossing exit, and describes the sample exit program that is supplied with WebSphere MQ for z/OS.
Note |
---|
The API-crossing exit is invoked only by the CICS adapter of WebSphere MQ for z/OS. The exit program runs in the CICS address space. |
You could use the API-crossing exit to:
Before the exit can be used, an exit program load module must be available when the CICS adapter connects to WebSphere MQ for z/OS. The exit program is a CICS program that must be named CSQCAPX and reside in a library in the DFHRPL concatenation. CSQCAPX must be defined in the CICS system definition file (CSD), and the program must be enabled.
When CSQCAPX is loaded, a confirmation message is written to the CKQC adapter control panel or to the console. If the program cannot be loaded, a diagnostic message is displayed.
When enabled, the API-crossing exit is invoked:
This means that using the API-crossing exit degrades the performance of WebSphere MQ for z/OS, so plan your use of it carefully.
The exit program can be invoked once before a call is executed, and once after the call is executed. On the before type of exit call, the exit program can modify any of the parameters on the MQI call, suppress the call completely, or allow the call to be processed. If the call is processed, the exit is invoked again after the call has completed.
After it has been invoked, the exit program is passed a parameter list in the CICS communication area pointed to by a field called DFHEICAP. The CICS Exec Interface Block field EIBCALEN shows the length of this area. The structure of this communication area is defined in the CMQXPA assembler-language macro that is supplied with WebSphere MQ for z/OS :
* MQXP_COPYPLIST DSECT DS 0D Force doubleword alignment MQXP_PXPB DS AL4 Pointer to exit parameter block MQXP_PCOPYPARM DS 11AL4 Copy of original plist * ORG MQXP_PCOPYPARM MQXP_PCOPYPARM1 DS AL4 Copy of 1st parameter MQXP_PCOPYPARM2 DS AL4 Copy of 2nd parameter MQXP_PCOPYPARM3 DS AL4 Copy of 3rd parameter MQXP_PCOPYPARM4 DS AL4 Copy of 4th parameter MQXP_PCOPYPARM5 DS AL4 Copy of 5th parameter MQXP_PCOPYPARM6 DS AL4 Copy of 6th parameter MQXP_PCOPYPARM7 DS AL4 Copy of 7th parameter MQXP_PCOPYPARM8 DS AL4 Copy of 8th parameter MQXP_PCOPYPARM9 DS AL4 Copy of 9th parameter MQXP_PCOPYPARM10 DS AL4 Copy of 10th parameter MQXP_PCOPYPARM11 DS AL4 Copy of 11th parameter * MQXP_COPYPLIST_LENGTH EQU *-MQXP_PXPB ORG MQXP_PXPB MQXP_COPYPLIST_AREA DS CL(MQXP_COPYPLIST_LENGTH) *
Field MQXP_PXPB points to the exit parameter block, MQXP.
Field MQXP_PCOPYPARM is an array of addresses of the call parameters. For example, if the application issues an MQI call with parameters P1,P2,or P3, the communication area contains:
PXPB,PP1,PP2,PP3
where P denotes a pointer (address) and XPB is the exit parameter block.
You can use the sample API-crossing exit program (CSQCAPX) that is supplied with WebSphere MQ for z/OS as a framework for your own program. This is described in topic "The sample API-crossing exit program, CSQCAPX".
When writing an exit program, to find the name of an MQI call issued by an application, examine the ExitCommand field of the MQXP structure. To find the number of parameters on the call, examine the ExitParmCount field. You can use the 16-byte ExitUserArea field to store the address of any dynamic storage that the application obtains. This field is retained across invocations of the exit and has the same life time as a CICS task.
Your exit program can suppress execution of an MQI call by returning MQXCC_SUPPRESS_FUNCTION or MQXCC_SKIP_FUNCTION in the ExitResponse field. To allow the call to be executed (and the exit program to be reinvoked after the call has completed), your exit program must return MQXCC_OK.
When invoked after an MQI call, an exit program can inspect and modify the completion and reason codes set by the call.
Here are some general points you should bear in mind when writing your exit program:
The sample exit program is supplied as an assembler-language program. The source file (CSQCAPX) is supplied in the library thlqual.SCSQASMS (where thlqual is the high-level qualifier used by your installation). This source file includes pseudocode that describes the program logic.
The sample program contains initialization code and a layout that you can use when writing your own exit programs.
The sample shows how to:
The sample exit program writes messages to a CICS temporary storage queue (CSQ1EXIT) to show the operation of the exit. The messages show whether the exit is being invoked before or after the MQI call. If the exit is invoked after the call, the message contains the completion code and reason code returned by the call. The sample uses named constants from the CMQXPA macro to check on the type of entry (that is, before or after the call).
The sample does not perform any monitoring function, but simply places time-stamped messages into a CICS queue indicating the type of call it is processing. This provides an indication of the performance of the MQI, as well as the proper functioning of the exit program.
The sample exit is supplied in source form only. To use the sample exit, or an exit program that you have written, you must create a load library, as you would for any other CICS program, as described in topic "Building CICS applications".
If you use the default CICS program definitions supplied, the exit program CSQCAPX is installed in a disabled state. This is because using the exit program can produce a significant reduction in performance.
To activate the API-crossing exit temporarily:
If you want to run WebSphere MQ for z/OS with the API-crossing exit permanently enabled, do one of the following:
In both cases you must reinstall the group. You can do this by cold-starting your CICS system or by using the CICS CEDA transaction to reinstall the group while CICS is running.
End of product-sensitive programming interface information.