|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
mq get with syncpoint |
« View previous topic :: View next topic » |
Author |
Message
|
avigosa |
Posted: Thu Mar 20, 2003 8:02 pm Post subject: mq get with syncpoint |
|
|
 Newbie
Joined: 20 Mar 2003 Posts: 9 Location: Singapore
|
Hi there
I have written a program in cobol to read message from a queue with syncpoint. which means the message is not deleted from the queue till the transaction is commited or backed out.
In one of the scenario I am crashing the program after the csqbget and the message is getting lost from the queue.. in actaul fact it should reinstate the message in the queue...
any help is greatly appreciated....
thanks |
|
Back to top |
|
 |
nimconsult |
Posted: Thu Mar 20, 2003 11:31 pm Post subject: |
|
|
 Master
Joined: 22 May 2002 Posts: 268 Location: NIMCONSULT - Belgium
|
Can you describe the scenario? _________________ Nicolas Maréchal
Senior Architect - Partner
NIMCONSULT Software Architecture Services (Belgium)
http://www.nimconsult.be |
|
Back to top |
|
 |
avigosa |
Posted: Fri Mar 21, 2003 4:11 am Post subject: |
|
|
 Newbie
Joined: 20 Mar 2003 Posts: 9 Location: Singapore
|
The complete scenario is :
1. I am making connection,opening a queue and enquiring the queue. This is a persistant queue.
2. getting the message from the queue with the following option.
(a) gmo wait, quescecing, convert, syncpoint. here wait period is unlimited.
(b) make a call to the idms routine to update the db.
(c) commit
(d) if error backout
(e) disconnect.
I am putting a junk message so that before idms db update is performed the job fails with system abend. due to this abend the job crashes. this is happening after the get and before commit or rollback step.
Rightfully the message should go back to the local queue. But in this scenario the message is not going to the local queue neither backout queue.
All the call are dynamic calls. using csqbget etc.. _________________ contact admin
HCL Perot Systems Pte. Ltd. |
|
Back to top |
|
 |
mqonnet |
Posted: Fri Mar 21, 2003 6:39 am Post subject: |
|
|
 Grand Master
Joined: 18 Feb 2002 Posts: 1114 Location: Boston, Ma, Usa.
|
I am not sure what your csqbget is doing, but under normal circumstances the message should go back to the queue. Be it a persistent or a non-persistent message.
Check to see if you have any other getters aginst this queue running simultaneously that might pull of this message which you think is lost, which in fact was backed out.
I dont see any other scenario other than this. Would be of help if you posted your code here. Also did you check that there is ONLY 1 and ONLY 1 ipprocs when you are doing all this.
Cheers
Kumar _________________ IBM Certified WebSphere MQ V5.3 Developer
IBM Certified WebSphere MQ V5.3 Solution Designer
IBM Certified WebSphere MQ V5.3 System Administrator |
|
Back to top |
|
 |
avigosa |
Posted: Mon Mar 24, 2003 1:42 am Post subject: |
|
|
 Newbie
