What happens during initialization

When you run an application under Language Environment, the following sequence of events occurs:

  1. Language Environment runs the assembler user exit CEEBXITA.

    CEEBXITA runs before initialization of the enclave.

    You cannot code the CEEBXITA assembler user exit as an XPLINK application. However, since CEEBXITA is called directly by Language Environment and not by the application, a non-XPLINK CEEBXITA can be statically bound in the same program object with an XPLINK application.

    You can modify the environment in which your application runs by:
    • Specifying certain runtime options
    • Allocating data sets and files
    • Listing abend codes to be passed to the operating system
    • Checking the values of program arguments

    IBM® provides a default version of CEEBXITA and several samples you can use to customize your application to perform tasks such as enforcing a set of runtime options for a particular environment. Because CEEBXITA runs before any HLLs have been established, it is written in assembler language so that it can establish parameters such as stack size and trap settings for the HLLs.

    CEEBXITA can function as application-specific or installation-wide. If you customize CEEBXITA to do application-specific processing (for example, dynamically allocating files needed by your application), you must link the exit with the application load module. (Conversely, installation-wide user exits must be linked with the Language Environment initialization library routines.)

    An application-specific user exit has priority over an installation-wide exit, so you can customize a user exit for a particular application without affecting the installation default version.

    For more information about the function and location of the CEEBXITA user exit, see Using runtime user exits.

  2. Language Environment examines the load module and initializes all languages identified in the application.

    Under Language Environment, an interlanguage communication (ILC) application works as shown in Figure 1. Language Environment will also examine the load module and initialize an XPLINK environment (forcing the XPLINK(ON) runtime option) if the initial program was compiled with the XPLINK option. Because all the language conventions are already established and do not need to be initialized and terminated between calls to other routines, the processing is significantly faster when using Language Environment-conforming HLLs.

    Figure 1. Language Environment ILC — only one runtime environment to initialize
    Only one runtime environment is needed for initialization when HLLs that conform to Language Environment are used.
    Performance consideration: Language Environment initializes all languages included in an application, regardless of whether all of them are used. To optimize performance, include only those languages your application actually uses.
  3. Language Environment runs the HLL user exit CEEBINT.

    CEEBINT lets you perform tasks such as recording accounting statistics or calling other user exits. You cannot code CEEBINT as an XPLINK application. However, since CEEBINT is called directly by Language Environment and not the application, a non-XPLINK CEEBINT can be statically bound in the same program object with an XPLINK application. You can write a customized version of CEEBINT in any Language Environment-conforming language except COBOL. COBOL applications can, however, use CEEBINT written in another language.

    IBM provides an object module default version of CEEBINT that consists of an immediate return to the application. This default version is automatically link-edited with your application unless you provide a customized version of CEEBINT.

    For more information about the function and location of the CEEBINT user exit, see Using runtime user exits.