Business Transaction Services (BTS) is a CICS feature that enables the management of long-running business processes that may span multiple transactions, tasks, or even system boundaries. It provides a framework for building reliable, stateful business applications.
BTS extends traditional CICS transaction processing by supporting:
Unlike traditional CICS transactions that are typically short-lived, BTS business processes can run for minutes, hours, or even days, maintaining state throughout their execution.
A business process is a formal description of a business activity that involves multiple steps, participants, and decision points. It defines the flow of work and data through a business operation.
An activity is a single unit of work within a business process. Activities can be:
BTS provides persistent containers that survive task termination and can be shared across different activities and processes. These store intermediate results and state information.
Each activity runs within a processing context that includes:
Create and manage business process activities:
123456789101112131415161718* Create an activity EXEC CICS DEFINE ACTIVITY('PROCESS-ORDER') END-EXEC. * Start an activity EXEC CICS ACTIVITY('PROCESS-ORDER') PROCESS('ORDER-BP') ACTIVITYID('ORD-001') END-EXEC. * Connect to an existing activity EXEC CICS CONNECT PROCESS('ORDER-BP') ACTIVITYID('ORD-001') END-EXEC. * Delete an activity EXEC CICS DELETE ACTIVITY('PROCESS-ORDER') END-EXEC.
Work with persistent containers in BTS:
1234567891011121314151617* Create a BTS container EXEC CICS PUT CONTAINER('ORDER-DATA') FROM(WS-CUSTOMER-ORDER) FLENGTH(LENGTH OF WS-CUSTOMER-ORDER) BTS(BTS-CONTEXT) END-EXEC. * Retrieve a BTS container EXEC CICS GET CONTAINER('ORDER-DATA') INTO(WS-CUSTOMER-ORDER) BTS(BTS-CONTEXT) END-EXEC. * Delete a BTS container EXEC CICS DELETE CONTAINER('ORDER-DATA') BTS(BTS-CONTEXT) END-EXEC.
Business processes are defined in CSD using CEDA commands:
12345CEDA DEFINE PROC(BUSINESS-BP) GROUP(BTS-GROUP) DEFINE ACTIVITY(PROCESS-DATA) PROGRAM(DATA-PROG) DEFINE ACTIVITY(SEND-MESSAGE) PROGRAM(NOTIFY-PROG) DEFINE ACTIVITY(COMPENSATE-ORDER) PROGRAM(REVERSE-PROG) CEDA INSTALL GROUP(BTS-GROUP)
Individual instances of a business process are created when the process is started:
1234EXEC CICS START PROCESS('ORDER-BUSINESS-BP') FROM('ORDER-CREATION-START') CHANNEL('BP-CHANNEL') END-EXEC.
Activities execute within the business process context, accessing shared state and containers:
12345678910111213141516171819PROGRAM DIVISION. LINAGE SECTION. USING BTS-CONTEXT. PROCEDURE DIVISION. * Access BTS context SET CONTAINER-FUNCTION TO TRUE * Retrieve process data PERFORM GET-ORDER-DATA * Process business logic PERFORM PROCESS-ORDER * Store results PERFORM PUT-RESULTS * Signal completion or failure PERFORM SIGNAL-EVENT.
Processes complete when all activities finish or when explicit termination occurs:
123EXEC CICS SIGNAL EVENT('ORDER-PROCESSED') BTS(BTS-CONTEXT) END-EXEC.
Programs that participate in business processes must be BTS-aware:
12345678910111213141516171819202122232425PROGRAM-ID. ORDER-PROCESSOR IS PROCESSING PROGRAM. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO CUSTOMER. WORKING-STORAGE SECTION. 01 WS-BTS-FLAGS. 02 BTS-FUNCTION PIC X(1). 88 CONTAINER-FUNCTION VALUE 'Y'. 88 SIGNAL-FUNCTION VALUE 'S'. 88 COMPENSATE-FUNCTION VALUE 'C'. 01 WS-BTS-CONTEXT PIC X(200). PROCEDURE DIVISION USING WS-BTS-FLAGS WS-BTS-CONTEXT. IF BTS-FUNCTION PERFORM PROCESS-BTS-REQUEST EXEC CICS RETURN END-EXEC END-IF. PROCESS-BTS-REQUEST. PERFORM HANDLE-CONTAINER-REQUEST PERFORM HANDLE-SIGNAL-REQUEST PERFORM HANDLE-COMPENSATE-REQUEST.
Activity programs handle specific business logic within a process:
1234567891011121314151617PROGRAM-ID. ORDER-VALIDATOR IS PROCESSING PROGRAM. WORKING-STORAGE SECTION PIC X(200). 01 BTS-CONTEXT. PROCEDURE DIVISION USING BTS-CONTEXT. * Validate customer order PERFORM VALIDATE-CUSTOMER-ID PERFORM VALIDATE-PRODUCT-AVAILABILITY PERFORM CHECK-PAYMENT-METHOD IF VALIDATION-SUCCESS EXEC CICS RETURN VALUE DFHRESP(NORMAL) END-EXEC ELSE EXEC CICS GETMAIN SET(WS-MESSAGE-PTR) LENGTH(100) END-EXEC EXEC CICS RETURN VALUE DFHRESP(ABEND) END-EXEC END-IF.
BTS provides automatic compensation capabilities to undo completed activities:
123456789PROGRAM-ID. ORDER-REVERSE IS PROCESSING PROGRAM. PROCEDURE DIVISION USING POLICY-NAME BTS-CONTEXT. * This program runs automatically if a subsequent activity fails PERFORM REVERSE-CUSTOMER-CHARGES PERFORM RESTORE-INVENTORY-LEVELS PERFORM SEND-CANCELLATION-NOTICE EXEC CICS RETURN VALUE DFHRESP(NORMAL) END-EXEC.
BTS supports graceful recovery from failures:
| Feature | Traditional CICS | BTS |
|---|---|---|
| Transaction Duration | Seconds to minutes | Minutes to days |
| State Persistence | Task-scoped | Process-scoped |
| Failure Handling | Manual restart | Automatic compensation |
| Data Sharing | COMMAREA/Channels | Persistent Containers |
| Complexity | Simple | Higher |
Every activity that modifies external systems should have a corresponding compensating activity to undo that work.
Set appropriate checkpoint intervals to balance recovery time with processing overhead:
123EXEC CICS DEFINE ACTIVITY('UPDATE-INV' CHECKPOINT('AFTER-EACH-ITEM') END-EXEC.
Keep BTS containers simple and focused. Avoid complex nested structures that are difficult to recover.
Activities should be safe to restart or re-run without causing duplicate effects:
12345678910* Check if work was already completed EXEC CICS GET CONTAINER('WORK-COMPLETED') INTO(WS-STATUS-FLAG) BTS(BTS-CONTEXT) RESP(WS-RESPONSE) END-EXEC. IF WS-RESPONSE = DFHRESP(NORMAL) AND WS-STATUS-FLAG = 'Y' EXEC CICS RETURN END-EXEC * Already done END-IF.
For processes that run hours or days:
CICS Explorer provides specialized views for monitoring BTS:
Use CEMT to monitor and control BTS:
123CEMT INQUIRE BP(BUSINESS-PROCS) STATUS(RUNNING) CEMT INQUIRE ACTIVITY(*) STATUS(ACTIVE) CEMT DISCARD BP(ALL-DEFINED)
Typical order processing business process:
Business process requiring human approval:
1234567* Activity requiring manual intervention EXEC CICS DEFINE ACTIVITY('APPROVE-EXPENSE') TYPE(MANUAL) END-EXEC. * Human reviews expense in CICS Explorer * When approved or rejected, activity signals completion
Distributed transaction pattern implemented in BTS:
When business processes fail to progress:
Troubleshooting container-related problems:
12CEMT INQUIRE CONTAINER(*) * Shows all accessible containers for current context
When automatic recovery fails: