TMQFORWARD not working-so TPDEQUEUE is failing
687700May 12 2009 — edited May 15 2009Hi,
Am using Tuxedo 10g R3 on AIX 5.3..
I have written a sample program in COBOL using queues.. I have created Queuespace and queues for that..
I have built the server and client programs and created object module for that.. while running the object module enqueue is working fine without error and it is written in the queue.. but since TMQFORWARD didnt call the service the message is not dequeued..
This is what i declared in the UBBCONFIG file.
*GROUPS
TMQGRP LMID="cicsapp" GRPNO=4 TMSNAME=TMS_QM TMSCOUNT=2 OPENINFO="TUXEDO/QM:/home/e160195/cfg/QUE:TMQUEUE"
*SERVERS
TMQUEUE SRVGRP="TMQGRP" SRVID=4 RESTART=Y GRACE=0 MAXGEN=10 CONV=N CLOPT="-s TMQUEUE:TMQUEUE"
TMQFORWARD SRVGRP="TMQGRP" SRVID=5 RESTART=Y GRACE=0 MAXGEN=10 CONV=N CLOPT="-- -i 2 -q TOUPPER -n"
where TMQUEUE is my queuespace name and TOUPPER is service name and it is one of the queue(for enqueue) and RPLYQ is reply queue name and ERRQ is error queue name..
and my client code is:
IDENTIFICATION DIVISION.
PROGRAM-ID. QUECL.
AUTHOR. TUXEDO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPQUEDEF-REC.
COPY TPQUEDEF.
*
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*
01 TPINFDEF-REC.
COPY TPINFDEF.
*****************************************************
* Log messages definitions
*****************************************************
01 LOGMSG.
05 FILLER PIC X(8) VALUE "QUECL:".
05 LOGMSG-TEXT PIC X(50).
01 LOGMSG-ERR.
05 FILLER PIC X(14) VALUE
"QUECL ERR=>".
05 LOG-ERR-ROUTINE PIC X(10).
05 FILLER PIC X(21) VALUE
" FAILED: TP-STATUS = ".
05 LOG-ERR-TP-STATUS PIC S9(9).
01 LOGMSG-ERR-LEN PIC S9(9) COMP-5.
01 LOGMSG-LEN PIC S9(9) COMP-5.
*
01 USER-DATA-REC PIC X(75).
01 SEND-STRING PIC X(100) VALUE SPACES.
LINKAGE SECTION.
******************************************************
* Start program with command line args
******************************************************
PROCEDURE DIVISION.
MOVE LOW-VALUES TO TPINFDEF-REC.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
START-CSIMPCL.
MOVE "hello" TO SEND-STRING.
DISPLAY "SEND-STRING:before: " SEND-STRING.
MOVE "Started" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
PERFORM DO-TPINIT.
PERFORM DO-TPENQUEUE.
PERFORM DO-TPDEQUEUE.
DISPLAY "SEND-STRING:after: " SEND-STRING.
PERFORM DO-TPTERM.
PERFORM EXIT-PROGRAM.
*****************************************************
* Now register the client with the system.
*****************************************************
DO-TPINIT.
MOVE SPACES TO USRNAME.
MOVE SPACES TO CLTNAME.
MOVE SPACES TO PASSWD.
MOVE SPACES TO GRPNAME.
MOVE ZERO TO DATALEN.
SET TPU-DIP TO TRUE.
*
CALL "TPINITIALIZE" USING TPINFDEF-REC
USER-DATA-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPINITIALIZE Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
*****************************************************
* Issue a TPENQUEUE
*****************************************************
DO-TPENQUEUE.
MOVE LOW-VALUES TO TPQUEDEF-REC.
MOVE "TMQUEUE" TO QSPACE-NAME IN TPQUEDEF-REC.
MOVE "TOUPPER" TO QNAME IN TPQUEDEF-REC.
MOVE "RPLYQ" TO REPLYQUEUE IN TPQUEDEF-REC.
SET TPTRAN IN TPQUEDEF-REC TO TRUE.
SET TPBLOCK IN TPQUEDEF-REC TO TRUE.
SET TPTIME IN TPQUEDEF-REC TO TRUE.
SET TPSIGRSTRT IN TPQUEDEF-REC TO TRUE.
SET TPQREPLYQ IN TPQUEDEF-REC TO TRUE.
SET TPQQOSDELIVERYNONPERSISTENT IN TPQUEDEF-REC TO TRUE.
SET TPQMSGID IN TPQUEDEF-REC TO TRUE.
MOVE LOW-VALUES TO TPTYPE-REC.
MOVE "STRING" TO REC-TYPE IN TPTYPE-REC.
MOVE LENGTH OF SEND-STRING TO LEN IN TPTYPE-REC.
CALL "TPENQUEUE" USING
TPQUEDEF-REC
TPTYPE-REC
SEND-STRING
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPENQUEUE failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM.
DISPLAY "ENQUEUE OVER".
*****************************************************
* Issue a TPDEQUEUE
*****************************************************
DO-TPDEQUEUE.
MOVE LOW-VALUES TO TPQUEDEF-REC.
MOVE "TMQUEUE" TO QSPACE-NAME IN TPQUEDEF-REC.
MOVE "RPLYQ" TO QNAME IN TPQUEDEF-REC.
SET TPTRAN IN TPQUEDEF-REC TO TRUE.
SET TPBLOCK IN TPQUEDEF-REC TO TRUE.
SET TPTIME IN TPQUEDEF-REC TO TRUE.
SET TPSIGRSTRT IN TPQUEDEF-REC TO TRUE.
* SET TPQWAIT IN TPQUEDEF-REC TO TRUE.
MOVE LOW-VALUES TO TPTYPE-REC.
MOVE "STRING" TO REC-TYPE IN TPTYPE-REC.
MOVE LENGTH OF SEND-STRING TO LEN IN TPTYPE-REC.
CALL "TPDEQUEUE" USING
TPQUEDEF-REC
TPTYPE-REC
SEND-STRING
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPDEQUEUE failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
MOVE "TPDEQUEUE" TO LOG-ERR-ROUTINE
MOVE TP-STATUS TO LOG-ERR-TP-STATUS
PERFORM DO-USERLOG-ERR
PERFORM EXIT-PROGRAM.
DISPLAY "DEQUEUE OVER".
*****************************************************
* Leave TUXEDO
*****************************************************
DO-TPTERM.
CALL "TPTERM" USING TPSTATUS-REC.
IF NOT TPOK
MOVE "TPTERM Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
END-IF.
*****************************************************
* Log messages to the userlog
*****************************************************
DO-USERLOG.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.
DO-USERLOG-ERR.
CALL "USERLOG" USING LOGMSG-ERR
LOGMSG-ERR-LEN
TPSTATUS-REC.
*****************************************************
*Leave Application
*****************************************************
EXIT-PROGRAM.
MOVE "Ended" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
STOP RUN.
and here is the server code:
IDENTIFICATION DIVISION.
PROGRAM-ID. TOUPPER.
AUTHOR. TUXEDO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
******************************************************
* Tuxedo definitions
******************************************************
01 TPQUEDEF-REC.
COPY TPQUEDEF.
*
01 TPSVCRET-REC.
COPY TPSVCRET.
*
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
******************************************************
* Log message definitions
******************************************************
01 LOGMSG.
05 FILLER PIC X(10) VALUE
"QUESR :".
05 LOGMSG-TEXT PIC X(50).
01 LOGMSG-LEN PIC S9(9) COMP-5.
******************************************************
* User defined data records
******************************************************
01 SEND-STRING PIC X(100).
*
LINKAGE SECTION.
*
PROCEDURE DIVISION.
*
START-STRING.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
MOVE "Started" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
******************************************************
* Get the data that was sent by the client
******************************************************
MOVE LENGTH OF SEND-STRING TO LEN.
CALL "TPSVCSTART" USING TPSVCDEF-REC
TPTYPE-REC
SEND-STRING
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPSVCSTART Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
IF TPTRUNCATE
MOVE "Data was truncated" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
INSPECT SEND-STRING CONVERTING
"abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
MOVE "Success" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
SET TPSUCCESS TO TRUE.
COPY TPRETURN REPLACING
DATA-REC BY SEND-STRING.
******************************************************
* Write out a log err messages
******************************************************
DO-USERLOG.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.
******************************************************
* EXIT PROGRAM
******************************************************
EXIT-PROGRAM.
MOVE "Failed" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
SET TPFAIL TO TRUE.
COPY TPRETURN REPLACING
DATA-REC BY SEND-STRING.
In ULOG am getting like this,
040915.ibmsceai!?proc.303126.1.-2: QUECL: Started
040915.ibmsceai!?proc.303126.1.0: QUECL: TPDEQUEUE failed
040915.ibmsceai!?proc.303126.1.0:
040915.ibmsceai!?proc.303126.1.0: QUECL: Ended
after running the program the messages stays in request queue for few seconds and then it moves to the error queue.. since dequeue is failing there is no message in the reply queue..
can anyone tell me why this TMQFORWARD is not calling the TOUPPER service?? and dequeue is not working??
Thanks..