The destination resolution user exit
This topic contains a sample destination resolution user exit for IMS.
If we have set registers 15 to 4 in DFSYPRX0, or if the source of the transaction was OTMA and you set Register 15 to zero, your DRU exit is invoked. In this example, the DRU exit name is DRU0VCPE.
The DRU exit checks if the destination is VCPEVCPE. If it is, it sets the OTMA user data (in the OTMA prefix) as follows:
- Offset
- OTMA user data
- (decimal)
- 0
- OTMA user data length (in this example, 334)
- 2
- MQMD
- 326
- Reply to format
These offsets are where the IBM MQ - IMS bridge expects to find this information.
We suggest that the DRU exit is as simple as possible. Therefore, in this sample, all messages originating in IMS for a particular IBM MQ queue manager are put to the same IBM MQ queue.
If the message needs to be persistent, IMS must use a synchronized transaction pipe. To do this, the DRU exit must set the OUTPUT flag. For further details, refer to the IMS/ESA Customization Guide.
Write an IBM MQ application to process this queue, and use information from the MQMD structure, the MQIIH structure (if present), or the user data, to route each message to its destination.
A sample assembler DRU exit is shown in Figure 1.TITLE 'DRU0VCPE: OTMA DESTINATION RESOLUTION USER EXIT' DRU0VCPE CSECT DRU0VCPE AMODE 31 DRU0VCPE RMODE ANY * SAVE (14,12),,DRU0VCPE&SYSDATE&SYSTIME SPACE 2 LR R12,R15 MODULE ADDRESSABILITY USING DRU0VCPE,R12 * L R2,12(,R1) R2 -> OTMA DRU PARMS * L R5,88(,R2) R5 ADDR OF OTMA USERDATA LA R6,2(,R5) R6 ADDR OF MQMD USING MQMD,R6 AS A BASE * LA R4,MQMD_LENGTH+10 SET THE OTMA USERDATA LEN STH R4,0(,R5) = LL + MQMD + 8 * CLEAR REST OF USERDATA MVI 0(R6),X'00' ...NULL FIRST BYTE MVC 1(255,R6),0(R6) ...AND PROPAGATE IT MVC 256(MQMD_LENGTH-256+8,R6),255(R6) ...AND PROPAGATE IT * VCPE DS 0H CLC 44(16,R2),=CL16'VCPE' IS DESTINATION VCPE? BNE EXIT4 NO, THEN DEST IS NON-OTMA MVC MQMD_REPLYTOQ,=CL48'IMS.BRIDGE.UNSOLICITED.QUEUE' MVC MQMD_REPLYTOQMGR,=CL48'VCPE' SET QNAME AND QMGRNAME MVC MQMD_FORMAT,MQFMT_IMS SET MQMD FORMAT NAME MVC MQMD_LENGTH(8,R6),MQFMT_IMS_VAR_STRING * SET REPLYTO FORMAT NAME B EXIT0 * EXIT0 DS 0H LA R15,0 SET RC TO OTMA PROCESS B BYEBYE AND EXIT * EXIT4 DS 0H LA R15,4 SET RC TO NON-OTMA B BYEBYE AND EXIT * BYEBYE DS 0H RETURN (14,12),,RC=(15) RETURN CODE IN R15 SPACE 2 REQUATE SPACE 2 CMQA EQUONLY=NO CMQMDA DSECT=YES SPACE 2 END