Dieses Kapitel behandelt folgende Themen:
Sie haben zwei Möglichkeiten, ein Diensteverzeichnis (Service Directory) zu verwenden:
Verwendung eines Service Directory in einem Natural-Subprogramm
Normalerweise verwendet der Natural RPC zum Auffinden eines Dienstes ein Service
Directory in einem Natural-Subprogramm. Dieses Verzeichnis ist eine initialisierte
LDA-Datenstruktur im Programm NATCLTGS, die in der SYSRPC
Utility mit der Funktion Service Directory Maintenance generiert wird und
jeder RPC-Client-Anwendung zur Verfügung stehen muss.
Sie können ein Remote Directory verwenden, um einen Dienst zu finden. Ein Remote Directory Server (RDS) ermöglicht es Ihnen, Verzeichnisdefinitionen an einer Stelle zu definieren, so dass die Dienste des RDS von allen Clients in Ihrer Umgebung verwendet werden können.
In diesem Abschnitt wird beschrieben, wie Sie einen Remote Directory Server verwenden, um einen Dienst zu finden.

Der Remote Directory Server wird in Form eines Natural-Subprogramms implementiert.
Ein Beispiel für ein solches Subprogramm ist in der Library SYSRPC
enthalten. Es heißt RDSSCDIR und liest die erforderlichen
Verzeichnisinformationen aus einer Arbeitsdatei. Die Schnittstelle dieses Subprogramms ist
dokumentiert, so dass Sie Ihren eigenen Remote-Verzeichnisdienst entwickeln können.
Weitere Informationen finden Sie im Abschnitt Erstellen einer
RDS-Schnittstelle.
Die RDS-Schnittstelle ist der Natural-Parameterdatenbereich (PDA) des
Natural-Subprogramms und die Verzeichnisdienstroutine ist der Codeteil des
Natural-Subprogramms. Wenn ein Remote-CALLNAT nicht im lokalen Service
Directory des Clients gefunden wird, kontaktiert die RPC-Laufzeit den Remote Directory
Server, indem sie einen internen Remote-CALLNAT ausführt.
Ein interner Verzeichnisspeicher (Directory Cache) minimiert den Zugriff auf das Remote Directory. Die Cache-Informationen werden durch eine Verfallszeit gesteuert, die vom Remote Directory Server festgelegt wird.
Um einen Remote Directory Server zu verwenden:
Erstellen Sie eine Directory-Datei für den Remote Directory Service mit Hilfe der
Service Directory
Maintenance-Funktion der SYSRPC Utility. Das
Subprogramm RDSSCDIR wird in der Library SYSRPC
bereitgestellt und liest die Verzeichnisinformationen aus einer Natural-Arbeitsdatei
(Fixed-Block, Satzlänge 80 Byte). Dies ist die Arbeitsdatei CMWKF01,
die dem entsprechenden Dataset in der Server Startup JCL zugewiesen ist.
Starten Sie den Remote Directory Server und fahren Sie mit den folgenden Schritten fort.
Sie haben zwei Möglichkeiten:
Geben Sie den Remote Directory Server im Schlüsselwort-Subparameter RDS
des Profilparameters RPC oder des Parameter-Makros NTRPC an.
Oder Sie verwenden die Maintenance-Funktion der Utility SYSRPC,
die um Remote Directory Server zu definieren (siehe Service Directory
Maintenance in der SYSRPC Utility-Dokumentation). Die
Definition von Remote Directory Servern wird aus Kompatibilitätsgründen
weiterhin unterstützt. Sie sollten jedoch Ihren RDS im
Schlüsselwort-Subparameter RDS des Profilparameters RPC oder des
Parameter-Makros NTRPC definieren. Zu diesem Zweck werden
Einträge bereitgestellt, die es ermöglichen, den Standort des Directory Servers
zu definieren. Auf diese Weise können Sie bestehende lokale
Directory-Informationen um eine oder mehrere Remote Directory
Server-Definitionen erweitern.
Nachfolgend finden Sie ein Beispiel für die Definition eines Remote Directory Servers im
Service Directory NATCLTGS.
| Service Directory | |||||
|---|---|---|---|---|---|
| NODE | SERVER | LIBRARY | PROGRAM | LOGON | |
| 1 | NODE1 |
||||
| 2 | SERVER1 |
||||
| 3 | SYSTEM |
||||
| 4 | TESTS1 |
||||
| 5 | TESTS2 |
||||
| 6 | RDSNODE |
||||
| 7 | DIRSRV1 |
||||
| 8 | #ACI |
||||
| 9 | RDSSCDIR |
||||
In diesem Beispiel wird lokal ein Server namens SERVER1 definiert. Dieser
Server kann die Dienste TESTS1 und TESTS2 ausführen.
Zusätzlich gibt es Definitionen für den Remote Directory Server DIRSRV1. Ein
Remote Directory Server wird in der Library-Definition durch ein vorangestelltes
Rautenzeichen (#) gekennzeichnet.
Die Definitionen von NODE und SERVER werden wie in Natural RPC
üblich verwendet. Die Library-Definition definiert das Transportprotokoll (ACI), das für
die Verbindung mit dem RDS verwendet werden muss.
Der Eintrag PROGRAM schließlich enthält den Namen des Remote-Subprogramms,
das den Remote Directory Service repräsentiert (in diesem Fall verweist er auf das
Beispiel-Subprogramm RDSSCDIR).
Die RDS-Schnittstelle ist der Parameterdatenbereich (PDA) eines Natural-Subprogramms.
Um Ihre eigene RDS-Schnittstelle zu erstellen, können Sie den unten abgebildeten Parameterdatenbereich verwenden.
DEFINE DATA PARAMETER
1 P_UDID(B8) /* OUT
1 P_UDID_EXPIRATION(I4) /* OUT
1 P_CURSOR(I4) /* INOUT
1 P_ENTRIES(I4) /* IN
1 P_REQUEST(A16/1:250) /* IN
1 P_EXTENT (A16/1:250) /* OUT
1 P_RESULT(A32) /* OUT
1 REDEFINE P_RESULT
2 SRV_NODE(A8)
2 SRV_NODE_EXT(A8)
2 SRV_NAME(A8)
2 SRV_NAME_EXT(A8)
END-DEFINE
Eine Erläuterung der Parameter finden Sie in der nachstehenden Tabelle.
| Parameter | Format/Läange | Erläuterung |
|---|---|---|
P_UDID
|
B8 | Eindeutige Verzeichniskennung, sollte nach Änderung der Verzeichnisinformationen erhöht werden. Der Client speichert diese Kennung in seinem Cache. Erhöht sich die Binärzahl von einer Client-Anfrage zur nächsten, führt dies dazu, dass der Client seine lokalen Cache-Informationen löscht, da sie nicht mehr mit den Remote-Directory-Informationen übereinstimmen. |
P_UDID_EXPIRATION
|
I4 | Definiert die Verfallszeit in Sekunden, d. h. die Anzahl der
Sekunden, in denen der Client seine lokalen Cache-Informationen verwenden kann,
ohne eine Verbindung zum RDS herzustellen, um die
UDID-Einstellung zu validieren. Damit können Sie eine
Zeitspanne festlegen, nach der Sie sicher sein können, dass Ihre
Verzeichnisänderungen für alle Clients aktiv sind. Wenn Sie diese Zeit auf einen
unnötig niedrigen Wert setzen, können Sie erheblichen Netzwerkverkehr zum RDS
verursachen.
|
P_CURSOR |
I4 | Der Remote Procedure Call hat die Möglichkeit, nach einem
alternativen Server zu suchen, wenn keine Verbindung zum vorherigen Server
hergestellt werden kann (siehe Schlüsselwort-Subparameter TRYALT des Profilparameters RPC oder des
Parameter-Makros NTRPC.
Dieser Parameter enthält den Wert Null für eine Suche von Beginn an und kann vom RDS geändert werden, um sich den Speicherort des Datensatzes zu merken und die Suche fortzusetzen. Der Wert wird vom Client nicht ausgewertet, er wird nur aus dem Cache eingefügt, um die Suche fortzusetzen. |
P_ENTRIES
|
I4 | Dieser Parameter enthält die Anzahl der Service-Definitionen
in P_REQUEST.
|
P_REQUEST
|
A16/1:250 | Eine Liste mit Services, für die eine Serveradresse abgefragt
werden kann. Ein Eintrag ist wie folgt aufgebaut:
Programmname (A8) |
P_EXTENT |
A16/1:250 | Reserviert für künftige Verwendung. |
SRV_NODE |
A8 | Enthält den Serverknoten. |
SRV_NODE_EXT |
A8 | Enthält die Erweiterung des Serverknotens. |
SRV_NAME |
A8 | Enthält den Servernamen. |
SRV_NAME_EXT |
A8 | Enthält die Erweiterung des Servernamens. |
Die Remote Directory Service Routine ist der Codebereich eines Natural-Subprogramms (die
Standardversion dieses Codebereichs ist das Subprogramm RDSSCDIR in der
Library SYSRPC).
Um Ihre eigene RDS-Routine zu erstellen:
Ändern Sie den unten dokumentierten Pseudocode.
Set UDID and UDID_EXPIRATION values
IF P_ENTRIES = 0
ESCAPE ROUTINE
IF P_CURSOR != 0
position to next server entry after P_CURSOR
Scan for server which may execute P_REQUEST(*)
IF found
SRV_NODE = found node name
SRV_NODE_EXT = node extension
SRV_NAME = found server name
SRV_NAME_EXT = server extension
P_CURSOR = position of found server
ELSE
P_CURSOR = 0
Dieses Programm befindet sich in der Library SYSRPC. Es liest die
Directory-Informationen aus einer Arbeitsdatei (Fixed-Block, Satzlänge 80 Byte).
Ihr Programm könnte die Directory-Informationen auch von anderer Stelle lesen (z.B. aus
einer Datenbank). Bei der ausgelieferten Version von RDSSCDIR ist dies die
Arbeitsdatei CMWKF01, die dem entsprechenden Dataset in der Server Startup
JCL zugeordnet ist.
* comment UDID definition UDID_EXPIRATION definition node definition ... node definition
(UDID) binary number
(UDID_EXPIRATION) number of seconds
(NODE) namevalue (logon-option) server definition ... server definition
(SERVER) namevalue (logon-option) library definition ... library definition
(LIBRARY) namevalue program definition ... program definition
(PROGRAM) namevalue ... namevalue
Max. 8 characters in uppercase
Die logon-option nach
namevalue sowie die folgenden
Definitionszeilen sind optional. Die möglichen Werte für
logon-option finden Sie unter Service Directory
Maintenance in der SYSRPC
Utility-Dokumentation.
(UDID)
ACB8AAB4777CA000
(UDID_EXPIRATION)
3600
* this is a comment
(NODE)
NODE1
(SERVER)
SERVER1
(LIBRARY)
SYSTEM
(PROGRAM)
TESTS1
TESTS2
TESTS3
(SERVER)
SERVER2 (logon-option)
(LIBRARY)
SYSTEM
(PROGRAM)
TESTS4
(NODE)
NODE2 (logon-option)
(SERVER)
SERVER1
(LIBRARY)
SYSTEM
(PROGRAM)
TESTS1
TESTS2
TESTS3
TESTS4
Im obigen Beispiel enthält das Verzeichnis:
Zwei Server SERVER1 und SERVER2, die auf dem Knoten
NODE1 laufen.
Der Server SERVER1 darf die Programme TESTS1,
TESTS2 und TESTS3 in der Library SYSTEM
ausführen.
Der Server SERVER2 darf das Programm TESTS4 in der Library
SYSTEM ausführen.
Ein Server SERVER1 auf dem Knoten NODE2, der die Programme
TESTS1 - TESTS4 in der Library SYSTEM
ausführen darf.
Die Einrückung der Zeilen im obigen Beispiel ist nicht erforderlich. Alle Zeilen können an beliebiger Stelle (eins) beginnen. Sie können diese Datei manuell ändern oder sie mit der SYSRPC Utility-Funktion Service Directory Maintenance generieren.