Empfangsknoten in Java erstellen

Vorbereitungen

Stellen Sie sicher, dass Sie folgende Abschnitte gelesen und verstanden haben:

WebSphere Message Broker stellt die Quelle für die zwei benutzerdefinierten Beispielknoten 'Umschaltungsknoten' und 'Umsetzungsknoten' bereit. Sie können diese Knoten in ihrem aktuellen Zustand verwenden, oder Sie können sie ändern.

Ein benutzerdefinierter Java-Knoten wird als JAR-Datei verteilt. In diesem Abschnitt werden die Schritte beschrieben, die Sie ausführen müssen, um einen Empfangsknoten mit Java zu erstellen. Folgende Schritte werden erläutert:
  1. Neues Java-Projekt erstellen
  2. Empfangsknotenklasse deklarieren
  3. Knotenkonstruktor definieren
  4. Knotennamen deklarieren
  5. Attribute deklarieren
  6. Knotenfunktionen implementieren
  7. Instanz des Knotens löschen

Entwickeln Sie unter z/OS keine Java-Knoten, die auf einem Broker auf einer verteilten Plattform implementiert werden sollen, da die Java-Version unter z/OS möglicherweise keinen Code erzeugt, der mit der Java-Version auf der verteilten Plattform kompatibel ist.

Neues Java-Projekt erstellen

Sie können Java-Knoten in der Workbench mit Hilfe der bereitgestellten Plug-in-Entwicklungsumgebung (Plug-in Development Environment, PDE) erstellen. Dazu müssen Sie wie folgt vorgehen, um ein neues Java-Projekt zu erstellen:
  1. Wechseln Sie zur Ansicht 'Plug-in-Entwicklung'.
  2. Klicken Sie auf Datei > Neu > Projekt. Wählen Sie aus dem linken Menü Java aus, und wählen Sie anschließend aus dem rechten Menü Java-Projekt aus.
  3. Geben Sie dem Projekt einen Namen.

    Das Fenster 'Java Settings' (Java-Einstellungen) wird angezeigt.

  4. Wählen Sie die Registerkarte 'Libraries' (Bibliotheken) aus, und klicken Sie auf Add External JARs (Externe JAR-Dateien hinzufügen).
  5. Wählen Sie Installationsverzeichnis\classes\jplugin2.jar aus.
  6. Befolgen Sie die Eingabeaufforderungen auf den anderen Registerkarten, um andere Einstellungen für die Erstellung zu definieren.
  7. Klicken Sie auf Fertig stellen.
Anschließend können Sie die Quelle für Ihren Java-Knoten in diesem Projekt entwickeln.

Empfangsknotenklasse deklarieren

Jede Klasse, die die Klasse MbInputNodeInterface implementiert und im Klassenpfad (oder LIL-Pfad) des Brokers enthalten ist, ist beim Broker als Empfangsknoten registriert. Wenn Sie die Klasse MbInputNodeInterface implementieren, müssen Sie auch eine run-Methode für diese Klasse implementieren. Die Methode run stellt den Start des Nachrichtenflusses dar, enthält die Daten, mit denen die Nachricht formuliert wird und gibt sie im Nachrichtenfluss weiter. Der Broker ruft die Methode run auf, wenn Threads entsprechend dem angegebenen Threading-Modell verfügbar sind.

Im Folgenden finden Sie ein Beispiel für die Deklaration der Empfangsknotenklasse:

package com.ibm.jplugins;

import com.ibm.broker.plugin.*;

public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
...
In der Workbench können Sie dazu folgende Schritte ausführen:
  1. Klicken Sie auf Datei > Neu > Klasse.
  2. Legen Sie in den Paket- und Klassennamenfeldern die entsprechenden Werte fest.
  3. Löschen Sie den Text im Textfeld 'Superclass' (Superklasse), und klicken Sie auf die Schaltfläche Durchsuchen.
  4. Wählen Sie MbInputNode aus.
  5. Klicken Sie neben dem Textfeld 'Interface' (Schnittstelle) auf die Schaltfläche Hinzufügen, und wählen Sie MbInputNodeInterface aus.
  6. Klicken Sie auf Fertig stellen.

Knotenkonstruktor definieren

Wenn eine Instanz des Knotens erstellt wird, wird der Konstruktor der Knotenklasse des Benutzers aufgerufen. Hier erstellen Sie die Terminals des Knotens und initialisieren Standardwerte für die Attribute.

Einem Empfangsknoten sind eine Reihe von Ausgabeterminals zugeordnet, er verfügt jedoch normalerweise nicht über Eingabeterminals. Verwenden Sie die Methode createOutputTerminal, um einem Knoten Ausgabeterminals hinzuzufügen, wenn eine Instanz des Knotens erstellt wird. Im Folgenden finden Sie ein Beispiel für die Erstellung eines Knotens mit drei Ausgabeterminals:

public BasicInputNode() throws MbException
{
	createOutputTerminal ("out");
	createOutputTerminal ("failure");
	createOutputTerminal ("catch");
   setAttribute ("firstParserClassName","myParser");
   attributeVariable  = new String ("none");
}

Knotennamen deklarieren

Sie müssen den Namen des Knotens deklarieren, da er von der Workbench identifiziert wird. Alle Knotennamen müssen mit "Node" enden. Sie deklarieren den Namen mit der folgenden Methode:

