Using ETP with 3GL Programs

To handle Adabas direct calls issued by 3GL (COBOL, PL/I, etc.) programs, the Entire Transaction Propagator provides an interface program, ETPDB3GL, which is part of ETPNUC. Because Adabas call handling varies with the operating systems and TP monitors, it may be necessary for you to write a program that passes Adabas calls to the ETPDB3GL interface program; this depends on your installation requirements.

For 3GL programs running under CICS, the ETP Interface for CICS is available as a Natural add-on product. For more information, see the section ETP Interface for CICS.

The ETPDB3GL interface program provides two ways for your 3GL programs to use the Entire Transaction Propagator:

  • Invoking ETPDB3GL directly from your 3GL program, using changed Adabas calls;

  • Invoking ETPDB3GL from a user-written "pseudo-Adabas" program, using existing Adabas calls.

Using the interface requires initialization calls to provide ETPDB3GL with information such as the database ID and file number of the administration file. In addition to the normal Adabas parameters, you must also provide a storage area as work storage.

Let's assume that your 3GL program now contains calls to Adabas similar to the following:

              .
              .
CALL ADABAS (CB,FB,RB,SB,VB,IB)
              .
              .

Here, all program calls are issued directly to Adabas, as shown in the following figure:

3GL Call Schema for Non-Entire Transaction Propagator Programs

With the Entire Transaction Propagator and the ETPDB3GL interface program, you now have two possibilities to pass calls:

  1. Change your 3GL programs to call the interface module ETPDB3GL instead of Adabas; that is, instead of CALL ADABAS, code CALL ETPDB3GL. Include the initialization calls and modify all other Adabas calls so that they look like the following:

                  .
                  .
    CALL ETPDB3GL (CB,FB,RB,SB,VB,IB,WORKAREA)
                  .
                  .
    

    - where WORKAREA is the required work storage for the Entire Transaction Propagator. Now, your programs have the following call logic:

    3GL Entire Transaction Propagator Calling with Changed Adabas Calls

    * The initialization parameters are described in the sample program which is provided in data set ETPvrs.SRCE.

  2. Write a program that accepts Adabas calls, performs initialization calls to ETPDB3GL, and passes all Adabas calls to ETPDB3GL (see figure above). Name the program ADABAS, and link it to your application programs. You may need to change your "compile and link" JCL to ensure that your application will always pass Adabas calls to the interface.

    This user-written program ADABAS provides all necessary information to ETPDB3GL. It also must provide the address of the "real" Adabas, which is usually an entry point in the normal Adabas interface (for example, ADAUSER). To avoid linkage editor errors caused by multiple entry points for the name ADABAS, you may also have to use the linkage editor to change the normal Adabas interface.

    With this alternative for passing calls, you do not need to change your 3GL programs. Note, however, that the program ADABAS must also specify work storage as in choice [1], above.

    3GL Entire Transaction Propagator Calling with Unchanged Adabas Calls

    * The initialization parameters are described in the sample program which is provided in data set ETPvrs.SRCE.

    A sample program using this second alternative for z/OS batch mode is provided in data set ETPvrs.SRCE. This sample program also contains the description of the interface to program ETPDB3GL. This alternative has the call logic shown in the figure above.

Both alternatives require you to link the module ETPNUC to all your applications for which Entire Transaction Propagator services will be used; ETPNUC contains the interface program ETPDB3GL.

Note that ETPDB3GL cannot handle the new ACBX control block format as available with Adabas Version 8; if such a control block is encountered, an error is returned to the caller of ETPDB3GL immediately, regardless if the control block specifies a database ID that is defined as an ETP database with the ETP3PARM macro or not.