Joined: 20 Mar 2003 Posts: 9 Location: Singapore
|
Heres the code:
Quote: |
**********************************************************
* 100-MAIN-MODULE - MAIN PROGRAM LOGIC *
**********************************************************
100-MAIN-MODULE.
DISPLAY 'IN MAIN AREA PROGRAM, RCRPAPP '.
PERFORM 800-INITIALIZATION THRU 800-EXIT.
PERFORM 200-MQ-CONNECT THRU 200-EXIT.
PERFORM 300-MQ-OPEN THRU 300-EXIT.
PERFORM 400-MQ-GET-MSGS THRU 400-EXIT UNTIL NO-MORE-MSGS.
PERFORM 600-MQ-CLOSE THRU 600-EXIT.
PERFORM 700-MQ-DISCONN THRU 700-EXIT.
100-MAIN-EXIT.
EXIT PROGRAM.
***********************************************************
* 200-MQ-CONNECT - PERFORMED FROM 100-MAIN-MODULE. *
* CONNECTS TO THE LOCAL QUEUE MANAGER *
***********************************************************
200-MQ-CONNECT.
MOVE 0 TO MQ-HCONN
MQ-COMPCODE
MQ-REASON.
MOVE 'CSQBCONN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-QM-NAME
MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
DISPLAY 'CONNECTED TO QM : ', MQ-QM-NAME
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '200-MQ-CONNECT' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBCONN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
200-EXIT.
EXIT.
***********************************************************
* 300-MQ-OPEN - PERFORMED FROM 100-MAIN-MODULE. *
* OPENS THE LOCAL QUEUE BEFORE GETTING THE MESSAGES *
***********************************************************
300-MQ-OPEN.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
COMPUTE MQ-OPEN-OPTIONS = MQOO-INPUT-AS-Q-DEF
+ MQOO-INQUIRE +
+ MQOO-FAIL-IF-QUIESCING.
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE MQ-Q-NAME TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE MQ-QLHOBJ TO MQ-INPUT-QUEUE-HOBJ
MOVE 'Q OPENED' TO WS-INFO
MOVE MQ-Q-NAME TO WS-QMNAME
DISPLAY WS-HEADER
PERFORM 310-INQUIRE-ALIAS
PERFORM 320-OPEN-BASE-QUEUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '300-MQ-OPEN' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-Q-NAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
MOVE MQCA-BACKOUT-REQ-Q-NAME TO MQ-SELECTOR(1).
MOVE MQIA-BACKOUT-THRESHOLD TO MQ-SELECTOR(2).
MOVE 2 TO MQ-SELCOUNT.
MOVE 1 TO MQ-INTATTRCOUNT.
MOVE LENGTH OF MQ-BACKOUT-QUEUE TO MQ-CHARATTRLEN.
MOVE 'CSQBINQ' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-BASE-QUEUE-HOBJ
MQ-SELCOUNT
MQ-SELECTORS
MQ-INTATTRCOUNT
MQ-INTATTRS
MQ-CHARATTRLEN
MQ-BACKOUT-QUEUE
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE MQ-INTATTR(1) TO MQ-BACKOUT-THRESHOLD
MOVE 'Q INQUIRED' TO WS-INFO
DISPLAY 'MQ-BACKOUT-QUEUE: ', MQ-BACKOUT-QUEUE
DISPLAY 'MQ-BACKOUT-THRESHOLD: ', MQ-BACKOUT-THRESHOLD
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '300-MQ-OPEN' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBINQ' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
300-EXIT.
EXIT.
**********************************************************
* 310-INQUIRE-ALIAS-PERFORMED FROM 300-MQ-OPEN. *
* INQUIRES ALIAS QUEUE TO GET BASE QUEUE NAME *
**********************************************************
310-INQUIRE-ALIAS.
MOVE MQCA-BASE-Q-NAME TO MQ-SELECTOR(1).
MOVE 1 TO MQ-SELCOUNT.
MOVE 0 TO MQ-INTATTRCOUNT.
MOVE MQ-Q-NAME-LENGTH TO MQ-CHARATTRLEN.
MOVE 'CSQBINQ' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-INPUT-QUEUE-HOBJ
MQ-SELCOUNT
MQ-SELECTORS
MQ-INTATTRCOUNT
MQ-INTATTRS
MQ-CHARATTRLEN
MQ-BASE-QUEUE
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE 'Q INQUIRED' TO WS-INFO
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '310-INQUIRE-BASE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBINQ' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
310-EXIT.
EXIT.
**********************************************************
* 320-OPEN-BASE-QUEUE. PERFORMED FROM 300-MQ-OPEN. *
* OPENS BASE QUEUE TO INQUIRE. *
**********************************************************
320-OPEN-BASE-QUEUE.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
COMPUTE MQ-OPEN-OPTIONS = MQOO-INQUIRE
+ MQOO-FAIL-IF-QUIESCING.
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE MQ-BASE-QUEUE TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE MQ-QLHOBJ TO MQ-BASE-QUEUE-HOBJ
MOVE 'Q OPENED' TO WS-INFO
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '320-OPEN-BASE-QUEUE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-BASE-QUEUE TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
320-EXIT.
EXIT.
**********************************************************
* 400-MQ-GET-MSGS -PERFORMED FROM 100-MAIN-MODULE. *
* RETRIEVES MESSAGES FROM LOCAL QUEUE. *
**********************************************************
400-MQ-GET-MSGS.
MOVE MQM-MESSAGE-DESCRIPTOR-I
TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-GET-MESSAGE-OPTIONS-I
TO MQM-GET-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-ACTUAL-GET-LENGTH
MQ-COMPCODE
MQ-REASON.
MOVE MQ-INPUT-QUEUE-HOBJ TO MQ-QLHOBJ.
COMPUTE MQGMO-OPTIONS OF MQM-GET-MESSAGE-OPTIONS =
MQGMO-WAIT +
MQGMO-FAIL-IF-QUIESCING +
MQGMO-CONVERT +
MQGMO-SYNCPOINT.
MOVE MQWI-UNLIMITED TO MQGMO-WAITINTERVAL OF
MQM-GET-MESSAGE-OPTIONS.
MOVE 'CSQBGET' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQGMO OF MQM-GET-MESSAGE-OPTIONS
WS-MAX-MESSAGE-LENGTH
WS-REQUEST-MESSAGE
MQ-ACTUAL-GET-LENGTH
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'REQUEST MSG READ AT : ', TEST-DATE
MOVE MQ-ACTUAL-GET-LENGTH TO WS-REQUEST-DATA-LENGTH
MOVE FUNCTION UPPER-CASE(WS-REQUEST-MESSAGE) TO
WS-REQUEST-MESSAGE-U-CASE
MOVE WS-REQUEST-MESSAGE-U-CASE TO WS-REQUEST-MESSAGE
DISPLAY 'REQUEST-MESSAGE: ', WS-REQUEST-MESSAGE
DISPLAY 'BACKOUT COUNT FOR MSG: '
DISPLAY MQMD-BACKOUTCOUNT OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
DISPLAY 'REQUEST MSG LENGTH: ',WS-REQUEST-DATA-LENGTH
IF MQMD-BACKOUTCOUNT OF MQMD
OF MQM-MESSAGE-DESCRIPTOR >= MQ-BACKOUT-THRESHOLD
SET ERROR-IN-DATA TO TRUE
END-IF
IF WS-REQUEST-MESSAGE(1: = "TIME-OUT"
SET NO-MORE-MSGS TO TRUE
DISPLAY 'TIME-OUT MESSAGE RECEIVED'
DISPLAY 'APPLICATION JOB SHUTTING DOWN'
ELSE
MOVE MQM-MESSAGE-DESCRIPTOR TO
MQM-MESSAGE-DESCRIPTOR-BACKOUT
MOVE MQMD-MSGID OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
TO WS-MQ-MSGID
MOVE MQMD-CORRELID OF MQMD
OF MQM-MESSAGE-DESCRIPTOR
TO WS-MQ-CORRLID
MOVE MQMD-REPLYTOQ
OF MQMD OF MQM-MESSAGE-DESCRIPTOR
TO WS-REPLY-QNAME
MOVE MQMD-REPLYTOQMGR
OF MQMD OF MQM-MESSAGE-DESCRIPTOR
TO WS-REPLY-QMNAME
EVALUATE WS-REPLY-QMNAME(1:6)
WHEN 'RPSNT1'
MOVE 'AQ01' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT2'
MOVE 'AQ02' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT3'
MOVE 'AQ03' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN 'RPSNT4'
MOVE 'AQ04' TO WS-QUEUE-TP-CD
MOVE 'OQ' TO WS-QUEUE-DIRECTION
WHEN OTHER
MOVE 'XXXX' TO WS-QUEUE-TP-CD
END-EVALUATE
DISPLAY 'REPLY TO QUEUE: ', WS-REPLY-QNAME
END-IF
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-BASE-QUEUE TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBGET' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
BIND RUN-UNIT ON ANY-ERROR-STATUS
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'BIND RUN UNIT FAILED,ERROR-STATUS IS : ' TO WS-MSG1
MOVE ERROR-STATUS TO WS-MSG2
MOVE WS-MSG TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT.
IF NOT NO-MORE-MSGS
PERFORM 410-PROCESS-PARA THRU 410-EXIT
UNTIL WS-RETRY-FLAG = 'NO'
END-IF.
MOVE 'YES' TO WS-RETRY-FLAG.
MOVE 1 TO WS-RETRY-COUNT.
400-EXIT.
EXIT.
***********************************************************
* 410-PROCESS-PARA - PERFORMED FROM 400-MQ-GET-MSGS *
* EVALUATES THE MESSAGE TYPE AND THEN CALL *
* CORRESPONDING IDMS ROUTINE TO PROCESS THE MESSAGE*
***********************************************************
410-PROCESS-PARA.
IF ERROR-IN-DATA
DISPLAY 'PERFORMING BACKOUT PROCESS'
MOVE 'NO' TO WS-BACKOUT-FLAG
MOVE MQ-BACKOUT-QUEUE TO WS-REPLY-QNAME
DISPLAY 'BACKOUT QUEUE : ', WS-REPLY-QNAME
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 414-MQ-PUT-MSGS-BACKOUT THRU 414-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
FINISH
ELSE
MOVE WS-REQUEST-MESSAGE(1: TO WS-MESSAGE-NAME
DISPLAY 'MESSAGE TYPE :', WS-MESSAGE-NAME
EVALUATE WS-MESSAGE-NAME
WHEN 'RPSAP01 '
MOVE 'RCRPFMD' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP02 '
MOVE 'RCRPBCF ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP03 '
MOVE 'RCRPFHD' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP04 '
MOVE 'RCRPMHD ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP05 '
MOVE 'RCRPCHA ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP06 '
MOVE 'RCRPCIE ' TO WS-IDMS-PROGRAM
PERFORM 420-UPDATE-2-PHASE-COMMIT
WHEN 'RPSAP07 '
MOVE 'RCRPVMB' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPVMB'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT= '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP08 '
MOVE 'RCRPLBS' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPLBS'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN 'RPSAP09 '
MOVE 'RCRPHWA' TO WS-IDMS-PROGRAM
DISPLAY 'CALLING RCRPHWA'
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'CALLING IDMS PGM AT : ', TEST-DATE
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'AFTER CALLING IDMS PGM : ', TEST-DATE
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '410-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'IDMS ROUTINE RETURNED 99'
BIND RUN-UNIT
END-IF
END-IF
IF (WS-REPLY-MESSAGE(21:2) NOT = '90') OR
WS-RETRY-COUNT > 2
DISPLAY 'PROCESSING RESPONSE'
FINISH
SET INQUIRY TO TRUE
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
WHEN OTHER
DISPLAY 'ERROR MESSAGE RECEIVED: ', WS-MESSAGE-NAME
MOVE 'NO' TO WS-RETRY-FLAG
FINISH
END-EVALUATE
END-IF.
410-EXIT.
EXIT.
**********************************************************
* 411-OPEN-RESPONSE-QUEUE-PARA - PERFORMED FROM *
* 410-PROCESS-PARA. *
* PUTS THE RESPONSE MESSAGE IF THE REMOTE QUEUE IS *
* ALREADY OPEN OTHERWISE OPENS THE Q AND PUTS THE MESSAGE*
**********************************************************
411-OPEN-RESPONSE-QUEUE-PARA.
MOVE 'Y' TO WS-Q-HANDLE-EXIST.
SET MQ-REPLY-INX TO 1.
SEARCH WS-MQ-REPLY-QUEUE
AT END
CONTINUE
WHEN (MQ-REPLY-QNAME(MQ-REPLY-INX) = WS-REPLY-QNAME
AND MQ-REPLY-QMNAME(MQ-REPLY-INX) = WS-REPLY-QMNAME)
MOVE 'N' TO WS-Q-HANDLE-EXIST
END-SEARCH.
IF WS-Q-HANDLE-EXIST ='Y'
SET MQ-REPLY-INX TO 1
SEARCH WS-MQ-REPLY-QUEUE
AT END
MOVE '9999' TO LK-RESPONSE-CODE
DISPLAY 'ALL Qs ARE OPENED'
MOVE 'ALL Qs ARE OPENED' TO LK-ERROR-MESSAGE
OF LK-USER-ERROR-DETAILS
PERFORM 999-ABNORMAL-EXIT
WHEN (MQ-REPLY-QNAME(MQ-REPLY-INX) = SPACES
AND MQ-REPLY-QMNAME(MQ-REPLY-INX)= SPACES)
PERFORM 412-MQ-REPLY-Q-OPEN THRU 412-EXIT
END-SEARCH
END-IF.
411-EXIT.
EXIT.
**********************************************************
* 412-MQ-REPLY-Q-OPEN - PERFORMED FROM *
* 411-OPEN-RESPONSE-QUEUE-PARA. *
* IT OPENS THE REPLY Q *
**********************************************************
412-MQ-REPLY-Q-OPEN.
MOVE MQM-OBJECT-DESCRIPTOR-I TO MQM-OBJECT-DESCRIPTOR.
INITIALIZE MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
COMPUTE MQ-OPEN-OPTIONS = MQOO-OUTPUT
+ MQOO-FAIL-IF-QUIESCING.
* assuming as of now that reply-q-name = remote qname on OS/390
MOVE MQOT-Q TO MQOD-OBJECTTYPE
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
MOVE WS-REPLY-QNAME TO MQOD-OBJECTNAME
OF MQOD OF MQM-OBJECT-DESCRIPTOR.
DISPLAY "OPENING REPLY QUEUE : ", WS-REPLY-QNAME.
MOVE 'CSQBOPEN' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQOD OF MQM-OBJECT-DESCRIPTOR
MQ-OPEN-OPTIONS
MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
MOVE WS-REPLY-QNAME TO MQ-REPLY-QNAME(MQ-REPLY-INX)
MOVE WS-REPLY-QMNAME TO MQ-REPLY-QMNAME(MQ-REPLY-INX)
MOVE MQ-QLHOBJ TO MQ-REPLY-HOBJ(MQ-REPLY-INX)
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '400-MQ-GET-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBOPEN' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
412-EXIT.
EXIT.
**********************************************************
* 413-MQ-PUT-MSGS - PERFORMED FROM 410-PROCESS-PARA *
* IT PUTS THE MESSAGE IN THE REPLY Q *
* *
**********************************************************
413-MQ-PUT-MSGS.
MOVE MQM-MESSAGE-DESCRIPTOR-I TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-PUT-MESSAGE-OPTIONS-I TO MQM-PUT-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ.
IF INQUIRY
MOVE WS-MQ-MSGID TO MQMD-CORRELID OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
MOVE MQ-MSG-EXPIRY TO MQMD-EXPIRY OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
ELSE
MOVE WS-MQ-CORRLID TO MQMD-CORRELID OF MQMD OF
MQM-MESSAGE-DESCRIPTOR
END-IF.
MOVE MQFMT-STRING TO MQMD-FORMAT OF MQMD OF
MQM-MESSAGE-DESCRIPTOR.
COMPUTE MQPMO-OPTIONS OF MQM-PUT-MESSAGE-OPTIONS =
MQPMO-FAIL-IF-QUIESCING +
MQPMO-SYNCPOINT.
MOVE 'CSQBPUT' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQPMO OF MQM-PUT-MESSAGE-OPTIONS
WS-REPLY-DATA-LENGTH
WS-REPLY-MESSAGE
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
CONTINUE
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'REPLY MESSAGE SENT AT : ', TEST-DATE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '413-MQ-PUT-MSGS' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBPUT' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
413-EXIT.
EXIT.
*************************************************************
* 414-MQ-PUT-MSGS-BACKOUT - PERFORMED FROM 410-PROCESS-PARA *
* IT PUTS THE MESSAGE IN THE BACKOUT QUEUE *
* *
*************************************************************
414-MQ-PUT-MSGS-BACKOUT.
MOVE MQM-MESSAGE-DESCRIPTOR-BACKOUT
TO MQM-MESSAGE-DESCRIPTOR.
MOVE MQM-PUT-MESSAGE-OPTIONS-I TO MQM-PUT-MESSAGE-OPTIONS.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ.
COMPUTE MQPMO-OPTIONS OF MQM-PUT-MESSAGE-OPTIONS =
MQPMO-FAIL-IF-QUIESCING +
MQPMO-SYNCPOINT.
MOVE 'CSQBPUT' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQMD OF MQM-MESSAGE-DESCRIPTOR
MQPMO OF MQM-PUT-MESSAGE-OPTIONS
WS-REQUEST-DATA-LENGTH
WS-REQUEST-MESSAGE
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
CONTINUE
MOVE FUNCTION CURRENT-DATE TO TEST-DATE
DISPLAY 'BACKOUT MESSAGE SENT AT : ', TEST-DATE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '414-MQ-PUT-MSGS-BACKOUT' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE WS-REPLY-QNAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBPUT' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
414-EXIT.
EXIT.
**********************************************************
* 420-UPDATE-2-PHASE-COMMIT - PERFORMED FROM *
* 410-PROCESS-PARA *
* IT UPDATE THE MESSAGE IN IDMS AND BUILD THE 2-PHASE *
* COMMIT LOGIC. *
**********************************************************
420-UPDATE-2-PHASE-COMMIT.
SET UPDATE TO TRUE
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-Q-MGR-CODE
MOVE 'ARP0002' TO MQSCTL-MSG-APP-CODE
MOVE 'RPS IMAGING' TO MQSCTL-MSG-STD-CODE
MOVE WS-MQ-CORRLID TO MQSCTL-MSG-ID
DISPLAY 'OBTAINING MQSCTL-8460 WITH MSG-ID: ',MQSCTL-MSG-ID
BIND MQSCTL-8460
OBTAIN CALC MQSCTL-8460 ON DB-REC-NOT-FOUND
MOVE 'NO' TO WS-MQCTL-FLAG.
IF MQCTL-NOT-FOUND
DISPLAY 'CALLING: ', WS-IDMS-PROGRAM
CALL WS-IDMS-PROGRAM USING WS-MESSAGE-DETAILS
SUBSCHEMA-CTRL
DISPLAY 'RETURNING FROM : ', WS-IDMS-PROGRAM
DISPLAY 'REPLY MESSAGE : ', WS-REPLY-MESSAGE
DISPLAY 'REPLY DATA LENGTH : ',WS-REPLY-DATA-LENGTH
DISPLAY 'ERROR-STATUS RETURNED FROM IDMS ROUTINE',
ERROR-STATUS
IF WS-REPLY-MESSAGE(21:2) = '90'
IF ERROR-STATUS(3:2) = '29' OR '69'
BIND RUN-UNIT
DISPLAY ' RETURN CODE = 90'
ADD 1 TO WS-RETRY-COUNT
DISPLAY 'IDMS ROLLBACK, RETRY-COUNT',WS-RETRY-COUNT
ELSE
MOVE '9999' TO LK-RESPONSE-CODE
MOVE 'RETURN CODE IS 90, ABNORMAL EXIT' TO
LK-ERROR-MESSAGE OF LK-USER-ERROR-DETAILS
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '420-PROCESS-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
PERFORM 999-ABNORMAL-EXIT
END-IF
ELSE
IF WS-REPLY-MESSAGE(21:2) NOT = '00'
ROLLBACK
DISPLAY 'NON ZERO RC FROM IDMS ROUTINE'
BIND RUN-UNIT
END-IF
END-IF
IF WS-REPLY-MESSAGE(21:2) NOT = '90'
OR WS-RETRY-COUNT > 2
BIND MQSCTL-8460
PERFORM 425-STORE-IDMS-PARA THRU 425-EXIT
DISPLAY 'MQ CTL STORED FOR MESSAGE ID: ',WS-MQ-MSGID
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
DISPLAY 'REPLY SENT TO REPLY-TO-QUEUE: ',WS-REPLY-QNAME
COMMIT
FINISH
DISPLAY 'IDMS COMMIT DONE '
***** Added to test 2 phase algorithm
* DIVIDE 25 BY X-ZERO GIVING X-REM
**** Added to test 2 phase algorithm
IF DB-STATUS-OK
DISPLAY 'CALLING MQCOMMIT'
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
ELSE
PERFORM IDMS-STATUS
END-IF
MOVE 'NO' TO WS-RETRY-FLAG
END-IF
ELSE
DISPLAY 'MQS CTL EXISTS FOR THIS MSG-ID'
MOVE MQSCTL-MSG-RESP-Q-DATA
TO WS-REPLY-MESSAGE
MOVE MQSCTL-MSG-RESP-Q-NAME
TO WS-REPLY-QNAME
MOVE MQSCTL-MSG-RESP-Q-MGR-NAME
TO WS-REPLY-QMNAME
PERFORM 411-OPEN-RESPONSE-QUEUE-PARA THRU 411-EXIT
PERFORM 413-MQ-PUT-MSGS THRU 413-EXIT
PERFORM 500-MQ-COMMIT-PARA THRU 500-EXIT
MOVE 'NO' TO WS-RETRY-FLAG
END-IF.
420-EXIT.
EXIT.
****************************************************************
* 425-STOTE-IDMS-PARA- PERFORMED FROM 420-UPDATE-2-PHASE-COMMIT*
* IT STORES THE RECORD IN IDMS *
****************************************************************
425-STORE-IDMS-PARA.
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-Q-MGR-CODE
MOVE 'ARP0002' TO MQSCTL-MSG-APP-CODE
MOVE 'RCRPAPP' TO MQSCTL-MSG-REQ-PRG
MOVE 'RPS IMAGING' TO MQSCTL-MSG-STD-CODE
MOVE WS-MQ-CORRLID TO MQSCTL-MSG-ID.
MOVE FUNCTION CURRENT-DATE(1: TO MQSCTL-MSG-CTL-DTE.
MOVE FUNCTION CURRENT-DATE(9: TO MQSCTL-MSG-CTL-TIME.
MOVE WS-REPLY-QNAME TO MQSCTL-MSG-RESP-Q-NAME.
MOVE WS-REPLY-QMNAME TO MQSCTL-MSG-RESP-Q-MGR-NAME.
MOVE WS-REPLY-MESSAGE TO MQSCTL-MSG-RESP-Q-DATA.
DISPLAY 'STORING MQ CTL RECORD WITH MSG-ID : ',MQSCTL-MSG-ID.
STORE MQSCTL-8460.
425-EXIT.
EXIT.
****************************************************************
* 500-MQ-COMMIT-PARA - PERFORMED FROM 420-UPDATE-2-PHASE-COMMIT*
* AND 410-PROCESS-PARA *
* IT PERFORMS MQCOMMIT *
****************************************************************
500-MQ-COMMIT-PARA.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.
MOVE 'CSQBCOMM' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
CONTINUE
WHEN OTHER
PERFORM 990-MQ-BACKOUT THRU 990-EXIT
END-EVALUATE.
500-EXIT.
EXIT.
****************************************************************
* 600-MQ-CLOSE - PERFORMED FROM 100-MAIN-MODULE *
* IT QUITS THE ACCESS TO INPUT Q, AND OUPUT Q *
* *
****************************************************************
600-MQ-CLOSE.
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON.
MOVE MQ-INPUT-QUEUE-HOBJ TO MQ-QLHOBJ.
MOVE 'CSQBCLOS' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQCO-NONE
MQ-COMPCODE
MQ-REASON
DISPLAY 'CLOSING,MQ-INPUT-QUEUE-HOBJ: ', MQ-INPUT-QUEUE-HOBJ
EVALUATE MQ-REASON
WHEN 0
DISPLAY 'CLOSED: ', MQ-INPUT-QUEUE-HOBJ
CONTINUE
WHEN OTHER
DISPLAY 'ERROR CLOSING : ', MQ-COMPCODE
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '600-MQ-CLOSE(INPUT Q)' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE MQ-Q-NAME TO LK-Q-NAME
MOVE MQ-QM-NAME TO LK-QM-NAME
MOVE 'CSQBCLOS' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
PERFORM VARYING MQ-REPLY-INX FROM 1 BY 1 UNTIL
MQ-REPLY-INX > WS-MAX-MQ-Q
INITIALIZE MQ-QLHOBJ
MQ-COMPCODE
MQ-REASON
MOVE MQ-REPLY-HOBJ(MQ-REPLY-INX) TO MQ-QLHOBJ
DISPLAY MQ-QLHOBJ
IF MQ-QLHOBJ NOT = 0
MOVE 'CSQBCLOS' TO WS-MQ-PROGRAM
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-QLHOBJ
MQCO-NONE
MQ-COMPCODE
MQ-REASON
EVALUATE MQ-REASON
WHEN 0
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '600-MQ-CLOSE' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBCLOS(OUTPUT Q)' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE
END-IF
END-PERFORM
DISPLAY 'CLOSE PARA FINISHED'.
600-EXIT.
EXIT.
****************************************************************
* 700-MQ-DISCONN - PERFORMED FROM 100-MAIN-MODELE *
* IT DISCONNECTS THE Q MANAGER *
****************************************************************
700-MQ-DISCONN.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.
MOVE 'CSQBDISC' TO WS-MQ-PROGRAM
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
DISPLAY 'DISCONNECT SUCCESSFUL'
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '700-MQ-DISCONN ' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBDISC' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT
END-EVALUATE.
700-EXIT.
EXIT.
****************************************************************
* 800-INITIALIZATION - PERFORMED FROM 100-MAIN-MODULE. *
* IT INTILIAZE THE REPLY QUEQE TABLE AND LINKAGE QM, Q *
* TO WORK VARIABLES. *
****************************************************************
800-INITIALIZATION.
MOVE 5 TO WS-MAX-MQ-Q.
PERFORM VARYING MQ-REPLY-INX FROM 1 BY 1 UNTIL
MQ-REPLY-INX > WS-MAX-MQ-Q
INITIALIZE WS-MQ-REPLY-QUEUE (MQ-REPLY-INX)
END-PERFORM.
MOVE LK-QM-NAME TO MQ-QM-NAME
WS-QMNAME.
MOVE LK-Q-NAME TO MQ-Q-NAME.
800-EXIT.
EXIT.
****************************************************************
* 990-MQBACK-PARA - PERFORMED FROM 500-MQ-COMMIT-PARA
* IT PERFORMS MQROLLBACK.
****************************************************************
990-MQ-BACKOUT.
MOVE 0 TO MQ-COMPCODE.
MOVE 0 TO MQ-REASON.
MOVE 'CSQBBACK' TO WS-MQ-PROGRAM.
CALL WS-MQ-PROGRAM USING MQ-HCONN
MQ-COMPCODE
MQ-REASON.
EVALUATE MQ-REASON
WHEN 0
DISPLAY ' MQ ROLLED BACK'
CONTINUE
WHEN OTHER
MOVE 'RCRPAPP' TO LK-ERR-PROGRAM OF
LK-ERROR-DETAILS
MOVE '990-MQBACK-PARA' TO LK-ERR-LOC OF
LK-ERROR-DETAILS
MOVE 'CSQBBACK' TO LK-MQ-CALL OF
LK-MQ-ERROR-DETAILS
MOVE MQ-COMPCODE TO LK-MQ-CC OF
LK-MQ-ERROR-DETAILS
MOVE MQ-REASON TO LK-MQ-RC OF
LK-MQ-ERROR-DETAILS
MOVE '8888' TO LK-RESPONSE-CODE
SET LK-MQ-ERROR TO TRUE
PERFORM 999-ABNORMAL-EXIT.
990-EXIT.
EXIT.
999-ABNORMAL-EXIT.
EXIT PROGRAM.
IDMS-ABORT SECTION.
IDMS-ABORT-EXIT.
EXIT.
COPY IDMS IDMS-STATUS.
|
_________________ contact admin
HCL Perot Systems Pte. Ltd. |
|
Back to top |
|
 |
avigosa |
Posted: Wed Mar 26, 2003 4:54 am Post subject: |
|
|
 Newbie
Joined: 20 Mar 2003 Posts: 9 Location: Singapore
|
anybody..there..pl.help....on this issue... _________________ contact admin
HCL Perot Systems Pte. Ltd. |
|
Back to top |
|
 |
oz1ccg |
Posted: Wed Mar 26, 2003 8:04 am Post subject: |
|
|
 Yatiri
Joined: 10 Feb 2002 Posts: 628 Location: Denmark
|
|
Back to top |
|
 |
bower5932 |
Posted: Wed Mar 26, 2003 12:42 pm Post subject: |
|
|
 Jedi Knight
Joined: 27 Aug 2001 Posts: 3023 Location: Dallas, TX, USA
|
I'll start by saying that I didn't look at your code.... However, there are a couple of situations which can account for messages going away. One of them is in the client scenario when not using syncpoint:
http://www.mqseries.net/phpBB/viewtopic.php?t=8183
The other situation is when your program dies and doesn't issue an MQDISC. There is a discussion of this under the MQCMIT API in the Application Programming Guide. The behavior varies by platform. You might be running into this situation. |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|