An overview of how to build CICS applications: language options, interaction patterns, and program control.
CICS supports multiple programming languages, each with specific strengths and use cases. Understanding these options helps you choose the right approach for your application needs.
Feature | COBOL/PL/I | Java (JCICS) |
---|---|---|
Performance | Native, optimal | JVM overhead |
Development Speed | Traditional | Modern, faster |
Integration | Mainframe native | Modern APIs |
Maintenance | Legacy expertise | Modern practices |
COBOL with EXEC CICS
1234567891011121314151617IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE01. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-COMMAREA. 05 WS-CUSTOMER-ID PIC X(10). 05 WS-CUSTOMER-NAME PIC X(30). PROCEDURE DIVISION. EXEC CICS RECEIVE INTO(WS-COMMAREA) END-EXEC * Process customer data EXEC CICS LINK PROGRAM('CUSTVAL') COMMAREA(WS-COMMAREA) END-EXEC EXEC CICS RETURN END-EXEC.
Java with JCICS
123456789101112131415161718192021import com.ibm.cics.server.*; import com.ibm.cics.server.invocation.*; public class SampleCICS { public static void main(CommAreaHolder cah) { try { // Get customer data from commarea String customerData = cah.getString(); // Process with Java logic Customer customer = processCustomer(customerData); // Link to COBOL program ProgramManager pm = new ProgramManager(); pm.link("CUSTVAL", customer.getData()); } catch (Exception e) { // Error handling } } }
Understanding the difference between conversational and pseudo-conversational programming models is crucial for designing scalable CICS applications. Each approach has specific advantages and use cases.
Conversational COBOL Example
123456789101112131415161718192021222324252627282930IDENTIFICATION DIVISION. PROGRAM-ID. CONVERSATIONAL. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SCREEN-DATA. 05 WS-USER-INPUT PIC X(80). 05 WS-RESPONSE PIC X(80). PROCEDURE DIVISION. MAIN-LOGIC. PERFORM GET-USER-INPUT PERFORM PROCESS-INPUT PERFORM SEND-RESPONSE PERFORM GET-USER-INPUT PERFORM PROCESS-INPUT PERFORM SEND-RESPONSE EXEC CICS RETURN END-EXEC. GET-USER-INPUT. EXEC CICS RECEIVE INTO(WS-USER-INPUT) END-EXEC. PROCESS-INPUT. * Process user input here MOVE 'Processed' TO WS-RESPONSE. SEND-RESPONSE. EXEC CICS SEND FROM(WS-RESPONSE) END-EXEC.
Pseudo-Conversational COBOL Example
12345678910111213141516171819202122232425262728IDENTIFICATION DIVISION. PROGRAM-ID. PSEUDO-CONV. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-COMMAREA. 05 WS-CONVERSATION-STATE PIC X(1). 88 FIRST-SCREEN VALUE '1'. 88 SECOND-SCREEN VALUE '2'. 05 WS-USER-DATA PIC X(80). 05 WS-PROCESSED-DATA PIC X(80). PROCEDURE DIVISION. MAIN-LOGIC. EXEC CICS RECEIVE INTO(WS-COMMAREA) END-EXEC EVALUATE TRUE WHEN FIRST-SCREEN PERFORM PROCESS-FIRST-SCREEN WHEN SECOND-SCREEN PERFORM PROCESS-SECOND-SCREEN END-EVALUATE EXEC CICS SEND FROM(WS-COMMAREA) END-EXEC EXEC CICS RETURN TRANSID('MENU') COMMAREA(WS-COMMAREA) END-EXEC.
Channels and Containers provide a modern approach to state management in CICS, offering more flexibility than COMMAREA for complex data structures.
Channels & Containers Example
123456789101112131415161718192021222324IDENTIFICATION DIVISION. PROGRAM-ID. CHANNEL-EXAMPLE. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-CUSTOMER-DATA. 05 WS-CUSTOMER-ID PIC X(10). 05 WS-CUSTOMER-NAME PIC X(30). 05 WS-CUSTOMER-ADDR PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. * Put customer data in container EXEC CICS PUT CONTAINER('CUSTDATA') CHANNEL('CUSTOMER') FROM(WS-CUSTOMER-DATA) END-EXEC * Link to next program with channel EXEC CICS LINK PROGRAM('CUSTPROC') CHANNEL('CUSTOMER') END-EXEC EXEC CICS RETURN END-EXEC.
Reading from Containers
1234567891011121314151617181920212223IDENTIFICATION DIVISION. PROGRAM-ID. READ-CONTAINER. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-CUSTOMER-DATA. 05 WS-CUSTOMER-ID PIC X(10). 05 WS-CUSTOMER-NAME PIC X(30). 05 WS-CUSTOMER-ADDR PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. * Get customer data from container EXEC CICS GET CONTAINER('CUSTDATA') CHANNEL('CUSTOMER') INTO(WS-CUSTOMER-DATA) END-EXEC * Process customer data PERFORM PROCESS-CUSTOMER EXEC CICS RETURN END-EXEC.
LINK
Call another program and return to the caller; pass COMMAREA or CHANNEL.
XCTL
Transfer control to another program without return; caller is replaced.
RETURN
Return to CICS; end the task or schedule next transid for pseudo-conv.
Question 1:
Which model is typically more scalable: conversational or pseudo-conversational?
Question 2:
What is the difference between LINK and XCTL?
Question 3:
Name a Java option for writing CICS applications.