MainframeSupports
tip uge 9/2000:

Som lovet i sidste uge fortsætter vi i denne uge med endnu et tip om asynkron databehandling i CICS. Vi skal nu se på, hvordan man venter på, at et asynkront igangsat task bliver færdigt.

Hvis man vil vente i CICS, så skal man bruge en EXEC CICS DELAY. Når man laver en DELAY sker der faktisk det samme som ved en EXEC CICS START, der bliver dannet et Interval Control Element (ICE). Når ICE'en udløber, bliver tasket, der udstedte DELAY'en, sat igang igen. Fordi der bruges et ICE til at vente med, kan man give sin DELAY et REQID på samme måde som ved en START. Netop denne facilitet kan vi udnytte.

Forestil dig nu, at dit CICS-task finder ud af, at en eller anden dims (måske en TS-kø) ikke er klargjort, og at du ved, at dimsen gøres klar med en anden transaktion, der afvikles asynkront. Du kan nu gøre følgende:

...
EXEC CICS
  START TRANSID('DIMS')
END-EXEC
EXEC CICS
  DELAY INTERVAL(10) REQID('DIMSVENT')
END-EXEC
...

Først startes transaktionen DIMS, og straks efter venter vi højst 10 sekunder og mindre, hvis et eller andet task i mellemtiden laver en EXEC CICS CANCEL REQID('DIMSVENT'). Det er selvfølgelig smartest, at DIMS-transaktionen udsteder denne CANCEL som et signal til eventuelt ventende tasks om, at nu er jeg færdig med min klargøring. Efter DELAY skal du under alle omstændigheder igen validere om den forventede klargøring er sket, da du ikke får noget at vide om, hvor længe din DELAY faktisk varede.

Læg mærke til, at der kan ske det pudsige, at DIMS-transaktionen bliver sat igang og udfører alt det, den skal inklusive at udstede en CANCEL, inden din transaktion når frem til EXEC CICS DELAY. I dette tilfælde vil din transaktion komme til at vente i fulde 10 sekunder, da dit REQID først bliver oprettet i det øjeblik, du udsteder din DELAY. Denne situation er normalt ganske utænkelig, men i takt med, at CICS bliver bedre til at udnytte flere CPU'er samtidigt, så bliver der også videre rammer for det tænkelige.

Du kan læse mere om DELAY REQID i Application Programming Reference til CICS eller til Transaction Server.

Sidste uges tip        Tip oversigten