Zugriff auf WebSphere MQ-Nachrichtenwarteschlangen

EGL unterstützt den Zugriff auf WebSphere MQ-Nachrichtenwarteschlangen (ehemals MQSeries-Nachrichtenwarteschlangen) auf allen Zielplattformen.

Sie können diesen Zugriff auf eine der folgenden Arten ermöglichen:

Sie können die beiden Methoden innerhalb eines Programms kombinieren. Es hat sich jedoch bewährt, sich für eine Methode zu entscheiden und diese dann durchgängig zu verwenden.

Unabhängig von Ihrer Methode können Sie zahlreiche Laufzeitbedingungen mittels Optionsdatensätzen steuern, bei denen es sich um Variablen handelt, die auf speziellen globalen Basisdatensatzabschnitten (BasicRecord) basieren. EGL übergibt diese Variablen in Aufrufen an WebSphere MQ. EGL stellt eine Reihe von Beispieldatensatzabschnitten bereit, die Sie als Grundlage für Optionsdatensätze verwenden können.

Ihre Methode legt fest, wie EGL die Optionsdatensätze für WebSphere MQ verfügbar macht:
Details zu Optionsdatensätzen und zu den Werten, die standardmäßig an WebSphere MQ übergeben werden, finden Sie unter Optionsdatensätze für 'MQRecords'. Details zu WebSphere MQ selbst finden Sie in den folgenden Dokumenten:

Verbindungen

Es wird eine Verbindung zu einem Warteschlangenmanager (als Warteschlangenmanager für Verbindung bezeichnet) hergestellt, wenn Sie erstmals eine der folgenden Anweisungen verwenden:
  • Eine EGL-Anweisung 'add' oder 'get next', die auf eine Nachrichtenwarteschlange zugreift.
  • Einen Aufruf der EGL-Funktion MQCONN oder MQCONNX.

Sie können immer nur auf einen Warteschlangenmanager für Verbindung zur Zeit zugreifen, haben jedoch die Möglichkeit, auf mehrere von diesem Manager gesteuerte Warteschlangen zuzugreifen. Wenn Sie direkt eine Verbindung zu einem anderen Warteschlangenmanager als dem aktuellen Warteschlangenmanager für Verbindung herstellen wollen, müssen Sie die Verbindung zum ersten Warteschlangenmanager durch Aufruf von MQDISC trennen und anschließend eine Verbindung zum zweiten Warteschlangenmanager herstellen, indem Sie 'add', 'get next', MQCONN oder MQCONNX aufrufen.

Sie können auch auf Warteschlangen zugreifen, die von einem fernen Warteschlangenmanager gesteuert werden. Dies ist ein Warteschlangenmanager, mit dem der Warteschlangenmanager für Verbindung interagieren kann. Der Zugriff zwischen den beiden Warteschlangenmanagern ist nur dann möglich, wenn WebSphere MQ selbst so konfiguriert ist, dass ein solcher Zugriff zulässig ist.

Der Zugriff auf den Warteschlangenmanager für Verbindung wird beendet, wenn Sie MQDISC aufrufen oder Ihr Code endet.

Nachricht in Transaktion einschließen

Sie können Anweisungen für den Zugriff auf Warteschlangen in eine Arbeitseinheit (UOW) einbetten, sodass alle Ihre Änderungen an den Warteschlangen an einem einzelnen Verarbeitungspunkt festgeschrieben (Commit) oder zurückgesetzt (Rollback) werden. Wenn eine Arbeitseinheit eine solche Anweisung enthält, gilt Folgendes:
  • Eine EGL-Anweisung 'get next' (oder der Aufruf der EGL-Funktion MQGET) entfernt eine Nachricht nur dann, wenn eine Commitoperation ausgeführt wird.
  • Die Nachricht, die von einer EGL-Anweisung 'add' (oder von einem Aufruf der EGL-Funktion MQPUT) in eine Warteschlange gestellt wird, ist nur dann außerhalb der Arbeitseinheit sichtbar, nachdem eine Commitoperation ausgeführt wurde.

Enthält die Arbeitseinheit keine Anweisungen für Warteschlangenzugriff, wird jede Änderung an einer Nachrichtenwarteschlange unverzüglich festgeschrieben.

Eine EGL-Anweisung 'add' oder 'get next' im Zusammenhang mit WebSphere MQ wird in eine Arbeitseinheit eingebettet, wenn die Eigenschaft 'includeMsgInTransaction' für den MQ-Datensatz (MQRecord) wirksam gesetzt ist. Der generierte Code enthält die folgenden Optionen:
  • Für MQGET: MQGMO_SYNCPOINT
  • Für MQPUT: MQPMO_SYNCPOINT
Wenn Sie die Eigenschaft 'includeMsgInTransaction' für einen MQ-Datensatz nicht angeben, werden die Anweisungen für Datenbankzugriff außerhalb einer Arbeitseinheit ausgeführt. Der generierte Code enthält die folgenden Optionen:
  • Für MQGET: MQGMO_NO_SYNCPOINT
  • Für MQPUT: MQPMO_NO_SYNCPOINT

Wenn Ihr Code eine Arbeitseinheit beendet, werden alle wiederherstellbaren Ressourcen, auf die Ihr Programm zugreift (einschließlich Datenbanken, Nachrichtenwarteschlangen und wiederherstellbare Dateien) von EGL festgeschrieben (Commit) oder rückgängig gemacht (Rollback). Hierzu kommt es unabhängig davon, ob Sie die Systemfunktionen ('sysLib.commit', 'sysLib.rollback') oder die EGL-Aufrufe an WebSphere MQ (MQCMIT, MQBACK) verwenden; die entsprechende EGL-Systemfunktion wird in beiden Fällen aufgerufen.

