Connection Library Example

The following connection library program serves as a switch, connecting client libraries to any of several similar server libraries. These server libraries each export a procedure called A2.

Note that this example includes only the connection library program; the server libraries and client libraries would be in separate programs, which are not shown here.

TYPE CONNECTION BLOCK SERVER_CL_TYPE;
  BEGIN
  PROCEDURE A2;
    IMPORTED;
  END OF SERVER_CL_TYPE;

SERVER_CL_TYPE LIBRARY SERVER_CL(CONNECTIONS = 10,
                                 LIBACCESS = BYFUNCTION,
                                 INTERFACENAME = “SECONDLINK.”);

TYPE CONNECTION BLOCK CLIENT_CL_TYPE;
  BEGIN
  INTEGER SERVER_ID,
          SERVER_CL_INDEX;

  PROCEDURE LINK_ME (ID);
    VALUE ID; INTEGER ID;
    BEGIN
    EBCDIC ARRAY A[0:15];
    INTEGER I;

    SERVER_ID:= ID;

    % FIND A VALID CONNECTION
    I:= 1;
    WHILE I LSS LIBRARY(SERVER_CL).CONNECTIONS AND
          SERVER_CL_INDEX = 0         DO
      IF LIBRARY(SERVER_CL[I]).STATE = VALUE(NOTLINKED) THEN
        SERVER_CL_INDEX:= I
      ELSE
        I:= * + 1;
    IF SERVER_CL_INDEX = 0 THEN
      BEGIN
      LIBRARY(SERVER_CL).CONNECTIONS:=
        LIBRARY(SERVER_CL).CONNECTIONS + 1;
      SERVER_CL_INDEX:= LIBRARY(SERVER_CL).CONNECTIONS;
      END;

    REPLACE A BY “SERVERNAME”, ID FOR * NUMERIC;
    LINKLIBRARY(SERVER_CL[SERVER_CL_INDEX], FUNCTIONNAME = A);
    END OF LINK_ME;
  PROCEDURE A1;
    BEGIN
    SERVER_CL[SERVER_CL_INDEX].A2;
    END OF A1;


  EXPORT LINK_ME, A1;
  END OF CLIENT_CL_TYPE;

CLIENT_CL_TYPE LIBRARY CLIENT_CL(CONNECTIONS = 10,
                                 INTERFACENAME = “FIRSTLINK.”);

RSLT:= READYCL(CLIENT_CL);                                              

In this example, the client program submits a linkage request by invoking the procedure LINK_ME in connection library CLIENT_CL. The client program uses parameter ID to procedure LINK_ME to specify which server library to link to. LINK_ME performs the following actions:

  • Searches for a CLIENT_CL connection that is not in use, and increases the CONNECTIONS value if necessary.

  • Builds a FUNCTIONNAME value out of the string SERVERNAME and the value of parameter ID.

  • Links through the selected connection using the selected FUNCTIONNAME value.

Once procedure LINK_ME is finished, the client program can invoke the procedure A1 of connection library CLIENT_CL. Procedure A1 in turn executes a call on procedure A2 of the server library that was linked to previously.