The exchange of application parts must be explicitly requested using the administration command KDCPROG. In this case, you must specify details about the version of the new load module to be loaded. openUTM checks whether the specifications are permissible and initiates the program exchange. In the program exchange process, openUTM does not verify whether the assignment defined with KDCDEF in the LOAD-MODULE, AREA, and PROGRAM statements corresponds to the actual division of the load modules in the libraries.
The changes that resulted from the administrative action to exchange programs in the application program loaded are saved by openUTM beyond the end of the application run, i.e. the versions of the load modules that have been modified by the administration actions will be loaded during the next start. The version numbers of the exchanged load modules can be transferred to the new KDCFILE even in the case of an update generation using
KDCUPD, which means that the modules last loaded are reloaded at the next application start.
In the program exchange, only a program component loaded with one load procedure can be exchanged as a single module, i.e. only one LLM or OM can be exchanged as a part. Only the module which is generated by openUTM is exchanged, not the entire load unit; in other words, if the load unit contains parts of the runtime system that were loaded with autolink, these are not unloaded in the exchange.
Example
The load module A-LLM is contained in the library OWN-LIB and is generated with:
LOAD-MODULE A-LLM,LIB=OWN-LIB - ,VERSION=001 - ,LOAD-MODE=STARTUP - .ALTERNATE-LIBRARIES=YES
A-LLM contains a program unit APU, for example, which calls a function bfunc. This function is in B-LLM, which is contained neither in A-LLM nor in the library OWN-LIB. In this case, A-LLM is loaded at the start of the application program with B-LLM by the autolink function. When A-LLM is exchanged with KDCPROG, B-LLM remains in the memory with bfunc. This can lead to inconsistencies if B-LLM contains subroutines from application programs and not just runtime modules. If B-LLM also contains application logic, A-LLM and B-LLM are to be linked to create one LLM.
When exchanging individual load modules, the event exits SHUT and START are not executed. These are only activated when the entire application program is terminated and loaded dynamically as a result of a program exchange in a task.
The exchange process runs differently depending on when (STARTUP or ONCALL) and where (common memory pool or not) the load module is loaded.