Verwendung eines Remote Directory Servers - RDS

Dieses Kapitel behandelt folgende Themen:


Funktionsprinzip eines RDS

Sie haben zwei Möglichkeiten, ein Diensteverzeichnis (Service Directory) zu verwenden:

  1. 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.

  2. Verwendung eines Remote Directory

    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.

Verwendung eines Remote Directory Servers

Beginn der AnweisungslisteUm einen Remote Directory Server zu verwenden:

  1. Directory-Datei erstellen

    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.

  2. Remote Directory Server starten

    Starten Sie den Remote Directory Server und fahren Sie mit den folgenden Schritten fort.

  3. Remote Directory Server definieren

    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).

Erstellen einer RDS-Schnittstelle

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)
Library-Name (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.

Erstellen einer Remote-Directory-Service-Routine

Die Remote Directory Service Routine ist der Codebereich eines Natural-Subprogramms (die Standardversion dieses Codebereichs ist das Subprogramm RDSSCDIR in der Library SYSRPC).

Beginn der AnweisungslisteUm 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

Remote Directory Service-Programm RDSSCDIR

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.

Struktur der Directory-Arbeitsdatei

* comment
UDID definition
UDID_EXPIRATION definition
node definition
...
node definition

UDID-Definition

(UDID)
   binary number            

UDID_EXPIRATION-Definition

(UDID_EXPIRATION)
   number of seconds        

Knoten-Definition

(NODE)
   namevalue     (logon-option)
   server definition
   ...
   server definition

Server-Definition

(SERVER)
   namevalue     (logon-option)
   library definition
   ...
   library definition

Library-Definition

(LIBRARY)
   namevalue
   program definition
   ...
   program definition

Programm-Definition

(PROGRAM)
   namevalue
   ...
   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.

Aus der Arbeitsdatei gelesenes Beispiel-Verzeichnis:

(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.