Verwendung eines Remote Directory Servers - RDS

#### Search Results

Search

# Verwendung eines Remote Directory Servers - RDS

Dieses Kapitel behandelt folgende Themen:

- Funktionsprinzip eines RDS

- Verwendung eines Remote Directory Servers

- Erstellen einer RDS-Schnittstelle

- Erstellen einer Remote-Directory-Service-Routine

- Remote Directory Service-Programm RDSSCDIR

## 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

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

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

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

### On this page

- Funktionsprinzip eines RDS
- Verwendung eines Remote Directory Servers
- Erstellen einer RDS-Schnittstelle
- Erstellen einer Remote-Directory-Service-Routine
- Remote Directory Service-Programm RDSSCDIR