Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Coding MPP Programs to Process IMS Transactions

4,828 views

Published on

Presentation by Deepak Kohli at the IMS Regional User Group meeting in Markham, Ontario, on 09.19.2016

Published in: Technology
  • Login to see the comments

Coding MPP Programs to Process IMS Transactions

  1. 1. 5.4 Coding  MPP  Programs  to  Process   IMS  Transactions:   A  COBOL  Programmer’s  Practicum NE  Canadian  IMS  Regional  User  Group September  16  – 19 Deepak  Kohli  (deepakk@us.ibm.com) ©  Copyright  IBM  Corporation  2016
  2. 2. • IMS  Architecture • IMS  Transaction  Queuing  &  Scheduling • Coding  MPPs   – Getting  the  Transaction  Message – Sending  the  reply  message  to  the  originating  terminal – Sending  the  reply  message  to  an  alternate  destination • Alternate  PCBs • Program  to  Program  Message  switch • Express  Alternate  PCBs – SYNC  or  COMMIT  Point – Abnormal  Termination  /  Error  Handling – Programming  Tips Agenda ©  Copyright  IBM  Corporation  2016 2
  3. 3. TERMINALS MASTER   TERMINAL TERMINALSTERMINALS TELE-­ COMMUNI-­ CATIONS MESSAGE   SCHEDULING CHECKPOINT RESTART COMMON   SERVICE CONTROL REGION MESSAGE  QUEUES MESSAGE   QUEUES DBRC APPLICATION   PROGRAM APPLICATION   PROGRAM MESSAGE PROCESSING   REGION (“MPR”,   0  or  more) BATCH MESSAGE PROCESSING REGION (“BMP”, 0  or  more) IMS  DATABASES DATA   LANGUAGE/1 DL/I   SUBORDINATE ADDRESS SPACE (“DLISAS”) IMS  architecture IMS  System  Log ©  Copyright  IBM  Corporation  2016 3
  4. 4. Transaction  Message  Queuing
  5. 5. CLASSES                                                            TRANSACTIONS  (PRIORITY) 004 SKILLUPD    (8) SKILLINQ    (5) PAYROLL    (4) 002 INVENT    (10) STOKSTAT    (8) 003 ORDER    (6) RECEIVE    (4) Transaction  Class  &  Priority ©  Copyright  IBM  Corporation  2016 5 • Transactions  are  queued  by  Class  and • Within  class  by  priority • Classes:  1  – 999 • Priority:      0  -­ 14
  6. 6. NORMAL  PRIORITY LIMIT  PRIORITY LIMIT  COUNT QUEUE  COUNT PROCESSING  LIMIT NORMAL  PRIORITY LIMIT  PRIORITY LIMIT  COUNT QUEUE  COUNT PROCESSING  LIMIT TIME TIME            TIME 1                              2                          3 5                                     10                                                          10 30                        30                          30 8                          31                              0 20                        20                          20 TIME TIME            TIME 1                              2                          3 12 12 12 4 4 4 2 1 3 5 5 5 5 5 10 8 8 8 CLASS  001 SKILLINQ   TRANSACTION MESSAGE  1 MESSAGE  N CLASS  001 ~ ~ MESSAGE  1 SKILLUPD   TRANSACTION MESSAGE  N ~ ~ Transaction  Priorities ©  Copyright  IBM  Corporation  2016 6
  7. 7. Application  programs  are  automatically  scheduled   into  Message  Processing  Regions    (MPRs) MESSAGE  1 SKILLUPD CLASS=1,PRTY=8 MESSAGE  N SKILLINQ CLASS=1,PRTY=5 MESSAGE  1 MESSAGE  N ~ ~ ~ ~ S c h      T e      a d      s u      k l e r IMS/ MPR1 Classes 2,3,4,1 IMS/ MPR2 Classes 4,5,6,7 IMS/ MPR3 Classes 3,4,5,6 CLASS  001 CLASS  001 Transaction  Scheduling ©  Copyright  IBM  Corporation  2016 7
  8. 8. Reply  (outbound)  Message  Queuing
  9. 9. LOGICAL   TERMINAL   ABC LOGICAL   TERMINAL   XYZ MESSAGES PHYSICAL   TERMINAL  1 MESSAGES PHYSICAL   DEVICE  2 APPLICATION   PROGRAM PHYSICAL   TERMINAL  3 IMS/TM (Control  Region) Transaction  Manager IMS/MPR (Message  Processing  Region) Logical  terminal  concept ©  Copyright  IBM  Corporation  2016 9
  10. 10. X Y X  (LTERMA) X  (LTERMX) X  (LTERMO) X  (LTERMX) Y  (LTERMB) Y  (LTERMZ) Y  (LTERMA) LTERM  QUEUES LTERMA LTERMB REPLY  (X) REPLY  (Y) REPLY  (Y) Queuing  Transaction  &  Reply  messages   ©  Copyright  IBM  Corporation  2016 10 1 2 3 … Classes Transaction  Codes
  11. 11. 11 Coding  MPP  Programs
  12. 12. MESSAGE  REGION REGION  CONTROLLER  (DFSRRC00) APPLICATION  PROGRAM GET  TRAN  MESSAGE PROCESS ACCESS  DBs SEND  REPLY  MESSAGE RETURN  IF  NO  MORE LANGUAGE  INTERFACE (DFSLI000) MPP  Program  flow 12©  Copyright  IBM  Corporation  2016
  13. 13. Getting  the  Transaction  Message
  14. 14. PCBs  (in  PSBs)  for  Transaction  processing     #1 <      -­-­-­-­ I/O  PCB            > #2 PCB TYPE=TP,MODIFY=YES #3 PCB TYPE=DB … … PSBGEN PSBNAME=PSB_name, • TP – IOPCB • Not  explicitly  coded  in  PSB – Will  be  the  first  of  the  list  of  PCBs  passed  to  an  IMS  program  at  entry  in  almost  all  cases,  but  will   always  be  the  first  PCB  for  application  programs  that  execute  with  an  Online  system • Used  to  receive  or  send  a  message  in  IMS  TM  programs – Alternate  TP  PCB • Used  to  receive  or  send  a  messages  to  destinations  other  than  where  input  transaction  was  received  from • Two  sub-­types:  MODIFY-­able  and  un-­MODIFY-­able • DB – Used  to  read  or  update  a  database  -­ same  as  with  IMS  DB  only 14©  Copyright  IBM  Corporation  2016
  15. 15. LOGICAL   TERMINAL PAYROLL Application  program DATA BASE PCB MASK MASK TP PCB ADDRESS NAME Logical  structures  and  logical  terminals ©  Copyright  IBM  Corporation  2016 15
  16. 16. I/O  PCB TP  PCB1 DB  PCB1 I/O  PCB TP  PCB DB  PCB APPLICATION  PROGRAM PSB PROCEDURE  DIVISION. ENTRY  'DLITCBL'  USING  I-­O-­PCB,  TP-­PCB1,  DB-­PCB1. ENTRY  statement 16©  Copyright  IBM  Corporation  2016
  17. 17. LOGICAL  TERMINAL  NAME 8 RESERVED 2 STATUS  CODE 2 DATE 4 TIME 4 INPUT  SEQUENCE  NUMBER 4 MESSAGE  FORMAT  NAME 8 USERID 8 GROUP 8 TIMESTAMP 12 I/O  PCB   17©  Copyright  IBM  Corporation  2016
  18. 18. 18©  Copyright  IBM  Corporation  2016 LINKAGE  SECTION. 01  IO-­PCB.           03  IO-­LTERM       PIC  X(8).                                                                       03  FILLER PIC  XX.                                             03  IO-­STATUS-­CODE PIC  XX.                                                                     03  IO-­DATE-­YYDDD PIC  S9(7)  COMP-­3.                                                                       03  IO-­TIME-­HHMMSS-­T  PIC  S9(6)V9  COMP-­3.                                                               03  IO-­MSG-­NO PIC  S9(9)  COMP.                                                                   03  IO-­MOD-­NAME PIC  X(8).                                           03  IO-­USERID                           PIC  X(8).                                       I/O  PCB  defined  in  the  Linkage  Section
  19. 19. Getting  Tran  Message  – Single  Segment       • GET  UNIQUE CALL  ‘CBLTDLI’  USING  GU IO-­PCB MESSAGE-­INPUT • MESSAGE-­INPUT  defined  in  WORKING-­STORAGE  SECTION • Successful  call  results  in  ‘bb’  status  code • ‘QC’  status  code  – no  more  transactions 19©  Copyright  IBM  Corporation  2016
  20. 20. Getting  Tran  Message  -­ Multi-­Segment  message       • GET  UNIQUE  – for  first  segment CALL  ‘CBLTDLI’  USING  GU IO-­PCB MESSAGE-­INPUT • GET  NEXT  – for  subsequent  segments CALL  ‘CBLTDLI’  USING  GN IO-­PCB MESSAGE-­NEXT-­SEGMENT – ‘QD’  status  code  – no  more  segments  for  this  transaction  message. 20©  Copyright  IBM  Corporation  2016
  21. 21. GET  UNIQUE GET  NEXT PROCESS  MESSAGE INSERT GO  GET  NEXT  MESSAGE GO  BACK/RETURN  IF  NO  MORE Call  sequence 21©  Copyright  IBM  Corporation  2016
  22. 22. SINGLE  SEGMENT LL    ZZ    PARTSTAT  123456789 MULTI  SEGMENT LL  ZZ  ORDER  HEADER LL  ZZ  ITEM  1 • • • LL  ZZ  ITEM  N Message  Layouts LL    ZZ    TRANCODE  SEGMENT LL    ZZ    SEGMENT  2 • • • LL    ZZ    SEGMENT  N SINGLE SEGMENT MESSAGE MULTI SEGMENT MESSAGE 22©  Copyright  IBM  Corporation  2016
  23. 23. Sending  the  Reply  Message Back  to  the  originating  LTERM
  24. 24. Sending  Output  message 1. Build  and  format  reply  in  I/O  area 2. Calculate  length  (LL)  and  store  in  I/O  area  prefix – LL  includes  LLZZ  (that  is,    Message  +  4)                           3. CALL  ‘CBLTDLI’  USING  ISRT IO-­PCB OUTPUT-­MESSAGE. 24©  Copyright  IBM  Corporation  2016
  25. 25. OUTPUT  MESSAGE  2 INPUT  MESSAGE  3 (no  more)  INPUT  MESSAGE   'QD'  STATUS  CODE 'QC'  STATUS  CODE Message  processing  flow GET  UNIQUE GET  NEXT GET  NEXT INSERT INSERT INSERT GET  UNIQUE GET  NEXT INSERT INSERT GET  UNIQUE GET  NEXT GET  NEXT INSERT GET  UNIQUE RETURN INPUT  MESSAGE  1 OUTPUT  MESSAGE  1 INPUT  MESSAGE  2 'QD'  STATUS  CODE 'QD'  STATUS  CODE OUTPUT  MESSAGE  3 *  All  status  codes  'bb'  except  where  noted 25©  Copyright  IBM  Corporation  2016
  26. 26. Sending  the  Reply  Message To  an  alternate  destination
  27. 27. LL    ZZ    RECEIPT 1000  WIDGETS LL    ZZ  TRANSACION  SUCCESSSFULY  PROCESSED LL    ZZ  PAYMT XYZ  COMPLETE LL    ZZ  ORDER  XYZ  GOODS  RECEIVED ACCOUNTS  PAYABLE  LTERM            (PCB  #2) RECEIVING  LTERM  (I/O  PCB) RECEIVING  LTERM  (I/O  PCB) PAYMT  TRAN  QUEUE  (PCB  #3) RECEIPT  PROGRAM Alternate  output  destinations optional 27©  Copyright  IBM  Corporation  2016
  28. 28. RECEIVE PAYABLE PAYMT RECEIVING  TERMINAL ACCOUNTS  PAYABLE  TERMINAL PAYMENTS  PROGRAM I/O  PCB ALTERNATE  PCB ALTERNATE  PCB Alternate  PCBs 28©  Copyright  IBM  Corporation  2016
  29. 29. Alternate  PCBs  for  Transaction  processing     PCB       TYPE=TP,  LTERM=WXYZ PCB TYPE=TP,  NAME=PAYMT PCB TYPE=TP,MODIFY=YES PCB TYPE=DB PSBGEN PSBNAME=PSB_name 29©  Copyright  IBM  Corporation  2016
  30. 30. Alternate  PCB  Types     • Fixed  (or  Un-­modifiable)  Alternate  TP  PCB – Destination  is  hard  coded  in  the  PSB • Modifiable  Alternate  TP  PCBs – Destination  will  be  specified  by  the  program  via  a  CHANGE  DL/I  call. • Express  PCBs 30©  Copyright  IBM  Corporation  2016
  31. 31. PROCEDURE  DIVISION. ENTRY  'DLITCBL'  USING  I-­O-­PCB,  ALT1,  ALT2,  DB-­PCB. ENTRY  Statement  with  Alternate  PCBs 31©  Copyright  IBM  Corporation  2016
  32. 32. LOGICAL  TERMINAL  NAME/TRAN  CODE   8 RESERVED 2 STATUS  CODE 2 Alternate  PCB  format 32©  Copyright  IBM  Corporation  2016
  33. 33. 33©  Copyright  IBM  Corporation  2016 LINKAGE  SECTION. 01  ALT-­PCB.           03  ALT_DESTINATION       PIC  X(8).                                                                       03  FILLER PIC  XX.                                             03  ALT-­STATUS-­CODE PIC  XX.                                                                     ALT  PCB  defined  in  the  Linkage  Section
  34. 34. Sending  Output  message  to  Alternate  Destination 1. Build  and  format  reply  in  I/O  area 2. Calculate  length  (LL)  and  store  in  I/O  area  prefix – LL  includes  LLZZ  (that  is,    Message  +  4)                           3. CALL  ‘CBLTDLI’  USING  ISRT ALT-­PCB OUTPUT-­MESSAGE. 34©  Copyright  IBM  Corporation  2016
  35. 35. Using  a  Modifiable  PCB   for   Alternate  destination
  36. 36. 'CBLTDLI' CHNG MODIFIABLE  ALT  PCB LTERM/TRANCODE bbbbbbbb PCB  BEFORE LTERMAbb PCB  AFTER 'CHANGE'  REMAINS  UNTIL: GU  TO  I/O  PCB OR PGM  TERMINATION OR ANOTHER  CHNG -­ RESET  TO  BLANKS -­ PURG  REQUIRED  BEFORE  NEW  CHNG } CALL Change  call 36©  Copyright  IBM  Corporation  2016 • Call  ‘CBLTDLI’  USING  CHNG  ALT-­PCB  DEST
  37. 37. What’s  a  Program  to  Program  Message  Switch • When  one  application  program  kicks  of  another  transaction 1. Application  program  build  the  transaction  message 2. If  using  a  fixed  Alternate  PCB,  the  application  issues  a  ISRT   call  to  the  ALT  PCB      or                     3. If  using  modifiable  Alternate  PCB,  the  application  issues  a   CHNG  call  to  the  ALT  PCB,  followed  by  a  ISRT  of  the   message  to  the  ALT  PCB. 37©  Copyright  IBM  Corporation  2016
  38. 38. ISRT ALTERNATE  PCB PAYMT LL    ZZ  PAYMT  XYZ  COMPLETE I/O  PCB RECEIVE GU I/O  PCB                (AFTER) RECEIVE LL    ZZ    PAYMT  XYZ  COMPLETE               (AFTER) RECEIPT  PROGRAM CALL PAYMT  PROGRAM 'CBLTDLI' CALL 'CBLTDLI' Program  to  Program  Message  Switching 38©  Copyright  IBM  Corporation  2016
  39. 39. PURG  DL/I  Call • A  Purge  Call  (Function  Code  “PURG”)  must  be  issued  after   sending  the  last  message  segment  to  a  Modifiable  PCB  before   another  CHNG  call  can  be  issued  to  specify  a  different   destination  for  subsequent  messages. – i.e.  Used  to  indicate  a  message  is  “complete”  for  a  destination.     39©  Copyright  IBM  Corporation  2016
  40. 40. PURG I/O  PCB      OR        ALT    PCB LL    ZZ    SEGMENT        -­ OPTIONAL  (INSERTS) GET  UNIQUE INSERT INSERT PURGE  (TERMINATES  FIRST  MESSAGE) PURGE  (With  SEGMENT  1  in  I/O  Area)   'CBLTDLI' MESSAGE  1 SEGMENT  1 SEGMENT  2 MESSAGE  2 SEGMENT  1 CALL Purge  call Inserts  then  PURGE PURGE  ONLY 40©  Copyright  IBM  Corporation  2016
  41. 41. EXPRESS  PCBs • There  is  an  option  associated  with  Alternate  TP  PCBs   (modifiable  or  not). – EXPRESS=YES • Permits  IMS  to  send  messages  before  the  program  has   reached  a  Commit  Point (but  after  the  PURG  call  has  been   issued). 41©  Copyright  IBM  Corporation  2016
  42. 42. Use  of  Purge  &  “EXPRESS=YES”  PCBs • PCB      TYPE=TP,  MODIFY=YES,EXPRESS=YES • CALL  ‘CBLTDLI’  USING  CHNG ALT-­PCB LTERM_NAME. • CALL  ‘CBLTDLI’  USING  ISRT ALT-­PCB MESSAGE-­O-­AREA. • CALL  ‘CBLTDLI’  USING  PURG ALT-­PCB. 42©  Copyright  IBM  Corporation  2016
  43. 43. SYNC  Point  or  Commit  Point • MPP  Programs  are  called  MODE=SNGL  programs – After  ever  transaction  is  processed,  you  have  reached  a  SYNC  point   or  Commit  point – i.e.  at  every  GU  IOPCB,  a  SYNC  or  Commit  point  is  reached • At  SYNC  or  Commt  Point: – Database  updates  are  committed – Log  records  are  written – Output  messages  are  placed  on  their  output  queues – Locks  are  released 43©  Copyright  IBM  Corporation  2016
  44. 44. Abnormal  Termination • When  program  abnormally  terminates: – Database  updates  are  thrown  away – Messages  (those  not  sent  express),  are  deleted – Input  message  thrown  away – Abend  is  recorded  on  the  IMS  log – Abend  message  is  sent  by  IMS  to  the  terminal – Transaction  &  program  are  stopped  so  that  no  other  messages  for   that  program  will  be  scheduled. • It’s  as  if  the  transaction  never  happened. 44©  Copyright  IBM  Corporation  2016
  45. 45. Error  Handling • MPPs  should  attempt  to  handle  exceptions  without  abending   as  often  as  possible. • When  error  is  encountered,  the  application  program  can  ask   IMS  to  reverse  any  database  updates  since  the  last  sync  point • ROLL  DL/I  call: – CALL  ‘CBLTDLI’  USING  ROLL – A  U778  abend  is  issued  to  the  terminal  &  the  input  message  is   deleted. 45©  Copyright  IBM  Corporation  2016
  46. 46. ROLB  DL/I  call • ROLB  causes  IMS  to  reverse  all  updates,  but  the  transaction   does  not  abend. • To  reverse  updates  &  delete  the  incoming  message: – CALL  ‘CBLTDLI’  USING  ROLB  IO-­PCB. • To  reverse  updates  &  reschedule  the  message: – CALL  ‘CBLTDLI’  USING  ROLB  IOPCB  INPUT-­MESSAGE-­AREA. – The  INPUT-­MESSAGE-­AREA  will  return  the  current  input  message. 46©  Copyright  IBM  Corporation  2016
  47. 47. Programming  tips • All  programs  should  be  written  to  go  back  and  get  another   message  (GU  I/O  PCB)    ('QC'  status  returned  if  no  more  exist) • Database  requests  should  be  handled  with  the  fewest  number   of  calls • Message  processing  programs  should  not  do  lengthy  database   scans  or  updates • Never  issue  file  open/close  operations  -­ beware  of  COBOL   DISPLAYs. • Issue  all  message  segment  gets/inserts  as  consecutive  calls  if   possible • Large,  single  segment  replies  take  fewer  calls  and  less   overhead  than  smaller,  multi  segment  ones – check  system  standard  for  maximum  segment  size 47©  Copyright  IBM  Corporation  2016
  48. 48. Thank  You! 48

×