In den vorherigen Beispielen haben wir gesehen, wie man Module in (Service-)Programme bindet. In dem Binderschritt mussten die Module und/oder Service-Programme die gebunden bzw. verwendet werden, einzeln aufgelistet werden.
Nun kann man sich vorstellen, dass das in einer hochmodularen Anwendung mit sehr vielen Prozeduren und Service-Programme sehr mühsam werden kann. Abhilfe an dieser Stelle bieten Binderverzeichnisse. In diesem Artikel wird erklärt was Binderverzeichnisse sind und wie sie erstellt und verwendet werden.
Binder-Verzeichnis
Bislang, in den vorhergehenden Beispielen haben wir uns darauf beschränkt ein einziges Modul oder Service-Programm mit diversen exportierten Prozeduren in Programm-Objekte zu binden.
In einer hochmodularen ILE-Umgebung wird es jedoch eine Vielzahl von Service-Programmen geben, in denen die Prozeduren abhängig von ihrer Funktionalität zusammengruppiert wurden. In den Programmen werden u.U. viele Prozeduren aus fast genauso vielen verschiedenen Service-Programmen aufgerufen. Ebenso kann es vorkommen, dass Prozeduren in einem Service-Programm Prozeduren, die sich in verschiedenen anderen Service-Programmen befinden aufrufen.
Im Binder-Schritt, also beim Ausführen der Befehle CRTPGM (Programm erstellen) oder CRTSRVPGM (Service-Programm erstellen), aber auch bei den Befehlen UPDPGM (Programm aktualisieren) oder UPDSRVPGM (Service-Programm aktualisieren) müssen die verwendeten Service-Programme und Module aufgelistet werden. Dies ist erforderlich, damit entweder das Modul kopiert oder die Signatur des Service-Programms in das Objekt übernommen werden kann.
Das folgende Beispiel zeigt die Optionen MODULE (Modul) und BNDSRVPGM (Binderserviceprogramm) in den Befehlen CRTPGM und CRTSRVPGM.
Quelle: Hauser
Quelle: HauserDie (manuelle) Auflistung der gebundenen Module oder Service-Programme kann sich dann zu einem mühsamen Geschäft entwickeln. Um diese manuellen Auflistungen zu vermeiden wurden Binder-Verzeichnisse eingeführt.
Binder-Verzeichnisse sind spezielle Objekte mit der Objekt-Art *BNDDIR, die nur während des Binderschritts benötigt werden. In einem Binderverzeichnis werden Module oder Service-Programme aufgelistet. Diese Binderverzeichnisse können in den Erstellungsbefehlen über die Binder-Schritte initiiert und angegeben werden, z.B. CRTPGM, UPDSRVPGM, CRTBNDRPG.
Während des Binderschritts werden die angegebenen Binder-Verzeichnisse nach den Modulen und/oder Service-Programmen aus denen Prozeduren aufgerufen werden, durchsucht. Wird ein Modul mit der entsprechenden Prozedur über das Binder-Verzeichnis gefunden, wird das Modul in das (Service-)Programm-Objekt kopiert. Wird ein Service-Programm, das die aufgerufene Prozedur beinhaltet, gefunden, wird die Signatur dieses Service-Programms in das Service-Programm-Objekt eingebunden.
Zur Erstellung und Verarbeitung von Binder-Verzeichnissen wurden mehrere CL-Befehle bereitgestellt:
| CRTBNDDIR | Binder-Verzeichnis erstellen |
| DLTBNDDIR | Binder-Verzeichnis löschen |
| DSPBNDDIR | Binder-Verzeichnis anzeigen Bei dem Befehl DSPBNDDIR werden die Binder-Verzeichnis-Einträge für das ausgewählte Binder-Verzeichnis aufgelistet. |
| WRKBNDDIR | Mit Binder-Verzeichnissen arbeiten Bei dem Befehl WRKBNDDIR werden zunächst alle Binder-Verzeichnisse, die der Auswahl entsprechen angezeigt. Über diverse Optionen kann die weitere Bearbeitung des Binderverzeichnisses sowie der Binder-Verzeichniseinträge. |
| ADDBNDDIRE | Binder-Verzeichnis-Eintrag hinzufügen |
| RMVBNDDIRE | Binder-Verzeichnis-Eintrag entfernen |
| WRKBNDDIRE | Mit Binder-Verzeichnis-Einträgen arbeiten |
Das folgende Beispiel zeigt über den Befehl WRKBNDDIRE (Mit Binder-Verzeichnis arbeiten) die Einträge in Binder-Verzeichnis HSBNDDIR in Bibliothek HSCOMMON10. Neben den eingetragenen Modulen und Service-Programmen ist auch der Aktivierungszeitpunkt und der letzte Änderungszeitpunkt ersichtlich. Service-Programme und Module, die in einem Binderverzeichnis eingetragen sind, müssen nicht zwangsläufig existieren.
Quelle: HauserBinder-Verzeichnis erstellen
Ein Binderverzeichnis wird mit dem Befehl CRTBNDDIR (Binder-Verzeichnis erstellen) erstellt. Dazu muss lediglich der Name und die Bibliothek des zu erstellenden Binderverzeichnisses angegeben werden. Daneben kann noch die Berechtigung angegeben werden und eine Beschreibung angefügt werden.
Das folgende Beispiel zeigt den Befehl CRTBNDDIR (Binder-Verzeichnis erstellen).

