MainframeSupports
tip uge 44/2006:

I CICS er der mange måder at dele data på tværs af transaktioner/tasks. En af dem er via TS køer. TS køer har den fordel frem for storage, at de kan deles på tværs af mange CICS regioner. Hvis du har en CICS transaktion, der kører på mange forskellige CICS regioner og det vil være smart for denne CICS transaktion at dele data på tværs af CICS regionerne, så kan du altså benytte en TS kø til dette formål.

Faktisk er der to slags TS køer, der kan benyttes på tværs af CICS systemer. Den ene er en såkaldt remote TS kø, hvor selve TS køen defineres på en bestemt CICS, som alle andre CICS regioner med forbindelse til denne CICS så kan accesse. Det er desværre en lidt dyr løsning performancemæssigt og hvis den CICS, hvor TS køen findes, går ned, så er det bare ret ærgerligt. Til gengæld kan en sådan TS kø back'es op på disk (en såkaldt auxiliary TS kø). Den anden slags TS kø er en shared TS kø, som kun findes i storage. Storage til en sådan TS kø allokeres i en koblingsfacilitet (Coupling Facility, CF) og derfor forsvinder den ikke bare fordi en bestemt CICS går ned. Hvis CF'en går ned, så dør hele sysplex'et og dermed alle CICS regioner. De CICS regioner, der skal dele en TS kø behøver ikke nødvendigvis at have forbindelse til hinanden, bare de har forbindelse til CF'en.

Alt det foregående virker måske rimelig kompliceret, så lad mig give dig et par praktiske hints i stedet. Log dig på en tilfældig CICS, hvor du har adgang til både CEMT og CECI transaktionerne (typisk en test CICS). Udsted en CEMT I TSM kommando. Du får nu en liste over alle de definitioner, som har med TS køer, der kan deles at gøre. Det er dem med en pool parameter på, der er interessante. Ud for definitioner med pool parameteren udfyldt findes der også en prefix parameter. Hvis du kalder din TS kø noget, der starter med dette prefix, så bliver TS køen automatisk til en shared TS kø. Sværere er det ikke. Du skal selvfølgelig sikre dig, at produktions CICS'ene har samme definition, ellers virker det kun i test.

Når du har fundet et passende prefix, så kan du afprøve det med CECI. Udsted en CECI WRITEQ TS QN(<prefix>MYTSQ) FROM('Hello there') på en af CICS regionerne i test. Log dig herefter på en anden test CICS og udsted en CECI READQ TS QN(<prefix>MYTSQ) ITEM(1). Kontroller nu parameteren INTO. Den skulle meget gerne indeholde teksten Hello there. Prøv så den samme CECI READQ på en tredie test CICS og se indholdet af INTO. Jeg synes det er mageløst. Afprøvningen virker selvfølgelig kun, hvis TQ køen <prefix>MYTSQ ikke findes i forvejen. Hvis CICS regionerne ikke er sat korrekt op eller din installation slet ikke benytter sysplex, så virker det heller ikke.

Hvis du benytter CEMT I TSQ i forvejen til at finde og eventuelt aflive TS køer med, så er den triste nyhed, at en shared TS kø ikke vises i CEMT I TSQ. Husk derfor at rydde pænt op efter dig med en CECI DELETEQ TS QN(<prefix>MYTSQ). Når du skal lave din applikation, der benytter en shared TS kø, så skal du især tænke over, hvordan du hælder data i den (hvis det gøres samtidig af flere forskellige tasks, så går der kuk i data), og hvordan du får fjernet TS køen igen, da den ellers vil ligge og fylde ude i CF'en. Det er der stor sandsynlighed for, at nogle systemprogramører bliver sure over, især i jeres produktionsmiljø.

Forrige danske tip        Last tip in english        Tip oversigten