public static String getNodeName()
{
   return "BasicInputNode";
}
Wenn diese Methode nicht deklariert wird, erstellt das Java-API-Framework einen Standardknotennamen gemäß den folgenden Regeln:
  • Der Klassenname wird an den Paketnamen angehängt.
  • Die Punkte werden entfernt, und der erste Buchstabe jedes Teils des Paket- und Klassennamens wird großgeschrieben.
Der folgenden Klasse wird beispielsweise standardmäßig der Knotenname "ComIbmPluginsamplesBasicInputNode" zugeordnet:
package com.ibm.pluginsamples;
public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
   ...

Attribute deklarieren

Knotenattribute deklarieren Sie genauso wie Java-Bean-Eigenschaften. Sie müssen Getter- und Setter-Methoden für die Attribute schreiben, und das API-Framework leitet davon die Attributnamen mit Hilfe der Java-Bean-Introspektionsregeln ab. Wenn Sie beispielsweise die folgenden beiden Methoden deklarieren:

private String attributeVariable;

public String getFirstAttribute()
{
  return attributeVariable;
}

publc void setFirstAttribute(String value)
{
  attributeVariable = value;
}

Dann folgert der Broker daraus, dass dieser Knoten über ein Attribut mit dem Namen 'firstAttribute' verfügt. Dieser Name wird von den Namen der get- oder set-Methoden abgeleitet, nicht von internen Klassenmitgliedsvariablennamen. Attribute können nur als Zeichenfolgen angezeigt werden, deshalb müssen Sie numerische Typen in den get- oder set-Methoden in bzw. aus Zeichenfolgen konvertieren. Die folgende Methode definiert beispielsweise ein Attribut mit dem Namen 'timeInSeconds':

int seconds;

public String getTimeInSeconds()
{
  return Integer.toString(seconds);
}

public void setTimeInSeconds(String value)
{
  seconds = Integer.parseInt(value);
}

Knotenfunktionen implementieren

Wie bereits beschrieben wird die Methode run vom Broker aufgerufen, um die Eingabenachricht zu erstellen. Diese Methode sollte alle Verarbeitungsfunktionen für den Empfangsknoten bereitstellen.

Standardattribute für Nachrichten-Parser überschreiben (optional)

Eine Empfangsknotenimplementierung bestimmt normalerweise, welcher Nachrichten-Parser eine Eingabenachricht anfangs analysiert. Der primitive MQEmpfangsknoten gibt beispielsweise vor, dass für die Syntaxanalyse des MQMD-Headers ein MQMD-Parser erforderlich ist. Ein benutzerdefinierter Empfangsknoten kann einen geeigneten Header oder Nachrichten-Parser und den Modus, in dem die Syntaxanalyse gesteuert wird, mit Hilfe der folgenden Attribute auswählen, die standardmäßig enthalten sind und die Sie überschreiben können:

rootParserClassName
Definiert den Namen des Stamm-Parsers, der Nachrichtenformate analysiert, die vom benutzerdefinierten Empfangsknoten unterstützt werden. Der Standardwert ist GenericRoot, ein bereitgestellter Stamm-Parser, der den Broker veranlasst, Parser zuzuordnen und zu verketten. Es ist unwahrscheinlich, dass ein Knoten diesen Attributwert ändern muss.
firstParserClassName
Definiert den Namen des ersten Parsers in einer möglichen Kette von Parsern, die für die Syntaxanalyse des Bitstroms verantwortlich sind. Der Standardwert ist XML.
messageDomainProperty
Ein optionales Attribut, das den Namen des Nachrichten-Parsers definiert, der für die Syntaxanalyse der Eingabenachricht erforderlich ist. Die unterstützten Werten entsprechen den vom MQEmpfangsknoten unterstützten Werten. (Weitere Informationen zum MQEmpfangsknoten finden Sie unter MQEmpfangsknoten.)
messageSetProperty
Ein optionales Attribut, das die Nachrichtengruppen-ID oder den Nachrichtengruppennamen im Feld Nachrichtengruppe definiert, aber nur wenn der MRM-Parser durch das Attribut messageDomainProperty angegeben wurde.
messageTypeProperty
Ein optionales Attribut, das die Nachrichten-ID im Feld Nachrichtenart definiert, aber nur wenn der MRM-Parser durch das Attribut messageDomainProperty angegeben wurde.
messageFormatProperty
Ein optionales Attribut, das das Format der Nachricht im Feld Nachrichtenformat definiert, aber nur wenn der MRM-Parser durch das Attribut messageDomainProperty angegeben wurde.

Instanz des Knotens löschen

Eine Instanz des Knotens wird in den folgenden beiden Fällen gelöscht:
  • Wenn Sie den Broker beenden.
  • Wenn Sie den Knoten oder den Nachrichtenfluss, der den Knoten enthält, entfernen und die Konfiguration erneut implementieren.
Es wird empfohlen, den Knoten über den Löschvorgang zu informieren, so dass er Bereinigungsvorgänge durchführen kann, z. B. das Schließen von Sockets. Wenn der Knoten die optionale Methode onDelete implementiert, wird diese vom Broker aufgerufen, bevor der Knoten gelöscht wird.

Die Methode onDelete wird wie folgt implementiert:

public void onDelete()
{
  // perform node cleanup if necessary
}
Zugehörige Informationen
Benutzerdefinierte Java-Knoten-API
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
as09950_