The destination resolution user exit

If you have set register 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 our 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 WebSphere 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 WebSphere MQ queue manager are put to the same WebSphere 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, please refer to the IMS/ESA Customization Guide.

You should write a WebSphere 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 39.

Figure 39. Sample assembler DRU exit

         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