Ein Rollback wird ausgeführt, wenn ein EGL-Programm aufgrund eines Fehlers in einem frühen Stadium beendet wird.

Anpassung

Sie können Ihre Interaktion mit WebSphere MQ anpassen, anstatt die Standardverarbeitung der Anweisungen 'add' und 'get next' zu verwenden.

EGL stellt eine Gruppe von Datentabellenabschnitten (DataTable) bereit, um Sie bei der Interaktion mit WebSphere MQ zu unterstützen. Mit jedem dieser Abschnitte können von EGL bereitgestellte Funktionen zur Ausführungszeit Werte aus speicherbasierten Listen abrufen. Sie müssen die folgenden installierten EGL-Dateien in Ihr Projekt integrieren, ohne diese Dateien zu ändern:
records.egl
Diese Datei enthält Basisdatensatzabschnitte (BasicRecord), die als Quelle für Optionsdatensätze dienen. Darüber hinaus enthält die Datei Strukturabschnitte, die von diesen Datensätzen verwendet werden und die Sie bei der Entwicklung angepasster Optionsdatensätze unterstützen.
functions.egl
Diese Datei enthält zwei Gruppen von Funktionen:
  • WebSphere MQ-Befehlsfunktionen, die direkt auf WebSphere MQ zugreifen.
  • Initialisierungsfunktionen, mit denen Sie Anfangswerte in die von Ihrem Programm verwendeten Optionsdatensätze stellen können.
mqrcode.egl, mqrc.egl, mqvalue.egl
Diese Dateien enthalten eine Gruppe von EGL-DataTable-Abschnitten, die von den Befehls- und Initialisierungsfunktionen verwendet werden.

Sie müssen die folgenden Tasks ausführen:

  1. Importieren Sie die Dateien aus dem folgenden Verzeichnis in ein EGL-Projekt:
    gemeinsam_genutztes_Installationsverzeichnis\plugins\
    com.ibm.etools.egl.resources_Version\MqReusableParts
    gemeinsam_genutztes_Installationsverzeichnis
    Das gemeinsam genutzte Produktinstallationsverzeichnis wie beispielsweise 'C:\Programme\IBM\SDP70Shared'. Wenn Sie vor der Installation des momentan verwendeten Produkts ein Rational Developer-Produkt installiert und beibehalten haben, müssen Sie unter Umständen das Verzeichnis aus der früheren Installation angeben.
    Version
    Die neuste Version des Plug-ins, beispielsweise '7.0.100.RFB_20080711_1614'.
  2. Sie können die Verfügbarkeit der Abschnitte für Ihr Programm verbessern, indem Sie in die Datei, die Ihr Programm enthält, mindestens eine EGL-Importanweisung schreiben. Befinden sich die zu importierenden Dateien nicht in dem Projekt, für das Sie Code entwickeln, sondern in einem anderen Projekt, müssen Sie sicherstellen, dass Ihr Projekt auf das andere Projekt verweist.

    Details hierzu finden Sie unter Anweisungen 'import' und 'use'.

  3. Deklarieren Sie in Ihrem Programm wie folgt globale Variablen:
    • Schließen Sie use-Deklarationen für die Datentabellen in 'mqrc', 'mqrcode' und 'mqvalue' ein.
    • Deklarieren Sie für jeden Optionsdatensatz, den Sie an WebSphere MQ übergeben wollen, einen Basisdatensatz, der einen Optionsdatensatzabschnitt als 'typedef' verwendet. Details zu den einzelnen Abschnitten finden Sie unter Optionsdatensätze für 'MQRecords'.
  4. Initialisieren Sie in Ihrer Funktion die Optionsdatensätze, die an WebSphere MQ übergeben werden sollen, indem Sie die importierte EGL-Initialisierungsfunktion für jeden Datensatz aufrufen. Jede Funktion hat den Namen eines Datensatzabschnitts, gefolgt von '_INIT'. Beispiel: MQGMO_INIT.
  5. Legen Sie Werte für die Felder in den Optionsdatensätzen fest. Die Datentabelle in 'mqvalue' enthält eine einzelne Zeile mit Feldern. Jedes Feld entspricht einem Symbol, das in der WebSphere MQ-Dokumentation beschrieben ist. Sie können einen Wert für ein Feld in einem Optionsdatensatz festlegen, indem Sie eines der Felder in der Datentabelle von 'mqvalue' verwenden, wie in folgendem Beispiel:
    mqgmo.options = mqvalue.mqgmo_lock[1];
    Sie können für ein numerisches Feld in einem Optionsdatensatz eine Kombination aus Werten festlegen, indem Sie die Werte wie in folgendem Beispiel hinzufügen:
      mqgmo.options = mqvalue.mqgmo_lock[1] 
                      + mqvalue.mqgmo_accept_truncated_msg[1] 
                      + mqvalue.mqgmo_browse_first[1];
  6. Die Vorgaben, wann Tabellen generiert werden müssen, hängen davon ab, ob es sich bei der Sprache Ihres Zielprogramms um COBOL oder Java™ handelt. Um alle Datentabellen zu generieren, die in Ihrem Programm verwendet werden, müssen Sie zulassen, dass die Erstellungsdeskriptoroption 'genTables' standardmäßig den Wert YES annimmt. Weitere Informationen finden Sie unter DataTable-Abschnitt.

Nur für COBOL unterstützte Funktionen

Die folgenden WebSphere MQ-Funktionen werden nur dann unterstützt, wenn Sie ein COBOL-Programm generieren:
  • Auslösefunktion (Triggering)
  • Verteilerlisten

Feedback