2010年6月23日 星期三

How do I get rid of long running conversational tasks?

You could develop a timeout routine to do this. The timeout program can be done in any language - with only API calls.

The logic is something like this :

* Exec Cics Inquire Task List.
* Chain through the tasklist with a loop and perform a Exec Cics Inquire Task.
* It returns suspend time as well as the suspendtype and suspendvalue.
* You can then determine what suspend time is deemed longer than desired and (important) check for:
o Suspendtype = ZCIOWAIT
o Suspendvalue = DFHZARQ1.
* Next you can perform a Exec Cics Set Task Forcepurge and optionally...
* Start a task on the terminal that will perform a Exec Cics Issue Disconnect.
* Perform a delay of what ever time you feel is good and do it all again. Or perform a start of the same transaction (EIBTRNID) in a few minutes time and terminate.

IDENTIFICATION DIVISION.
PROGRAM-ID. SAPTASKI.
***********************************************************
******** KILL CONVERSATIONAL ORACLE (SUSPENDED) TRANSACTIONS
******** AND RELEASE TERMINAL .
***********************************************************
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 QUEAREA.
03 QUE-SOURCE PIC X(8) VALUE 'TIMEOUT:'.
03 QUE-DATUM PIC X(10).
03 FILLER PIC X.
03 QUE-TYD PIC X(8).
03 FILLER PIC X.
03 QUE-ID PIC X(8).
03 FILLER PIC X.
03 QUE-MESSAGE PIC X(600).
01 WS-TRAN PIC X(4) VALUE SPACES.
88 FORMSTRAN VALUE 'KLB' 'KRIM' 'KRI2' 'IRIS' 'FRS'
'SIR' 'SSK' 'SKV' 'SCH' 'SKP'
'SKR' 'SKA' 'SKM' 'SKS' 'SKU'
'SNB' 'SPR' 'SSA' 'SSK' 'SSM'
'SSN' 'SSP' 'SSS' 'SSW' 'STI'
'MLNK' 'STL' 'STR'.
01 WS-TIME PIC X(8) VALUE SPACES.
01 WS-DATE PIC X(8) VALUE SPACES.
01 WS-ABSTIME PIC S9(8) COMP VALUE +0.
01 WS-NETNAME PIC X(8) VALUE SPACES.
01 WS-APPLID PIC X(8) VALUE SPACES.
88 MAS VALUE 'PRDMAS'.
01 WS-SUB PIC 9(3) VALUE 0.
01 WS-TASKNUM PIC S9(7) COMP-3 VALUE 0.
01 WS-SIZE PIC S9(8) COMP VALUE 0.
01 WS-SUSTYPE PIC X(8) VALUE SPACES.
88 VALIDTYPE VALUE 'ZCIOWAIT'.
01 WS-SUSVALUE PIC X(8) VALUE SPACES.
88 VALIDVALUE VALUE 'DFHZARQ1'.
01 WS-SUSTIME PIC S9(8) COMP VALUE 0.
01 WS-MAXTIME PIC S9(8) COMP VALUE 0.
01 WS-TYPE PIC S9(8) COMP VALUE 0.
01 WS-FACILITY PIC XXXX VALUE SPACES.
01 WS-RESP PIC S9(4) COMP VALUE 0.
01 WS-REP-LENGTH PIC S9(4) COMP VALUE +72.
01 WS-REP-LINE.
03 WS-REP-FIL1 PIC X(28) VALUE
'!!!!! -SAPTASKI-KILLED-TRAN-'.
03 WS-REP-TRAN PIC X(4) VALUE SPACES.
03 WS-REP-FIL1 PIC X(9) VALUE '-ON-TERM-'.
03 WS-REP-TERM PIC X(4) VALUE SPACES.
03 WS-REP-FIL2 PIC X(4) VALUE '-AT-'.
03 WS-REP-DATE PIC X(6) VALUE SPACES.
03 WS-REP-FIL3 PIC X VALUE '-'.
03 WS-REP-TIME PIC X(6) VALUE SPACES.
03 WS-REP-FIL4 PIC X(7) VALUE '- !!!!!'.
LINKAGE SECTION.
01 WS-TASKLIST.
03 TASKNUM PIC S9(7) COMP-3 OCCURS 999.
PROCEDURE DIVISION.
A-MAIN SECTION.
EXEC CICS ASSIGN APPLID(WS-APPLID) END-EXEC.
MOVE 3600 TO WS-MAXTIME.
A-KILL.
EXEC CICS INQUIRE TASK LIST
SET(ADDRESS OF WS-TASKLIST)
SUSPENDED
LISTSIZE(WS-SIZE)
END-EXEC.
EXEC CICS IGNORE CONDITION TASKIDERR END-EXEC.
EXEC CICS IGNORE CONDITION TERMIDERR END-EXEC.
PERFORM VARYING WS-SUB FROM 1
BY 1
UNTIL WS-SUB
> WS-SIZE
MOVE TASKNUM (WS-SUB) TO WS-TASKNUM
EXEC CICS INQUIRE TASK(WS-TASKNUM)
FACILITY(WS-FACILITY)
FACILITYTYPE(WS-TYPE)
SUSPENDTIME(WS-SUSTIME)
SUSPENDTYPE(WS-SUSTYPE)
SUSPENDVALUE(WS-SUSVALUE)
TRANSACTION(WS-TRAN)
END-EXEC
IF WS-FACILITY(1:1) = 'Q'
IF (WS-TYPE = DFHVALUE(TERM)) AND
(WS-SUSTIME > WS-MAXTIME) AND
VALIDTYPE AND VALIDVALUE
EXEC CICS
INQUIRE TERMINAL(WS-FACILITY)
NETNAME(WS-NETNAME)
END-EXEC
IF WS-NETNAME(1:4) NOT = 'FEPI'
PERFORM B-KILL-TERM
END-IF
END-IF
ELSE
IF (WS-TYPE = DFHVALUE(TERM)) AND
(WS-SUSTIME > WS-MAXTIME) AND
VALIDTYPE AND VALIDVALUE
PERFORM B-KILL-TERM
END-IF
END-IF
END-PERFORM.
EXEC CICS START TRANSID('SATK') INTERVAL(000200)
END-EXEC.
EXEC CICS RETURN END-EXEC.
GOBACK.
A-EXIT.
EXIT.
B-KILL-TERM SECTION.
EXEC CICS ASKTIME ABSTIME(WS-ABSTIME) END-EXEC
EXEC CICS FORMATTIME ABSTIME(WS-ABSTIME)
YYMMDD(WS-DATE)
TIME(WS-TIME)
END-EXEC
EXEC CICS FORMATTIME ABSTIME(WS-ABSTIME)
YYYYMMDD(QUE-DATUM)
DATESEP
TIME(QUE-TYD)
TIMESEP
END-EXEC
MOVE WS-TRAN TO QUE-ID.
MOVE 'CONVERSATIONAL TRANSACTION WAS TIMED OUT.'
TO QUE-MESSAGE.
MOVE WS-FACILITY TO WS-REP-TERM
MOVE WS-TRAN TO WS-REP-TRAN
MOVE WS-TIME TO WS-REP-TIME
MOVE WS-DATE TO WS-REP-DATE
EXEC CICS WRITEQ TD QUEUE('CSSL')
FROM(WS-REP-LINE)
LENGTH(WS-REP-LENGTH)
RESP(WS-RESP)
END-EXEC
EXEC CICS SET TASK(WS-TASKNUM)
PURGE
RESP(WS-RESP)
END-EXEC
IF WS-RESP = DFHRESP(NORMAL)
EXEC CICS INQUIRE TRANSACTION('SAPA')
RESP(WS-RESP)
END-EXEC
IF WS-RESP NOT = DFHRESP(NORMAL)
EXEC CICS START TRANSID('SAT1')
TERMID(WS-FACILITY)
END-EXEC
END-IF
************** IF NOT FORMSTRAN
************** EXEC CICS WRITEQ TD QUEUE('SABI')
************** FROM(QUEAREA)
************** NOHANDLE
************** END-EXEC
************** END-IF
END-IF.
B-EXIT.
EXIT.


沒有留言:

張貼留言