Binder-Verzeichnis-Einträge erstellen
Nach der Erstellung des Binder-Verzeichnisses müssen die Einträge mit Hilfe des Befehls ADDBNDDIRE (Binder-Verzeichnis-Einträge hinzufügen) erfasst werden. Dabei müssen die folgenden Informationen angegeben werden.
| Binderverzeichnis | Qualifiziertes Binderverzeichnis Für die Bibliothek kann wahlweise ein Bibliotheksname angegeben oder der Sonderwert *LIBL verwendet werden. |
| Objekt-Spezifikationen | |
| Objekt | Objekt(e), die in das Binder-Verzeichnis eingetragen werden sollen. In einem ADDBNDDIRE-Befehl können bis zu 50 unabhängige Objekte aufgelistet werden. Außer dem Objekt-Namen kann auch eine generische Angabe erfolgen, z.B. MYSRV*, wobei im Anschluss alle mit MYSRV beginnenden Service-Programme oder Module in das Binder-Verzeichnis übernommen werden. Mit Hilfe des zulässigen Sonder-Wertes *ALL können auch alle Service-Programme oder Module in das Binder-Verzeichnis übernommen werden. Für die Bibliothek kann wahlweise die Bibliothek oder der Sonderwert *LIBL angegeben werden. |
| Objekt-Art | Modul (*MODULE) oder Service-Programm (*SRVPGM) |
| Art der Aktivierung | Seit Release 6.1 kann angegeben werden, zu welchem Zeitpunkt die Aktivierung des Service-Programms erfolgen soll. *IMMED Aktivierung erfolgt direkt mit der Aktivierung des rufenden Programms *DEFERED Die Aktivierung erfolgt erst mit Aufruf der ersten Prozedur |
| Positions-Angaben | |
| Objekt-Position | Position an der die zuvor angegebenen Objekte in das Binder-Verzeichnis eingefügt werden sollen. *LAST Objekte werden am Ende der Binder-Verzeichnis-Einträge eingetragen *FIRST Objekte werden am Anfang der Binder-Verzeichnis-Einträge eingetragen *AFTER Objekte werden nach dem angegebenen Objekt-Eintrag in das Binder-Verzeichnis eingetragen *BEFORE Objekte werden vor dem angegebenen Objekt-Eintrag in das Binder-Verzeichnis eingetragen *REPLACE Objekte ersetzen das angegebene Objekt |
| Objekt | Bei den Objekt-Positionen *AFTER, *BEFORE und *REPLACE muss das Referenz-Objekt angegeben werden. |
| Objekt-Art | Objekt-Art (*MODULE oder *SRVPGM) des Referenz-Objekts |
Das folgende Beispiel zeigt den Befehl ADDBNDDIRE (Binder-Verzeichnis-Einträge hinzufügen):
Quelle: HauserAnmerkung:
Beim Eintrag eines Moduls oder Service-Programms in ein Binder-Verzeichnis wird weder geprüft, ob das Objekt in der Bibliotheksliste vorhanden ist noch ob es überhaupt existiert.
Module und Service-Programme können auch gelöscht werden, ohne dass dies einen Einfluss auf die Binder-Verzeichnis-Einträge hat.
Binder-Verzeichnis-Einträge werden erst während des Binder-Schritts verarbeitet. Ist ein eingetragenes Service-Programm oder Modul nicht vorhanden, erfolgt keine Fehlermeldung. Der Eintrag wird einfach ignoriert.
Ein Binder-Fehler tritt erst dann auf, wenn eine aufgerufene Prozedur in keinem der existierenden eingetragenen Service-Programme oder Module gefunden wird.
Regeln zur Verwendung von Binder-Verzeichnissen
Beim Binden von Programmen und Service-Programmen können jeweils mehrere Binder-Verzeichnisse angegeben werden.
In diesen Binder-Verzeichnissen können wiederum mehrere Service-Programme und Module hinterlegt sein.
Wird allerdings beim Binder-Schritt festgestellt, dass die gleiche exportierte Prozedur mehrfach vorhanden ist, z.B. weil sowohl das Modul als auch das Service-Programm in einem der angegebenen Binder-Verzeichnissen eingetragen sind, oder weil das gleiche Service-Programm in mehreren Binder-Verzeichnissen hinterlegt ist, kann das Programm bzw. Service-Programm per Default nicht generiert werden.
Es ist möglich in den Binder-Befehlen über die Erstellungsangabe *DUPPROC (= Doppelte Prozeduren) exportierte Prozeduren mit dem gleichen Namen zuzulassen, man sollte allerdings diese Option nur im äußersten Notfall in Betracht ziehen. Stattdessen sollte man sich die folgende Regeln zu eigen machen:
- Module und Service-Programme sollten nie im gleichen Binder-Verzeichnis angegeben werden.
- Ein Service-Programm sollte immer nur in einem einzigen Binder-Verzeichnis hinterlegt sein.
- Man sollte nur wenige Binderverzeichnisse, in denen jedoch alle Service-Programme eingetragen sind verwenden, z.B.
- ein allgemeines Binder-Verzeichnis mit allen allgemein einsetzbaren Service-Programmen (z.B. String-Verarbeitung, Datumsroutinen)
- ein Binder-Verzeichnis pro Anwendung (z.B. ein je ein Binder-Verzeichnis mit allen speziellen Service-Programmen für die Buchhaltung oder für die Materialwirtschaft)
- ein Binder-Verzeichnis pro Bibliothek mit allen Service-Programmen in dieser Bibliothek.
Soweit die Einführung zu den Binderverzeichnissen.
Und nun viel Spaß beim Anlegen von Binderverzeichnissen und beim Eintragen von Modulen und Service-Programmen in diese Binderverzeichnisse.
Birgitta Hauser ist IBM Champion und Spezialistin für SQL- sowie RPG-Programmierung.
Frau Hauser gibt regelmäßig Workshops im Rahmen der MIDRANGE ACADEMY.
Sie schreibt regelmäßig für MIDRANGE und den TechKnowLetter. Hier erhalten Sie brandneue, tiefe Informationen zu SQL, RPG und vielem mehr.
Der TechKnowLetter erscheint monatlich. Sechs Ausgaben erhalten Sie für 88 Euro hier.
