Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Start-LLM binden

Beim Binden des Start-LLM wird zwischen den folgenden Möglichkeiten unterschieden:

  • Sie binden das ROOT-Tabellenmodul statisch in das Start-LLM mit ein oder

  • das ROOT-Tabellenmodul wird dynamisch beim Start des Anwendungsprogramms nachgeladen. Dazu müssen Sie in den Startparametern für TABLIB den Namen der Bibliothek, die das ROOT-Tabellenmodul enthält, und für ROOTNAME den Namen des ROOT-Tabellenmoduls (PLAM-Elementname) angeben (siehe Abschnitt„Startparameter für openUTM"). Den Modul KDCRTMN müssen Sie als ersten Modul statisch einbinden.

Das zweite Verfahren ist vorteilhafter, da Sie bei Änderungen in der UTM-Generierung die Anwendung nicht neu binden müssen. Aus dem gleichen Grund sollten Sie möglichst alle Teilprogramme in Lademodule ablegen, die dynamisch gebunden werden.

Bei beiden Verfahren müssen Sie die folgenden Punkte beachten:

  • Die Laufzeitsysteme für C und SPL zusammen mit dem ILCS werden von den Modulen des KDCROOT benötigt, weswegen Sie die nicht-shareable Teile des Laufzeitsystems immer statisch einbinden müssen.

  • Das Start-LLM darf nach dem Binden nur unbefriedigte Externverweise auf solche Module der Laufzeitsysteme haben, die entweder vor dem Anwendungsstart als Subsystem geladen sind oder die beim Anwendungsstart nachgeladen werden.

  • Sie sollten vermeiden, mehrere Start-LLM in der gleichen Bibliothek abzulegen, da BLS beim Starten versucht, offene Externverweise aus dieser Bibliothek zu befriedigen. D.h. neben Lademodulen, die dynamisch nachgeladen werden, sollte die Bibliothek nur ein Start-LLM enthalten, das mit dem Kommando START-EXECUTABLE-PROGRAM geladen wird. Die AUTOLINK-Funktion können Sie über Parameter von
    START-EXECUTABLE-PROGRAM auch auf bestimmte Bibliotheken eingrenzen oder komplett ausschalten.

  • Die RESOLVE-Anweisung auf die Bibliothek SYSLNK.CRTE.PARTIAL-BIND bzw. SYSLNK.CRTE müssen Sie stets als erste RESOLVE-Anweisung auf eine Laufzeitsystem-Bibliothek und nach der RESOLVE-Anweisung auf die UTM-Bibliothek angeben. Die Bibliothek, die Sie im Start-LLM zum Binden der benötigten Module des CRTE verwenden, müssen Sie auch beim Binden aller Lademodule der Anwendung angeben. Die Bibliothek SYSLNK.CRTE.PARTIAL-BIND bringt Performancevorteile und sollte daher bevorzugt eingesetzt werden.

Beispiel

Der folgende BINDER-Lauf enthält alle Anweisungen, die zum Binden eines Start-LLM benötigt werden. Es wird davon ausgegangen, dass die Anwendung mit der gemeinsamen Laufzeitumgebung CRTE abläuft und UTM und CRTE über IMON installiert wurden.

Der String vvv steht dabei für die openUTM-Version (z.B. 070 für V7.0).

/START-BINDER
//START-LLM-CREATION INTERNAL-NAME=start-llm                          -
//                  ,INTERNAL-VERSION=start-llm-version 
//REMARK  +-----------------------------------------------------------+
//BEGIN-SUB-LLM-STATEMENTS SUB-LLM-NAME=ROOT-TAB-LLM ---------------------- 1
//INCLUDE-MODULES LIBRARY=tablib ,ELEMENT=root-module 
//END-SUB-LLM-STATEMENTS
//REMARK  +-----------------------------------------------------------+
//INC-MOD ELEM=KDCRTMN ,LIB=<userid1>.SYSLNK.UTM.vvv ---------------------- 2
//REMARK  +-----------------------------------------------------------+
//BEGIN-SUB-LLM-STATEMENTS SUB-LLM-NAME=LM-SHARED-RTS --------------------- 3
//INCLUDE-MODULES LIBRARY=$userid2.SYSLNK.CRTE.PARTIAL-BIND, ELEMENT=ITCMADPT
//INCLUDE-MODULES oncall-load-module 
//INCLUDE-MODULES startup-load-module 
//INCLUDE-MODULES pool-load-module 
//END-SUB-LLM-STATEMENTS
//REMARK  +-----------------------------------------------------------+
//RESOLVE-BY-AUTOLINK LIBRARY=$userid1.SYSLNK.UTM.vvv --------------------- 4
//RESOLVE-BY-AUTOLINK LIBRARY=user-lib 
//REMARK  +-----------------------------------------------------------+
//RESOLVE-BY-AUTOLINK LIBRARY=$userid2.SYSLNK.CRTE.PARTIAL-BIND ----------- 5
//RESOLVE-BY-AUTOLINK LIBRARY=other-rts-lib 
//RESOLVE-BY-AUTOLINK LIBRARY=$userid1.SYSLNK.UTM.vvv.SPLRTS
//REMARK  +-----------------------------------------------------------+
//SHOW-MAP ..., UNRESOLVED-LIST=SORTED, ... ------------------------------- 6
//REMARK  +-----------------------------------------------------------+
//REMOVE-MODULES NAME=*ALL,PATH-NAME=.ROOT-TAB-LLM ------------------------ 7
//REMOVE-MODULES NAME=*ALL,PATH-NAME=.LM-SHARED-RTS ----------------------- 8
//REMARK  +-----------------------------------------------------------+
//SET-EXTERN-RESOLUTION SYMBOL-TYP=REFERENCES,RESOLUTION=STD
//SAVE-LLM LIBRARY=start-bibliothek,ELEMENT=*INTERNAL-NAME(           -
//                                  VERSION=*INTERNAL-VERSION)        -
//       ....        
//END
  1. Als erstes wird immer das ROOT-Tabellenmodul in ein eigenes Sub-LLM gebunden. Dieses Modul können Sie vor dem Abspeichern des Start-LLM wieder entfernen (siehe 7), falls das ROOT-Tabellenmodul, wie hier im Beispiel, nicht statisch eingebunden, sondern beim Start des Anwendungsprogramms dynamisch nachgeladen werden soll.

    Durch die Externverweise des ROOT-Tabellenmoduls werden die statischen Teilprogramme aus user-lib dazugebunden (siehe 4). Dies sollten allerdings möglichst wenige Teilprogramme sein, da diese Module nicht ausgetauscht werden können.

  2. Als nächstes wird der ROOT-Systemmodul KDCRTMN gebunden. Dieser muss nur dann explizit gebunden werden, falls ein Start-LLM ohne ROOT-Tabellenmodul erzeugt werden soll.

  3. Dann wird in einem eigenen Sub-LLM ein Adapter-Modul (ITCMADPT) gebunden, der dafür sorgt, dass die benötigten Laufzeit-Module nachgeladen werden.

    Zusätzlich werden alle vorhandenen Lademodule, die dynamisch nachgeladen werden, in dieses Sub-LLM gebunden, damit die benötigten Module des Laufzeitsystems durch die RESOLVE-BY-AUTOLINK-Anweisung zum Start-LLM hinzugebunden werden. Dadurch sind sie beim dynamischen Nachladen schon vorhanden und brauchen nicht mehr über die Autolink-Funktion nachgeladen werden, weil dies die Ladeperformance verschlechtert.

    Wenn Sie das COBOL-Subsystem benutzen, kann der Adapter-Modul (ITCMADPT) aus dem oben genannten SUB-LLM entfallen.

  4. Als erste Bibliothek in einer RESOLVE-BY-AUTOLINK-Anweisung müssen Sie stets die UTM-Bibliothek angeben. Danach können RESOLVE-BY-AUTOLINK-Anweisungen auf Benutzerbibliotheken folgen.

  5. Als erste Bibliothek eines Laufzeitsystems in einer RESOLVE-BY-AUTOLINK-Anweisung müssen Sie stets die CRTE-Bibliothek angeben. Nach der CRTE-Bibliothek sollten Sie die RESOLVEs auf eventuell vorhandene Bibliotheken anderer Laufzeitsysteme eingeben, und zwar vor der Bibliothek mit dem von openUTM benötigten SPL-Laufzeitsystem. Weitergehende Informationen sind in dem Handbuch des entsprechenden Laufzeitsystems zu finden.

  6. Mit der SHOW-MAP-Anweisung können Sie sich u.a. die nicht aufgelösten Externverweise auflisten lassen. Die Liste, die an dieser Stelle des BINDER-Laufs erstellt wird, enthält alle offenen Externverweise, die noch befriedigt werden müssen. Am Ende des BINDER-Laufs erhalten Sie automatisch eine weitere Liste der unbefriedigten Externverweise, die aber zusätzlich alle die unbefriedigten Externverweise enthält, die durch das Entfernen des Sub-LLM entstehen.

  7. Mit einer REMOVE-MODULES-Anweisung entfernen Sie das ROOT-Tabellenmodul aus dem Start-LLM.

  8. Auch der (falls nötig) eingebundene Adaptermodul (ITCMADPT) sowie die shareable Module des Laufzeitsystems für COBOL und die Lademodule, die mit ONCALL, STARTUP oder POOL generiert sind, werden aus dem Start-LLM entfernt.

Das so gebundene Start-LLM muss mit dem folgenden Kommando geladen werden:

/START-EXECUTABLE-PROGRAM FROM-FILE=*LIBRARY-ELEMENT     -
/                    (LIBRARY=start-library              -
/                    ,ELEMENT-OR-SYMBOL=start-llm)       -
/           ,DBL-PARAMETERS=*PARAMETERS(                 -
/           ,LOADING=*PARAMETERS(                        -
/                     PROGRAM-MODE = *ANY                -
/                     ,LOAD-INFORMATION = *REFERENCES))  -
/           ,ERROR-PROCESSING=*PARAMETERS(               -
/                     UNRESOLVED-EXTRNS=*DELAY           -
/                     ,ERROR-EXIT = *NONE)