MainframeSupports
tip uge 21/2001:

Der er mange måder, man kan lave storage-tabeller i CICS på. Hvis storage skal deles mellem flere uafhængige tasks i samme CICS, så er der ikke så mange muligheder. En af de oplagte er at bruge en TS-kø, men hvis det skal gå rigtig stærkt (hvad det oftest skal i CICS), så vil man lave GETMAIN af et stykke storage og så på en eller anden måde formidle adressen på storage-tabellen til de andre tasks. Her er der også flere muligheder, men de kræver standarder og konventioner og hvad ved jeg.

Der findes et rigtig godt alternativ til GETMAIN, nemlig LOAD PROGRAM med HOLD option. Det gode ved dette alternativ er, at man ved LOAD PROGRAM får adressen på programmet (storage-tabellen) returneret som en del af kaldet. Rent performance-mæssigt er det rigtig hurtigt har en tysk CICS-ekspert engang hvisket mig i øret. For at benytte sig af dette alternativ kræves der visse forberende øvelser, som jeg nu vil gennemgå.

  1. Du skal lave et uhyre simpelt ASSEMBLER-program, som fylder netop så meget som din storage-tabel skal fylde. Følgende program fylder eksempelvis 10000 bytes:
    MYSTGTBL CSECT
     DS CL10000
    END
  2. Programmet skal sendes gennem en assemblering og LINK'es til et LOAD-modul i et dataset på CICS'ens RPL-konkatenering. Hvis du sender det gennem en CICS-prekompilering, så benyt de to options NOPROLOG og NOEPILOG, ellers får du udvidet dit program med noget CICS-kode, som du absolut ikke er interesseret i. På selve LINK'en skal du benytte options NORENT og NCAL. NORENT er ekstemt vigtigt, da programmet ellers vil blive LOAD'et af CICS'en i noget storage, som ikke kan opdateres og dermed kan du ikke fylde noget i din storage-tabel.
  3. Til sidst skal du lave en transaktion, der loader og udfylder din storage-tabel, som jeg i det følgende har valgt at kalde MYSTGTBL. Mit LOAD-modul hedder altså MYSTGTBL. Du danner nu storage-tabellen med en EXEC CICS LOAD PROGRAM('MYSTGTBL') SET(MYSTGTBL-ADDRESS) HOLD. Option HOLD gør, at CICS'en ikke frigiver din storage-tabel, når din load-transaktion slutter eller for den sags skyld på noget andet tidspunkt. Pointeren MYSTGTBL-ADDRESS indeholder adressen på 10000-bytes programmet, som du så har defineret en storage-tabel, der passer til. Så er det bare at udfylde tabellen.

Herefter skal de programmer, der ønsker at læse storage-tabellen, udstede en EXEC CICS LOAD PROGRAM('MYSTGTBL') SET(MYSTGTBL-ADDRESS), hvorefter pointeren MYSTGTBL-ADDRESS indeholder adressen på storage-tabellen. Lettere kan det næsten ikke være. Du er selvfølgelig velkommen til at skrive til mig, hvis du har mod på at kaste dig ud i alt det her og derfor måske har et par uddybende spørgsmål.

Forrige danske tip        Last tip in english        Tip oversigten