BEA Connect TCP for IMS client and server transactions are ordinary IMS MPP transactions that can be written in any application programming language supported by IMS. Source code for the sample transactions in this appendix can be found in the BEA Connect TCP for IMS SOURCE distribution library.
An IMS server transaction is one that offers a specified service and processes client requests for that service. A server request takes place according to the following sequence of events:
The sample IMS server transaction shown below is a simple echo transaction; that is, it simply returns a response consisting of whatever request data it received.
CBL APOST *****************************************************************
FILE: BEASVR01
PURPOSE: SAMPLE IMS SERVER TRANSACTION FOR USE WITH
BEA CONNECT TCP FOR IMS
COMMENTS: THIS IS A SIMPLE ECHO SERVER TRANSACTION THAT ISSUES A
RESPONSE CONSISTING OF THE SAME DATA AS RECEIVED.
LANGUAGE: COBOL
COPYRIGHT (C) 1997 BEA SYSTEMS, INC. ALL RIGHTS RESERVED
*****************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. BEASVR01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 BEABMP PIC X(08) VALUE 'BEATCPI '.
*****************************************************************
* REQUEST MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
*****************************************************************
* RESPONSE MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
LINKAGE SECTION.
****************************************************************
* I/O PCB *
****************************************************************
01 01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
*****************************************************************
* MODIFIABLE ALTERNATE PCB *
*****************************************************************
01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
PERFORM IOPCB-GET THRU IOPCB-GET-EXIT.
PERFORM ECHO-MSG THRU ECHO-MSG-EXIT.
PERFORM ISRT-MSG THRU ISRT-MSG-EXIT.
GO TO 9999-RETURN.
*****************************************************************
* RETRIEVE THE REQUEST MESSAGE FROM THE IMS QUEUE *
*****************************************************************
IOPCB-GET.
(2) CALL 'CBLTDLI' USING GU, IOPCB, REQUEST-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
IOPCB-GET-EXIT.
EXIT.
*****************************************************************
* COMPOSE THE RESPONSE MESSAGE *
*****************************************************************
ECHO-MSG.
* THE RESPONSE MESSAGE HAS THE SAME BASIC FORMAT AS
* THE REQUEST MESSAGE. WE CHANGE THE TRAN CODE TO THAT
* OF THE DESTINATION (BEA BMP). NOTE THAT THE FIELD
* BEA-RESERVED MUST BE COPIED INTACT FROM THE
* REQUEST MESSAGE TO THE RESPONSE MESSAGE. FOR RE-
* SPONSE DATA, WE SIMPLY RETURN THE REQUEST DATA.
* HENCE THIS IS AN ECHO TRANSACTION.
(4,5) MOVE REQUEST-MESSAGE TO RESPONSE-MESSAGE.
(6) MOVE BEABMP TO TRAN-CODE IN RESPONSE-MESSAGE.
ECHO-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO IMS QUEUE *
*****************************************************************
ISRT-MSG.
* IF THE ORIGIN OF A MESSAGE IS A BMP (SUCH AS BEA
* CONNECT TCP FOR IMS), THERE WILL BE NO ASSOCIATED
* LTERM. IN THIS CASE, THE RESPONSE IS RETURNED TO
* THE BMP USING AN ALTERNATE PCB.
(3) IF LTERM = SPACES OR LOW-VALUES
PERFORM ALTPCB-ISRT THRU ALTPCB-ISRT-EXIT
ELSE
CALL 'CBLTDLI' USING ISRT, IOPCB, RESPONSE-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
ISRT-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO ALTERNATE PCB *
*****************************************************************
ALTPCB-ISRT.
* CHANGE DESTINATION OF MODIFIABLE ALTERNATE PCB TO
* THE TRAN CODE OF THE BEA CONNECT TCP FOR IMS BMP
(7,8) CALL 'CBLTDLI' USING CHNG, ALTPCB, BEABMP.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
* INSERT THE RESPONSE MESSAGE INTO THE IMS QUEUE
(9) CALL 'CBLTDLI' USING ISRT, ALTPCB, RESPONSE-MESSAGE.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
ALTPCB-ISRT-EXIT.
EXIT.
9999-RETURN.
GOBACK.
An IMS Client Transaction is one that issues a request for a specified remote service made available through BEA Connect TCP for IMS. IMS Client Requests (unlike server requests) are processed in two distinct "phases": a request phase, followed by a response phase. The request and response must be processed by two separate transaction executions (i.e., T1 and T2). A client request takes place according to the following scenario:
The sample IMS Client Request Transaction shown below makes a request for a service called TOUPPER, provided by a remote system. The TOUPPER service returns a response consisting of the request data translated to upper-case.
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRQ01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA. PIC X(91) VALUE SPACES.
10 MI-DATA
(1) 01 CLIENT-REQUEST.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(2) CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(3) MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE 'BEACRP01' TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO
CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.
(4) MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.
(5) COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.
(6,7) CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(8) CALL 'CBLTDLI' USING ISRT, ALTPCB, CLIENT-REQUEST.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(9) CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
9999-RETURN.
GOBACK.
The sample IMS client response transaction shown below processes the response from a request for a service called TOUPPER, provided by a remote system. The TOUPPER service returns a response consisting of the request data translated to upper-case.
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRP01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU'.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
1 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA
10 MO-DATA PIC X(91) VALUE SPACES.
(1) 01 CLIENT-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
(7) 05 CRR-RESPONSE-DATA-LEN PIC 9(08) COMP.
(7) 05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
(3) 05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC S9(08) COMP.
05 CRR-REASON-CODE PIC S9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
(6) 05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-RESPONSE-AREA.
10 CRR-RESPONSE-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
01 IOPCB.
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(2) CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(4) IF CRR-ERROR-CODE EQUAL 0 AND
(5) CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(8) CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
9999-RETURN.
GOBACK.
If desired, the functionality of the IMS Client Request and Response transactions can be combined into a single application transaction. However, logic must be added to perform the appropriate (request or response) processing based upon the dynamic execution context.
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRR01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA.
10 MI-DATA PIC X(91) VALUE SPACES.
01 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA.
10 MO-DATA PIC X(91) VALUE SPACES.
(1) 01 CLIENT-REQUEST-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(3) IF LTERM = SPACES OR LOW-VALUES
THEN PERFORM RESPONSE-MESSAGE THRU RESPONSE-MESSAGE-EXIT
ELSE PERFORM REQUEST-MESSAGE THRU REQUEST-MESSAGE-EXIT.
9999-RETURN.
GOBACK.
(4) REQUEST-MESSAGE.
CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE MI-TRANCODE TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.
MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.
COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
CALL 'CBLTDLI' USING ISRT, ALTPCB,CLIENT-REQUEST-RESPONSE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
REQUEST-MESSAGE-EXIT.
EXIT.
(5) RESPONSE-MESSAGE.
CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-REQUEST-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
IF CRR-ERROR-CODE EQUAL 0 AND
CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
RESPONSE-MESSAGE-EXIT.
EXIT.