1 / 53

Enhanced Inter-program Data Transfer (also known as “Big COMMAREAs”)

Enhanced Inter-program Data Transfer (also known as “Big COMMAREAs”). Steve Zemblowski zem@us.ibm.com. Session Agenda. The 32k COMMAREA “problem” The “solution” Channels and Containers Application programming interface EXEC CICS Java Migration Global and task related user exits

galvin
Download Presentation

Enhanced Inter-program Data Transfer (also known as “Big COMMAREAs”)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Enhanced Inter-program Data Transfer(also known as “Big COMMAREAs”) Steve Zemblowski zem@us.ibm.com

  2. Session Agenda • The 32k COMMAREA “problem” • The “solution” • Channels and Containers • Application programming interface • EXEC CICS • Java • Migration • Global and task related user exits • User replaceable modules • Applications • Monitoring and statistics

  3. The “Problem” • A 32k COMMAREA limitation exists for: • Program to program communication • In a single CICS region • LINK • XCTL • Across CICS regions • Distributed Program Link • Task to task communication • In a single CICS region and across CICS regions • START with data • RETURN

  4. The “Problem”… • Techniques for circumventing the 32k limit • Passing addresses of large storage areas • Single region solution • Placing data in Temporary Storage • Placing data in WebSphere MQ • Using Business Transaction Services (BTS)

  5. The “Solution” • Is not a multi-megabyte COMMAREA • Larger COMMAREA sizes would exacerbate current problems • Data structure complexity • e.g. Overloaded copybooks • Efficient transmission • Code page conversions • DFHCNV mechanism is not easy • Object code compatibility • What about EIBCALEN?

  6. The “Solution”… • Container • Named block of data designed for passing information between programs • “Named” COMMAREAs • No CICS enforced size limitation • Channels are stored above the line but below the bar • Multiple containers can be passed between programs • Channel • A group of Containers • No limit on the number of Containers in a Channel • Non-persistent • Non-recoverable resource • Specified on LINK, XCTL, START and RETURN commands • Only one channel can be passed

  7. The “Solution”… Channel_A Container_One Container_Two Container_Three

  8. Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) Program B Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_INFO’) Program C Typical Scenarios for using Channels • One program / One channel • One channel / Multiple programs • The Channel is the interface to a Component Employee Inquiry component

  9. Program A EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_INFO’) Program C Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘PAYROLL_INFO’) Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘PAYROLL_INFO’) Program B Program C Typical Scenarios for using Channels… • One program / Multiple channels

  10. Program A EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘PUBLIC_INFO’) Program A EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_VER1’) Program C Program C Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘PRIVATE_INFO’) Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_VER2’) Typical Scenarios for using Channels… • One program / Multiple channels

  11. Channels • The current channel • The channel, if any, passed to the program by: • LINK or XCTL • START or RETURN • Does not change during the life of the program • The program may create other channels • Default for EXEC CICS commands that do not explicitly specify a channel name

  12. Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) Current Channel: none Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_INFO’) Current Channel: EMPLOYEE_INFO Program C EXEC CICS LINK PROGRAM(‘PROGRAMD’) Current Channel: EMPLOYEE_INFO Program D EXEC CICS LINK PROGRAM(‘PROGRAME’) CHANNEL(‘MANAGER_INFO’) Current Channel: none Program E EXEC CICS RETURN Current Channel: MANAGER_INFO Channels…

  13. Channels… • Channel scope • Application programs from which the channel can be accessed • Applications can only access the current channel • CICS may create read-only containers • Programs can create new channels • For use in program transfer to a different program • When no program in the link stack can access a channel it is deleted • Occurs at EXEC CICS RETURN or XCTL

  14. Scope of Channel EMPLOYEE_INFO Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) Current Channel: none Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘EMPLOYEE_INFO’) Current Channel: EMPLOYEE_INFO Program C EXEC CICS LINK PROGRAM(‘PROGRAMD’) Current Channel: EMPLOYEE_INFO Scope of Channel MANAGER_INFO Program D EXEC CICS LINK PROGRAM(‘PROGRAME’) CHANNEL(‘MANAGER_INFO’) Current Channel: none Program E EXEC CICS RETURN Current Channel: MANAGER_INFO Channels…

  15. Program B EXEC CICS LINK PROGRAM(‘PROGRAMC’) CHANNEL(‘MANAGER_INFO’) EXEC CICS XCTL PROGRAM(‘PROGRAMD’) CHANNEL(‘PAYROLL_INFO’) Current Channel: EMPLOYEE_INFO Program D EXEC CICS LINK PROGRAM(‘PROGRAME’) CHANNEL(‘PAYROLL_INFO’) EXEC CICS RETURN Current Channel: PAYROLL_INFO Program C EXEC CICS RETURN Current Channel: MANAGER_INFO Program E EXEC CICS RETURN Current Channel: PAYROLL_INFO Channels… Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(‘EMPLOYEE_INFO’) X

  16. Channels… • Lifetime • Creation • A channel is created by naming it on a command • EXEC CICS PUT CONTAINER CHANNEL • EXEC CICS MOVE CONTAINER TOCHANNEL • EXEC CICS LINK PROGRAM CHANNEL • EXEC CICS XCTL PROGRAM CHANNEL • EXEC CICS RETURN TRANSID CHANNEL • EXEC CICS START TRANSID CHANNEL • Deletion • A channel is deleted when it goes out of scope to any program in the linkage stack

  17. Channels… • “Best” practices for performance and reduced complexity • Use separate containers for input and output • Use a dedicated container for error information • Use separate containers for each structure • Use separate containers for different data types • e.g. Character data and binary data • Use separate containers for “read only” versus read/write data • Use separate containers for large amounts of data • Define the channel and container names in a copybook

  18. Channels… • EXEC CICS ASSIGN CHANNEL • CHANNEL (data-area) • returns the 16 character name of the program’s current channel, if one exists; otherwise returns blanks. • Used to discover the channel passed to a program

  19. Containers • Constructing and using a channel • EXEC CICS PUT CONTAINER CHANNEL • Creates a channel and places data into a container within the channel • EXEC CICS GET CONTAINER CHANNEL • Retrieve the container data passed to the called program • EXEC CICS LINK PROGRAM CHANNEL • Links to the program, on a local or remote system, passing the channel and container data • EXEC CICS START TRANSID CHANNEL • Starts a task, on a local or remote system, copying the named channel and container data and passing it to the started task • EXEC CICS RETURN TRANSID CHANNEL • Returns control to CICS, passing the channel and container data to the next transaction id

  20. Containers… • EXEC CICS PUT • CONTAINER (data-value) • Specifies the name (1-16 characters) of the container in which data is to be placed. Do not use names beginning with DFH, • CHANNEL (data-value) • Optional. Specifies the name of the channel that owns the container. If the channel name is not specified the current channel is used. • FROM (data-area) • Specifies the data area from where the data to be saved is read. • FLENGTH (data-value) • Specifies the length of the data area to be saved. • FROMCCSID (data-value) • Specifies the current Coded Character Set of the character data to be put into the container. Defaults to the CCSID of the local CICS region. • DATATYPE (CVDA) • BIT • Default value. Bit data. The data in the container cannot be converted. • CHAR • Character data. The data is in the code page specified by FROMCCSID and will be converted to an internal CICS code page.

  21. Containers… • EXEC CICS GET • CONTAINER (data-value) • Specifies the name (1-16 characters) of the container in which data is to be placed. Do not use names beginning with DFH, • CHANNEL (data-value) • Optional. Specifies the name of the channel that owns the container. If the channel name is not specified the current channel is used. • INTO (data-area) • Specifies the data area into which the retrieved data is to be placed. • FLENGTH (data-value) • Specifies the length of the data area to be read. • INTOCCSID (data-value) • Specifies the current Coded Character Set into which the character data is to be converted. Defaults to the CCSID of the local CICS region. • NODATA • Specifies the only the length of the data in the container is to be returned. The length returned will take into account the INTOCCSID. • SET (ptr-ref) • Specifies a data area in which the address of the retrieved data is returned

  22. Containers… • EXEC CICS MOVE • CONTAINER (data-value) • Specifies the name (1-16 characters) of the source container that is to be moved. • CHANNEL (data-value) • Optional. Specifies the name of the channel that owns the source container. If the channel name is not specified the current channel is used. • TOCHANNEL (data-value) • Specifies the name of the channel that will own the target container • AS (data-value) • Specifies the name of the target container

  23. Containers… • EXEC CICS DELETE • CONTAINER (data-value) • Specifies the name (1-16 characters) of the container that is to be deleted. • CHANNEL (data-value) • Optional. Specifies the name of the channel that owns the container. If the channel name is not specified the current channel is used.

  24. Containers… • Discovering what containers have been passed • Examples: • Output containers • Error Containers • EXEC CICS Commands • STARTBROWSE CONTAINER • CHANNEL option added • GETNEXT CONTAINER (data-area) • ENDBROWSE CONTAINER

  25. COBOL Calling Program Example IDENTIFICATION DIVISION. PROGRAM-ID. CLIENT1. WORKING-STORAGE SECTION. COPY INQINTC * copybook INQINTC * Channel name * 01 INQUIRY-CHANNEL PIC X(16) VALUE ’inqcustrec’. * Container names * 01 CUSTOMER-NO PIC X(16) VALUE ’custno’. * 01 BRANCH-NO PIC X(16) VALUE ’branchno’. * 01 CUSTOMER-RECORD PIC X(16) VALUE ’custrec’. * Define the data fields used by the program * 01 CUSTNO PIC X(8). * 01 BRANCHNO PIC X(5). * 01 CREC. * 02 CUSTNAME PIC X(80). * 02 CUSTADDR1 PIC X(80). * 02 CUSTADDR2 PIC X(80). * 02 CUSTADDR3 PIC X(80).

  26. COBOL Calling Program Example… PROCEDURE DIVISION. MAIN-PROCESSING SECTION. * ... Create CUSTNO and BRANCHNO * ... Create Channel and Container data EXEC CICS PUT CONTAINER(CUSTOMER-NO) CHANNEL(INQUIRY-CHANNEL) FROM(CUSTNO) FLENGTH(LENGTH OF CUSTNO) END-EXEC EXEC CICS PUT CONTAINER(BRANCH-NO) CHANNEL(INQUIRY-CHANNEL) FROM(BRANCHNO) FLENGTH(LENGTH OF BRANCHNO) END-EXEC EXEC CICS LINK PROGRAM(’SERVER1’) CHANNEL(INQUIRY-CHANNEL) END-EXEC EXEC CICS GET CONTAINER(CUSTOMER-RECORD) CHANNEL(INQUIRY-CHANNEL) INTO(CREC) END-EXEC * ...Process customer record EXEC CICS RETURN END-EXEC EXIT.

  27. COBOL Server Program Example IDENTIFICATION DIVISION. PROGRAM-ID. SERVER1. WORKING-STORAGE SECTION. COPY INQINTC * copybook INQINTC * Channel name * 01 INQUIRY-CHANNEL PIC X(16) VALUE ’inqcustrec’. * Container names * 01 CUSTOMER-NO PIC X(16) VALUE ’custno’. * 01 BRANCH-NO PIC X(16) VALUE ’branchno’. * 01 CUSTOMER-RECORD PIC X(16) VALUE ’custrec’. * Define the data fields used by the program * 01 CUSTNO PIC X(8). * 01 BRANCHNO PIC X(5). * 01 CREC. * 02 CUSTNAME PIC X(80). * 02 CUSTADDR1 PIC X(80). * 02 CUSTADDR2 PIC X(80). * 02 CUSTADDR3 PIC X(80).

  28. COBOL Server Program Example… PROCEDURE DIVISION. MAIN-PROCESSING SECTION. EXEC CICS GET CONTAINER(CUSTOMER-NO) INTO(CUSTNO) END-EXEC EXEC CICS GET CONTAINER(BRANCH-NO) INTO(BRANCHNO) END-EXEC ... USE CUSTNO AND BRANCHNO TO FIND CREC IN A DATABASE EXEC CICS PUT CONTAINER(CUSTOMER-RECORD) FROM(CREC) FLENGTH(LENGTH OF CREC) END-EXEC EXEC CICS RETURN END-EXEC EXIT.

  29. Java Programming • JCICS calls are provided to support Java programs • com.ibm.cics.server.Channel • com.ibm.cics.server.Container • com.ibm.cics.server.ContainerIterator

  30. Java Programming… • Creating a new channel • Create a channel using the createChannel method of the task class Task t = Task.getTask(); Channel custData = t.createChannel("Customer_Data");

  31. Java Programming… • Creating a new container • Create the container using the createContainer method of the Channel class Container custRec = custData.createContainer("Customer_Record"); • Putting data into the container • Use the Container.put() method • Data can be added as a byte array or string String custNo = "00054321"; byte[] custRecIn = custNo.getBytes(); custRec.put(custRecIn); • Or custRec.put("00054321");

  32. Java Programming… • Passing a channel to another program • Use the link() and xctl() methods of the Program class programX.link(custData); programY.xctl(custData); • Passing a channel to another task • Use the issue method of the StartRequest class StartRequest.issue(custData); • Use the setNextChannel() method of the TerminalPrincipalFacility class: terminalPF.setNextChannel(custData);

  33. Java Programming… • Receiving the current channel • Use the getCurrentChannel() method of the Task class Task t = Task.getTask(); Channel custData = t.getCurrentChannel(); Container custRec = custData.getContainer("Customer_Record"); • Getting data from a container • Use the Container.get() method to read the data in a container into a byte array: byte[] custInfo = custRec.get();

  34. Java Programming… • Browsing the current channel • Use the ContainerIterator object Task t = Task.getTask(); ContainerIterator ci = t.containerIterator(); While (ci.hasNext()) { Container custRec = ci.next(); // Process the container... }

  35. Java Programming Example import com.ibm.cics.server.*; public class Payroll { ... // create the payroll_2005 channel Task t = Task.getTask(); Channel payroll_2005 = t.createChannel("payroll-2005"); // create the employee container Container employee = payroll_2005.createContainer("employee"); // put the employee name into the container employee.put("John Doe"); // create the wage container Container wage = payroll_2005.createContainer("wage"); // put the wage into the container wage.put("2000");

  36. Java Programming Example… // Link to the PAYROLL program, passing the payroll_2005 channel Program p = new Program(); p.setName("PAYR"); p.link(payroll_2005); // Get the status container which has been returned Container status = payroll_2005.getContainer("status"); // Get the status information byte[] payrollStatus = status.get(); ... }

  37. Containers and Business Transaction Services • Containers have been used in BTS applications since CICS TS 1.3 • The container commands used in a channel context are similar to those in a BTS context • GET, PUT • MOVE, DELETE • Programs that issue container commands can be used in both a channel and BTS context • Some programming restrictions • Avoid specific reference to BTS or Channel context on commands • Cannot move containers between BTS and channels

  38. Containers and Business Transaction Services… • Channel or BTS specific options on container commands • GET command • ACQACTIVITY, ACQPROCESS, ACTIVITY and PROCESS • CHANNEL and INTOCCSID • PUT command • ACQACTIVITY, ACQPROCESS, ACTIVITY and PROCESS • CHANNEL, DATATYPE and FROMCCSID • MOVE command • FROMACTIVITY, FROMPROCESS, TOACTIVITY, TOPROCESS • CHANNEL, TOCHANNEL • DELETE command • ACQACTIVITY, ACQPROCESS, ACTIVITY and PROCESS • CHANNEL

  39. ! create the employee container on the payroll interface EXEC CICS PUT CONTAINER('employee') CHANNEL('payroll') .... ! create the wage container on the payroll interface EXEC CICS PUT CONTAINER('wage') CHANNEL('payroll') .... ! invoke the payroll service passing the payroll interface EXEC CICS LINK PROGRAM('PAYR') CHANNEL('payroll') ! examine the status returned on the payroll interface EXEC CICS GET CONTAINER('status') CHANNEL('payroll') .... DEFINE ACTIVITY('payroll') PROGRAM('payact') ! create the employee container on the payroll interface EXEC CICS PUT CONTAINER('employee') ACTIVITY('payroll') FROM('Fred Smith') ! create the wage container on the payroll interface EXEC CICS PUT CONTAINER('wage') ACTIVITY('payroll') FROM('10 pounds') ! invoke the payroll service passing the payroll interface EXEC CICS LINK ACTIVITY('payroll') ! examine the status returned on the payroll interface EXEC CICS GET CONTAINER('status') ACTIVITY('payroll') INTO(status) Simple clients use a channel to pass containers to the service BTS wrapper controls a more sophisticated application Program “PAYACT” EXEC CICS RETRIEVE EVENT(... WHEN('.... EXEC CICS LINK PROGRAM('payt') Program “PAYR” ! get the employee passed into this program EXEC CICS GET CONTAINER('employee') INTO(emp) : : ! return the status to the caller EXEC CICS PUT CONTAINER('status') FROM('OK') Container-aware programs should be insensitive to the Type of containers that are presented to them Containers and Business Transaction Services…

  40. Global User Exits • Global User Exits can create and pass channels and containers to programs they call • Changes to Global User Exits • Existence bits with channel name passed to exits • XICEREQ, XICEREQC • XPCREQ, XPCEREQC • Channel name added to the PCUE parameter list • XPCFTCH • Exits may not access contents of channels

  41. Task Related User Exits & User Replaceable Modules • Task Related User Exits can create and pass channels and containers to programs they call • User Replaceable Modules can create and pass channels and containers to programs they call • URMs may not access contents of application channels

  42. Dynamic Routing Program • Dynamic routing copybook • DYRCHANL (new field) • Name of channel associated with the request • DYRACMAA (existing field) • If the user application employs a communications area (COMMAREA), the 31-bit address of the application's COMMAREA • If the user application employs a channel and has created, within the channel, a container named DFHROUTE, the 31-bit address of the DFHROUTE container • If the user application has no COMMAREA and no DFHROUTE container, null characters • DYRLEVEL (existing field) • Level of CICS AOR required to successfully process a routed request • X’03’ – requires a CICS TS 3.1 system • DYRTYPE (existing request) • Type of request for which the routing program is invoked • 2 - Terminal related START with no data and no channel • 3 - Terminal related START with data but no channel • 4 – Program link with no channel • 6 – Non-terminal related START with no channel • 9 - Program link with a channel • A -Terminal related START with a channel • B - Non-terminal related START with a channel • DYRVER (existing field) • Version number of the dynamic routing program interface • CICS TS V3.1 number is 10

  43. Monitoring • New monitoring group DFHCHNL • PGTOTCCT • Total number of CICS requests for channel containers for the task • PGBRWCCT • Number of browse requests for channel containers for the task • PGGETCT • Number if GET CONTAINER requests for the task • PGPUTCT • Number of PUT CONTAINER requests for the task • PGMOVCT • Number of MOVE CONTAINER requests for the task • PGGETCDL • Total length, in bytes, of all the GET CONTAINER data returned • PGPUTCDL • Total length, in bytes, of all the GET CONTAINER data returned

  44. Monitoring… • Changed monitoring group DFHPROG • PCDLCSDL • Total length, in bytes, of the container data for a DPL • PCDLCRDL • Total length, in bytes, of the container data returned from a DPL • PCLNKCCT • Number of LINK requests issued with the channel option for this task • PCXCLCCT • Number of XCTL requests issued with the channel option for this task • PCDPLCCT • Total length, in bytes, of the container data passed on XCTLs • PCRTNCCT • Number of RETURN requests issued with the channel option for this task • PCRTNCDL • Total length, in bytes, of the container data RETURNed

  45. Monitoring… • Changed monitoring group DFHTASK • ICSTACCT • Number of START requests issued with the channel option • ICSTACDL • Length of the data in the containers of all the locally-executed START CHANNEL requests • ICSTRCCT • Number of interval control START CHANNEL requests to be executed on remote systems • ICSTRCDL', 4 BYTES) • Total length of the data in the containers of all the remotely executed START CHANNEL requests.

  46. Statistics • New fields in ISC/IRC system entry • Terminal sharing • Number of terminal-sharing channel requests • Number of bytes sent on terminal-sharing channel requests • Number of bytes received on terminal-sharing channel requests • Program Control • Number of program control LINK requests, with channels, for function shipping • Number of bytes sent on LINK channel requests • Number of bytes received on LINK channel requests • Interval Control • Number of interval control START requests, with channels, for function shipping • Number of bytes sent on START channel requests • Number of bytes received on START channel requests

  47. Statistics… Connection Name/Netname . . . . . : CJB2/IYK2Z1V2 Access Method/Protocol. . . . . . . . . : XM Autoinstalled Connection Create Time. . : 00:00:00.00000 Peak Contention Losers. . . . . . : 0 ATIs satisfied by Losers. . . . . : 0 Receive Session Count . . . . . . . . . : 5 Peak Contention Winners . . . . . : 0 Send Session Count. . . . . . . . . . . : 5 ATIs satisfied by Winners . . . . : 0 Current AIDs in chain . . . . . . : 0 Generic AIDs in chain . . . . . . . . . : 0 Total number of Bids sent . . . . : 0 Current Bids in progress. . . . . : 0 Peak Bids in progress . . . . . . . . . : 0 Total Allocates . . . . . . . . . : 0 Allocates per second. . . . . . . . . . : 0.00 Allocates Queued. . . . . . . . . : 0 Peak Allocates Queued . . . . . . : 0 Allocate Max Queue Time . . . . . . . . : 0 Allocates Failed - Link . . . . . : 0 Allocate Queue Limit. . . . . . . . . . : 0 Allocates Failed - Other. . . . . : 0 Allocates Rejected - Queue Limit. . . . : 0

  48. Statistics… Transaction Routing Requests Max Queue Time - Allocate Purge . . . . : 0 ____________________________ Transaction Routing - Total . . . : 0 Allocates Purged - Max Queue Time . . . : 0 Transaction Routing - Channel . : 0 Allocates Rejected - XZIQUE . . . . . . : 0 Function Shipping Requests XZIQUE - Allocate Purge . . . . . . . . : 0 __________________________ File Control. . . . . . . . . . : 0 Allocates Purged - XZIQUE . . . . . . . : 0 Interval Control - Total. . . . : 0 Interval Control - Channel. . : 0 Transient Data. . . . . . . . . : 0 Temporary Storage . . . . . . . : 0 Program Control - Total . . . . : 0 Program Control - Channel . . : 0 _______________________________________________ Total . . . . . . . . . . . . . . : 0 Bytes Sent by Transaction Routing requests . . : 0 Average Bytes Sent by Routing requests. : 0 Bytes Received by Transaction Routing requests : 0 Bytes Sent by Program Channel requests . . . . : 0 Average Bytes Sent by Channel request . : 0 Bytes Received by Program Channel requests . . : 0 Bytes Sent by Interval Channel requests. . . . : 0 Average Bytes Sent by Channel request . : 0 Bytes Received by Interval Channel requests. . : 0

  49. Program A EXEC CICS LINK PROGRAM(‘PROGRAMB’) COMMAREA(structure) Program B EXEC CICS ADDRESS COMMAREA(structure-ptr) Exploiting Channels in Application Programs • Existing application with COMMAREA • Changed application using Channels Program A EXEC CICS PUT CONTAINER(structure name) CHANNEL(channel-name) FROM(structure) EXEC CICS LINK PROGRAM(‘PROGRAMB’) CHANNEL(channel-name) EXEC CICS GET CONTAINER(structure-name) INTO(structure) Program B EXEC CICS GET CONTAINER(structure-name) INTO(structure) EXEC CICS PUT CONTAINER(structure-name) FROM(structure) EXEC CICS RETURN

  50. Transaction 1 EXEC CICS START TRANSID(‘TRN2’) FROM(structure) Transaction 2 EXEC CICS RETRIEVE INTO(structure) Exploiting Channels in Application Programs… • Existing application with START data • Changed application using Channels Transaction 1 EXEC CICS PUT CONTAINER(structure-name) CHANNEL(channel-name) FROM(structure) EXEC CICS START TRANSID(‘TRN2’) CHANNEL(channel-name) Transaction 2 EXEC CICS GET CONTAINER(structure-name) INTO(structure)

More Related