MainframeSupports
tip uge 37/2004:

Nu om dage taler IT branchen rigtig meget om genbrug. En af de klassiske udfordringer i den forbindelse er, at mange installationer siden tidernes morgen har lavet to udgaver af mange under-programmer, en til online og en til batch. Det skyldes typisk, at under-programmet for at kunne udføre sin funktion skal benytte forskellige API'er afhængig af, om under-programmet benyttes i online eller i batch.

For at kunne bruge samme under-program til at kalde et online API og et batch API, så må under-programmet være i stand til at finde ud af, om det bliver eksekveret i online eller i batch. Nu er definitionen af online ret afhængig af, hvad den enkelte installation benytter som transaktionsprocessor. Men batch er næsten altid et job, der bliver udført under kontrol af JES. Dette tip viser, hvordan man finder ud af om ens program bliver eksekveret under JES eller ej. I de to program-eksempler er BATCH altså lig JES og ONLINE alt det andet.

Først lidt COBOL-kode til at finde ud af om et program kører online eller batch:

* IN WORKING-STORAGE SECTION
 01  AREA-ADDRESS PIC S9(9) BINARY.
 01  FILLER REDEFINES AREA-ADDRESS.
   02  AREA-POINTER POINTER.
* IN LINKAGE SECTION
 01  PSA.
   02  FILLER PIC X(548).
   02  ASCB-POINTER POINTER.
 01  ASCB.
   02  FILLER PIC X(172).
   02  JBNI PIC S9(9) BINARY.
* SOMEWHERE IN PROCEDURE DIVISION
     MOVE 0 TO AREA-ADDRESS
     SET ADDRESS OF PSA TO AREA-POINTER
     SET ADDRESS OF ASCB TO ASCB-POINTER
     IF JBNI = 0
       DISPLAY 'ONLINE'
     ELSE
       DISPLAY 'BATCH'
     END-IF

Og herefter en PL/1 procedure, der gør det samme.

batch_or_online: PROC;
DCL psa_address FIXED BIN(31) INIT(0);
DCL psa_pointer POINTER BASED(ADDR(psa_address));
DCL 1 psa BASED(psa_pointer)
  , 2 filler CHAR(548)
  , 2 ascb_pointer POINTER
  ;
DCL 1 ascb BASED(ascb_pointer)
  , 2 filler CHAR(172)
  , 2 jbni FIXED BIN(31)
  ;
IF jbni = 0
  PUT SKIP LIST('ONLINE');
ELSE
  PUT SKIP LIST('BATCH');
END batch_or_online;

Og til sidst lidt om faldgruberne. Det er muligt, men sjældent benyttet, at køre CICS som et batch job. Her vil tippet falde håbløst til jorden. Det skelner heller ikke mellem et started task og et TSO online task, og kan dermed ikke benyttes til at finde ud af, om programmet bliver afviklet under TSO eller CICS eller IMS eller noget helt tredie for den sags skyld.

Forrige danske tip        Last tip in english        Tip oversigten