Getting a message using signaling

Signaling is available only with WebSphere MQ for z/OS.

This example demonstrates how to use the MQGET call with signaling. This extract is taken from the Credit Check sample application (program CSQ4CVB2) supplied with WebSphere MQ for z/OS.



  ·
  ·
  ·
* -------------------------------------------------------* WORKING-STORAGE SECTION. * -------------------------------------------------------* * * W00 - General work fields
  ·
  ·
  ·
01 W00-WAIT-INTERVAL PIC S9(09) BINARY VALUE 30000. * * W03 - MQM API fields * 01 W03-HCONN PIC S9(9) BINARY VALUE ZERO. 01 W03-HOBJ-REPLYQ PIC S9(9) BINARY. 01 W03-COMPCODE PIC S9(9) BINARY. 01 W03-REASON PIC S9(9) BINARY. 01 W03-DATALEN PIC S9(9) BINARY. 01 W03-BUFFLEN PIC S9(9) BINARY.
  ·
  ·
  ·
01 W03-GET-BUFFER. 05 W03-CSQ4BQRM. COPY CSQ4VB4. * 05 W03-CSQ4BIIM REDEFINES W03-CSQ4BQRM. COPY CSQ4VB1. * 05 W03-CSQ4BPGM REDEFINES W03-CSQ4BIIM. COPY CSQ4VB5.
  ·
  ·
  ·
* API control blocks * 01 MQM-MESSAGE-DESCRIPTOR. COPY CMQMDV. 01 MQM-GET-MESSAGE-OPTIONS. COPY CMQGMOV.
  ·
  ·
  ·
* MQV contains constants (for filling in the * control blocks) and return codes (for testing * the result of a call). * 01 MQM-MQV. COPY CMQV SUPPRESS. * -------------------------------------------------------* LINKAGE SECTION. * -------------------------------------------------------* 01 L01-ECB-ADDR-LIST. 05 L01-ECB-ADDR1 POINTER. 05 L01-ECB-ADDR2 POINTER.
*
 01  L02-ECBS.
     05  L02-INQUIRY-ECB1     PIC S9(09) BINARY.
     05  L02-REPLY-ECB2       PIC S9(09) BINARY.
 01  REDEFINES L02-ECBS.
     05                       PIC  X(02).
     05  L02-INQUIRY-ECB1-CC  PIC S9(04) BINARY.
     05                       PIC  X(02).
     05  L02-REPLY-ECB2-CC    PIC S9(04) BINARY.
*
* -------------------------------------------------------*
 PROCEDURE DIVISION.
* -------------------------------------------------------*

  ·
  ·
  ·
* Initialize variables, open queues, set signal on * inquiry queue.
  ·
  ·
  ·
* -------------------------------------------------------* PROCESS-SIGNAL-ACCEPTED SECTION. * -------------------------------------------------------* * This section gets a message with signal. If a * * message is received, process it. If the signal * * is set or is already set, the program goes into * * an operating system wait. * * Otherwise an error is reported and call error set. * * -------------------------------------------------------* * PERFORM REPLYQ-GETSIGNAL. * EVALUATE TRUE WHEN (W03-COMPCODE = MQCC-OK AND W03-REASON = MQRC-NONE) PERFORM PROCESS-REPLYQ-MESSAGE * WHEN (W03-COMPCODE = MQCC-WARNING AND W03-REASON = MQRC-SIGNAL-REQUEST-ACCEPTED) OR (W03-COMPCODE = MQCC-FAILED AND W03-REASON = MQRC-SIGNAL-OUTSTANDING) PERFORM EXTERNAL-WAIT * WHEN OTHER MOVE 'MQGET SIGNAL' TO M02-OPERATION MOVE MQOD-OBJECTNAME TO M02-OBJECTNAME PERFORM RECORD-CALL-ERROR MOVE W06-CALL-ERROR TO W06-CALL-STATUS END-EVALUATE. * PROCESS-SIGNAL-ACCEPTED-EXIT. * Return to performing section EXIT. EJECT *
* -------------------------------------------------------*
 EXTERNAL-WAIT SECTION.
* -------------------------------------------------------*
*  This section performs an external CICS wait on two    *
*  ECBs until at least one is posted.  It then calls     *
*  the sections to handle the posted ECB.                *
* -------------------------------------------------------*
     EXEC CICS WAIT EXTERNAL
         ECBLIST(W04-ECB-ADDR-LIST-PTR)
         NUMEVENTS(2)
     END-EXEC.
*
* At least one ECB must have been posted to get to this
* point.  Test which ECB has been posted and perform
* the appropriate section.
*
     IF L02-INQUIRY-ECB1 NOT = 0
         PERFORM TEST-INQUIRYQ-ECB
     ELSE
         PERFORM TEST-REPLYQ-ECB
     END-IF.
*
 EXTERNAL-WAIT-EXIT.
*
*    Return to performing section.
*
     EXIT.
     EJECT

  ·
  ·
  ·
* -------------------------------------------------------* REPLYQ-GETSIGNAL SECTION. * -------------------------------------------------------* * * * This section performs an MQGET call (in syncpoint with * * signal) on the reply queue. The signal field in the * * MQGMO is set to the address of the ECB. * * Response handling is done by the performing section. * * * * -------------------------------------------------------* * COMPUTE MQGMO-OPTIONS = MQGMO-SYNCPOINT + MQGMO-SET-SIGNAL. MOVE W00-WAIT-INTERVAL TO MQGMO-WAITINTERVAL. MOVE LENGTH OF W03-GET-BUFFER TO W03-BUFFLEN. * MOVE ZEROS TO L02-REPLY-ECB2. SET MQGMO-SIGNAL1 TO ADDRESS OF L02-REPLY-ECB2.
*
*    Set msgid and correlid to nulls so that any message
*    will qualify.
*
     MOVE MQMI-NONE TO MQMD-MSGID.
     MOVE MQCI-NONE TO MQMD-CORRELID.
*
     CALL 'MQGET' USING W03-HCONN
                        W03-HOBJ-REPLYQ
                        MQMD
                        MQGMO
                        W03-BUFFLEN
                        W03-GET-BUFFER
                        W03-DATALEN
                        W03-COMPCODE
                        W03-REASON.
*
 REPLYQ-GETSIGNAL-EXIT.
*
*    Return to performing section.
*
     EXIT.
     EJECT
*

  ·
  ·
  ·