Verwenden Sie den DatabaseRetrieve-Knoten, um sicherzustellen, dass die Informationen in einer Nachricht aktuell sind.
Dieses Thema ist in folgende Abschnitte eingeteilt:
Verwenden Sie den DatabaseRetrieve-Knoten, um eine Nachricht mit Informationen aus einer Datenbank zu modifizieren. Sie können z. B. einer Nachricht über einen in einer Nachricht enthaltenen Schlüssel Informationen hinzufügen (der Schlüssel kann beispielsweise eine Kontonummer sein).
Der DatabaseRetrieve-Knoten befindet sich im Ablagefach Database (Datenbank) der Nachrichtenflussknotenpalette und wird im WebSphere Message Broker Toolkit durch folgendes Symbol dargestellt:
Informationen zu Beispielen können nur bei Verwendung des in das WebSphere Message Broker Toolkit integrierten bzw. online verfügbaren Information Center angezeigt werden. Muster können nur ausgeführt werden, wenn das im WebSphere Message Broker Toolkit integrierte Information Center verwendet wird.
Java | JDBC |
---|---|
Ganzzahl | INTEGER |
Long | BIGINT |
Double | DOUBLE |
BigDecimal | NUMERIC |
Boolean | BIT |
byte[] | VARBINARY oder LONGVARBINARY |
BitSet | VARBINARY oder LONGVARBINARY |
String | VARCHAR oder LONGVARCHAR |
MbTime | java.sql.Time |
MbTimestamp | java.sql.Timestamp |
MbDate | java.sql.Date |
JDBC | Java | ESQL-Typ |
---|---|---|
SMALLINT | Ganzzahl | INTEGER |
INTEGER | Ganzzahl | INTEGER |
BIGINT | Long | DECIMAL |
DOUBLE | Double | FLOAT |
REAL | Double | FLOAT |
FLOAT | Double | FLOAT |
NUMERIC | BigDecimal | DECIMAL |
DECIMAL | BigDecimal | DECIMAL |
BIT | Boolean | BOOLEAN |
BOOLEAN | Boolean | BOOLEAN |
BINARY | byte[] | BLOB |
VARBINARY | byte[] | BLOB |
LONGVARBINARY | byte[] | BLOB |
CHAR (Zeichen) | String | CHARACTER |
VARCHAR | String | CHARACTER |
LONGVARCHAR | String | CHARACTER |
TINYINT | byte[1] | BLOB |
TIME | java.util.Date | TIME |
TIMESTAMP | java.util.Date | TIMESTAMP |
DATE | java.util.Date | DATE |
Wenn ein Fehler im XPath-Ausdruck eines Musters festgestellt wird, wird dieser Fehler bei der Auswertung im WebSphere Message Broker Toolkit gemeldet. In der Fehlernachricht ist möglicherweise der fehlerhafte Ausdruck und der eindeutige Name des zugehörigen dynamischen oder statischen Terminals angegeben oder die Zeichenfolge ist als fehlerhaft in der Tabelle markiert.
Der DatabaseRetrieve-Knoten sucht Werte in einer Datenbank und speichert sie als Elemente in den Baumstrukturen der Ausgabenachrichtenassemblierung. Der von der Datenbank in Form von Ausgabespaltenwerten abgerufene Informationstyp, der durch SQL-Abfragen abgerufen und in deren Ergebnismengen zurückgegeben wird, wird zunächst in einen passenden Java-Typ und danach in einen internen Nachrichtenelement-Wertetyp konvertiert und schließlich in der Baumstruktur einer Ausgabenachrichtenassemblierung gespeichert. Wenn ein Nachrichtenelement bereits in der Baumstruktur der abgehenden Nachrichten vorhanden ist, wird der alte Wert durch den neuen Wert überschrieben. Falls das Zielelement nicht vorhanden ist, wird es erstellt und der Wert wird gespeichert.
Der Knoten benötigt Abfrageinformationen, die zur Generierung einer SQL-SELECT-Abfrage verwendet werden, die mittels mehrerer Prüfbedingungen auf mehrere Tabellen in einer Datenbank zugreifen kann. Nicht immer befinden sich alle Informationen, die Sie in einer Ergebnismenge abrufen möchten, in einer einzigen Datenbank. Eventuell müssen Sie die gewünschten Spaltenwerte daher aus zwei oder mehr Tabellen abrufen. Dieser Knoten unterstützt die Verwendung von SELECT-Anweisungen, mit denen Sie Spalten einer oder mehrerer Tabellen in einer Ergebnismenge abrufen können. Die normale Join-Syntax, die von diesem Knoten unterstützt wird, wird als Inner Join bezeichnet.
Inner Join-Informationen, die zur Generierung einer Abfrage erfasst werden, umfassen eine Liste mit tabellenqualifizierten Spaltenwerten für den Abruf und eine Liste mit Prüfbedingungen, mit denen die WHERE-Klausel einer SELECT-Anweisung gebildet wird. Tabellenqualifizierte Spaltenwerte können den linken Operanden in einer Prüfbedingung bilden. Wählen Sie einen Vergleichsoperator aus, der für diesen Operanden angewendet wird, und geben Sie optional auf der rechten Seite einen Operanden an, um die Prüfbedingung zu vervollständigen. Bei dem Operator könnte es sich um einen Null-Vergleichstest handeln, für den kein Operand auf der rechten Seite erforderlich ist. Bei dem Wert des Operanden auf der rechten Seite kann es sich um einen Datenbanktyp handeln (z. B. 'Integer' (ganze Zahl), 'Boolean' (Boolesch) oder 'Long' (Langzeichen)), eine weitere tabellenqualifizierte Spalte oder einen Wert, der mittels eines allgemeinen XPath 1.0-Ausdrucks aus einem Element in der eingehenden Nachricht abgerufen wird.
Der Ausdruck sollte ein einzelnes Element, einen Booleschen Wert oder eine Zeichenfolge zurückgeben. Anderenfalls wird eine Ausnahme generiert. Wenn die Abfrage mehrere Zeilen zurückgibt, wird die erste Zeile ausgewählt und alle anderen Zeilen werden ignoriert, es sei denn, die Option Mehrere Zeilen ist aktiviert. Im letzteren Fall werden alle Zeilen verarbeitet und die Werte dieser Zeilen werden zur Aktualisierung der Baumstrukturen der Ausgabenachrichtenassemblierung verwendet.
Es ist kann hilfreich sein, einen DatabaseRetrieve-Knoten mit anderen Nachrichtenflussknoten zu kombinieren. Beispielsweise können Sie einen XSLTransform-Knoten verwenden, um Daten vor und nach dem Aufruf des DatabaseRetrieve-Knotens zu bearbeiten.
Der DatabaseRetrieve-Knoten verfügt über ein Eingabeterminal (IN) und drei Ausgabeterminals ('Out', 'KeyNotFound' und 'Failure'). Wenn die Nachricht erfolgreich modifiziert wurde, wird sie an das Terminal 'Out' weitergeleitet. Wenn die Modifizierung der Nachricht fehlschlägt bzw. während der Verarbeitung ein Fehler festgestellt wird, wird die Nachricht an das Terminal 'Failure' weitergegeben. Wenn nach der Ausführung einer angegebenen SQL-SELECT-Abfrage in der Ergebnismenge keine Zeilen zurückgegeben werden, wird die Originalnachricht an das Terminal 'KeyNotFound' weitergeleitet.
Der DatabaseRetrieve-Knoten erstellt seine JDBC-Verbindungen unter Verwendung der Verbindungsdetails, die in der Brokerregistry als konfigurierbarer Service gespeichert sind. Die konfigurierbaren JDBC-Provider-Services stehen allen unterstützten Datenbanken zur Verfügung.
Verwenden Sie den WebSphere Message Broker Explorer zur Änderung oder Erstellung des bereitgestellten Service; weitere Informationen hierzu finden Sie im Abschnitt Konfigurierbare Services im WebSphere Message Broker Explorer bearbeiten.
Sie können auch den Befehl mqsichangeproperties zur Änderung der Einstellungen des für Ihre Datenbank bereitgestellten Service nutzen oder mit dem Befehl mqsicreateconfigurableservice einen neuen Service erstellen. Weitere Informationen zur Verwendung der JDBC-Provider-Services finden Sie im Abschnitt JDBC-Provider für Verbindungen des Typs 4 einrichten. Sie müssen für jede Datenbank, zu der Sie eine Verbindung herstellen möchten, einen anderen JDBC-Provider-Service einrichten.
Hinweis: Die Eigenschaft maxConnectionPoolSize gilt nicht für JDBC-Verbindungen, die von DatabaseRetrieve- oder DatabaseRoute-Knoten verwendet werden.
Nachdem Sie den Service definiert haben, müssen Sie die Eigenschaft Datenquellenname dieses Knotens auf den Namen des dafür erstellten JDBC-Provider-Service setzen. Die Attribute des Service werden für Verbindungen des DatabaseRetrieve-Knotens benötigt.
Damit die Änderungen wirksam werden, müssen Sie den Broker beenden und neu starten, es sei denn, Sie möchten eine neue Ausführungsgruppe für den Broker erstellen, in dem Sie den Nachrichtenfluss mit diesem Knoten implementieren.
Wenn Sie eine Instanz des DatabaseRetrieve-Knotens in einen Nachrichtenfluss eingereiht haben, können Sie ihn konfigurieren. Der Abschnitt Nachrichtenflussknoten konfigurieren enthält weitere Informationen hierzu. Die Knoteneigenschaften werden in der Eigenschaftenansicht angezeigt.
Alle verbindlichen Eigenschaften, für die Sie einen Wert eingeben müssen (d. h. Eigenschaften ohne definierten Standardwert), sind mit einem Sternchen gekennzeichnet.
EmployeeNumber (Personalnummer) | FamilyName (Nachname) | FirstName (Vorname) | Salary (Gehalt) |
---|---|---|---|
00001 | Smith | John | 20000 |
00002 | Jones | Harry | 26000 |
00003 | Doe | Jane | 31000 |
<EmployeeRecord>
<EmployeeNumber>00001</EmployeeNumber>
</EmployeeRecord>
Tabellenname | Spaltenname | Operator | Werttyp | Wert |
---|---|---|---|---|
Employee (Mitarbeiter) | FamilyName (Nachname) | |||
Employee (Mitarbeiter) | Salary (Gehalt) | |||
Employee (Mitarbeiter) | EmployeeNumber (Personalnummer) | = | Element | $InputRoot/XMLNSC/EmployeeRecord/EmployeeNumber |
Spaltenname | Nachrichtenelement |
---|---|
Employee.FamilyName | $OutputRoot/XMLNSC/EmployeeRecord/FamilyName |
Employee.Salary | $OutputRoot/XMLNSC/EmployeeRecord/Wage |
SELECT Employee.FamilyName, Employee.Salary
FROM Employee
WHERE EmployeeNumber=?
ORDER BY Employee.FamilyName ASC, Employee.Salary ASC
Dabei ist ? der Wert, der aus der eingehenden Nachricht abgerufen wird und über die Eigenschaft Wert in der dritten Zeile der Abfrageelementtabelle lokalisiert wird, die den Wertetyp Element aufweist.<EmployeeRecord>
<EmployeeNumber>00001</EmployeeNumber>
<FamilyName>Smith</FamilyName>
<Wage>20000</Wage>
</EmployeeRecord>
<EmployeeRecord>
<EmployeeNumber>00002</EmployeeNumber>
<FamilyName>Jones</FamilyName>
<Wage>26000</Wage>
</EmployeeRecord>
<EmployeeRecord>
<EmployeeNumber>00001</EmployeeNumber>
<FamilyName>Smith</FamilyName>
<Wage>20000</Wage>
<EmployeeNumber>00002</EmployeeNumber>
<FamilyName>Jones</FamilyName>
<Wage>26000</Wage>
</EmployeeRecord>
Durch die Festlegung der Auswertungseigenschaften können Sie festlegen, wie die vom DatabaseRetrieve-Knoten generierte Nachricht ausgewertet werden soll. Diese Eigenschaften führen nicht dazu, dass die Eingabenachricht ausgewertet wird. Falls diese Auswertung erforderlich ist, wird davon ausgegangen, dass die Auswertung bereits durch den Empfangsknoten oder einen vorhergehenden Auswertungsknoten ausgeführt wurde.
Weitere Informationen finden Sie unter Nachrichten überprüfen und Auswertungseigenschaften.
Der Terminals des DatabaseRetrieve-Knotens werden in der folgenden Tabelle beschrieben.
Terminal | Beschreibung |
---|---|
Eingabeterminal (In) | Das Eingabeterminal, das eine Nachricht zur Verarbeitung durch einen Knoten annimmt |
Ausgang | Das Ausgabeterminal, an das die abgehende Nachricht bei erfolgreicher Verarbeitung geleitet wird. |
KeyNotFound | Das Ausgabeterminal, an das die unveränderte Originalnachricht weitergeleitet wird, wenn die Ergebnismenge leer ist. |
Fehlerterminal (Failure) | Das Ausgabeterminal, an das die Eingabenachricht gesendet wird, wenn während der Verarbeitung ein Fehler auftritt. |
In den folgenden Tabellen werden die Knoteneigenschaften beschrieben. Die Spalte O zeigt an, ob die Eigenschaft obligatorisch ist (markiert mit einem Sternchen, wenn ein Wert eingegeben werden muss, weil kein Standardwert definiert ist). Die Spalte K zeigt an, ob die Eigenschaft konfigurierbar ist (Wert kann geändert werden, wenn der Nachrichtenfluss zur BAR-Datei hinzugefügt wird, um ihn einzusetzen).
Eigenschaft | O | K | Standardwert | Beschreibung |
---|---|---|---|---|
Knotenname | Nein | Nein | DatabaseRetrieve | Der Name des Knotens. |
Kurzbeschreibung | Nein | Nein | Kurze Beschreibung des Knotens. | |
Langbeschreibung | Nein | Nein | Text, der den Zweck des Knotens im Nachrichtenfluss beschreibt. |
Eigenschaft | O | K | Standardwert | Beschreibung | Eigenschaft des Befehls mqsiapplybaroverride |
---|---|---|---|---|---|
Name der Datenquelle | Ja | Ja | DB2 | Der Aliasname zum Lokalisieren der in der Brokerregistry gespeicherten Definition des JDBC-Provider-Service. Der Aliasname wird zum Lokalisieren und Erstellen der JDBC-Verbindungs-URL verwendet, die zum Herstellen einer Verbindung zu einem DBMS verwendet wird. Die Verbindungs-URL ist treiberspezifisch, enthält jedoch den Namen der Datenbank, zu der die Verbindung hergestellt werden soll. Wenn die Verbindung zur Datenbank über ein Anmeldeaccount und -Kennwort hergestellt wird, verwendet der Knoten diese Eigenschaft auch als Suchschlüssel, mit dem diese Werte von einem erwarteten entsprechenden DSN-Eintrag in der Brokerregistry abgerufen werden können. Wenn das Datenbankmanagementsystem (DBMS) durch ein Kennwort geschützt ist, geben Sie den Parameter -n im Befehl mqsisetdbparms für den eindeutigen JDBC-Sicherheitsschlüssel an, bevor Sie den Nachrichtenfluss implementieren, in dem dieser DatabaseRetrieve-Knoten enthalten sind. |
dataSource |
Nachricht kopieren | Nein | Ja | Nicht ausgewählt | Diese Eigenschaft gibt an, ob eine Kopie der eingehenden Originalnachricht erforderlich ist, da die Nachrichtenbaumstruktur möglicherweise zusätzlich zu logischen Baumstrukturen in der Nachrichtenassemblierung aktualisiert wird. Das Kontrollkästchen ist standardmäßig inaktiviert. Aus Leistungsgründen sollten Sie diese Eigenschaft nur auswählen, wenn die Eingabenachricht erweitert wird. | |
Mehrere Zeilen | Nein | Ja | Nicht ausgewählt | Diese Eigenschaft gibt an, ob alle Zeilen verarbeitet werden, wenn eine Abfrage mehrere Zeilen zurückgibt. Wenn Sie Mehrere Zeilen auswählen, werden alle Zeilen verarbeitet und die Werte dieser Zeilen werden zur Aktualisierung der Baumstrukturen der Ausgabenachrichtenassemblierung verwendet. Wenn Sie diese Eigenschaft nicht auswählen, wird die erste Zeile ausgewählt und alle anderen Zeilen werden ignoriert. | |
Abfrageelemente | Ja | Nein | Eine Tabelle mit Abfrageelementen, die zum Erstellen einer einzelnen SQL-Anweisung SELECT verwendet werden. Die Tabelle besteht aus fünf Spalten und einer oder mehreren Zeilen. Folgende Spalten sind in der Tabelle enthalten:Tabellenname, Spaltenname, Operator, Wertetyp und Wert. Diese fünf Eigenschaften beschreiben ein Abfrageelement und geben einen tabellenqualifizierten Spaltenwert an, der aus der Datenbank abgerufen werden soll. In diesem Fall bildet das Element einen Teil der SELECT- und ORDER BY-Klauseln der generierten Abfrage. Ansonsten dient das Abfrageelement als Prüfbedingung, die innerhalb der WHERE-Klausel der generierten Abfrage ein Vergleichselement darstellt. | ||
Tabellenname | Ja | Nein | Der Name der Datenbanktabelle, die Bestandteil der SQL-Anweisung SELECT ist, einschließlich des Schemanamens; z. B. myschema.mytable. | ||
Spaltenname | Ja | Nein | Der Name der Spalte in der Datenbanktabelle, die in den Ergebnissen abgerufen wird und über den Wert für die Eigenschaft Tabellenname bestimmt wurde. Diese SELECT-Klausel kann auf diesen Namen als Spaltenwert für die Rücklieferung von einer Abfrage oder für den Verweis in einer Prüfbedingung innerhalb der WHERE-Klausel verweisen. | ||
Operator | Ja | Nein | Ein Vergleichsoperator, der für einen Wert des Operanden auf der linken Seite (die in den ersten zwei Spalten der Zeile angegebene Tabellenspalte) und optional des Operanden auf der rechten Seite angewendet wird. Wenn Sie für diese Eigenschaft einen aufsteigenden oder absteigenden Operatorwert (ASC oder DESC) angeben, gibt diese Zeile die Deklaration einer tabellenqualifizierten Spalte an, die einen Teil der SELECT- und ORDER BY-Klauseln der generierten Abfrage bildet und auf die in künftigen Zeilen optional als Wert für den Operanden auf der rechten Seite verwiesen werden kann. | ||
Werttyp | Ja | Nein | Ein Wert, der entweder auf None (Keiner) gesetzt ist oder der den Typ des Werts angibt, der in der letzten Spalte dieser Zeile definiert ist. Wenn diese Eigenschaft nicht auf None gesetzt ist, verweist sie auf eine Zeile, die innerhalb der WHERE-Klausel der SQL-SELECT-Anweisung eine Prüfbedingung beschreibt. | ||
Wert | Ja | Nein | Ein Wert, der entweder auf None (Keiner) gesetzt ist oder der einen von mehreren Eigenschaftentypen angibt, die in der Eigenschaft Wertetyp definiert sind. Wenn die Eigenschaft Wertetyp beispielsweise auf Element gesetzt ist, erfasst die Eigenschaft Wert einen allgemeinen XPath 1.0-Ausdruck. Der Wert, der von dem Ausdruck zurückgegeben wird, wenn er auf die eingehende Nachricht des Knotens angewendet wird, wird als Wert für den Operanden auf der rechen Seite verwendet, der mit diesem Prädikat verglichen wird. Der Vergleichswert des Operanden auf der rechten Seite muss dem Typ entsprechen, der für die Tabellenspalte abgerufen wird, die als Operand auf der linken Seite für den Vergleich verwendet wird. Es sind auch komplexe Ausdrücke möglich, die keinen bis mehrere Werte aus der eingehenden Nachricht abrufen und so manipulieren, dass sie für den Vergleich einen einzigen Wert ergeben. Beispielsweise kann durch einen allgemeinen Ausdruck für den Wertetyp Element die Summe aus mehreren Feldwerten der eingehenden Nachricht berechnet werden. |
Eigenschaft | O | K | Standardwert | Beschreibung |
---|---|---|---|---|
Datenelemente | Ja | Nein | Eine Liste mit Datenelementen. Ein Datenelement wird über die Eigenschaften Spaltenname und Nachrichtenelement beschrieben. | |
Spaltenname | Ja | Nein | Der Name der Datenbankspalte, aus der der Elementwert abgerufen wird. Die Liste mit Namen wird auf Basis der Einträge, die in die Tabelle mit den Abfrageelementen eingefügt werden, dynamisch aktualisiert. | |
Nachrichtenelement | Ja | Nein | Ein XPath 1.0-Schreib-/Lesepfadausdruck, der die Pfadposition eines Nachrichtenelements beschreibt. Im Nachrichtenelement ist der Datenbankwert gespeichert. Der XPath-Ausdruck muss ein einzelnes Element in der Nachricht ergeben. |
In der folgenden Tabelle werden die Validierungseigenschaften des DatabaseRetrieve-Knotens beschrieben.
Eine umfassende Beschreibung dieser Eigenschaften finden Sie im Abschnitt Auswertungseigenschaften.Eigenschaft | O | K | Standardwert | Beschreibung |
---|---|---|---|---|
Auswertung | Nein | Ja | Ohne | Durch diese Eigenschaft wird gesteuert, ob eine Auswertung stattfindet. Gültige Werte sind Keine, Inhalt und Wert, Inhalt und Übernehmen. |
Fehlerbehebungsmaßnahme | Nein | Nein | Ausnahme | Durch diese Eigenschaft wird gesteuert, was beim Fehlschlagen der Auswertung geschieht. Diese Eigenschaft kann nur festgelegt werden, wenn Sie Auswerten auf Inhalt oder Inhalt und Wert setzen. Gültige Werte sind Benutzertrace, Lokales Fehlerprotokoll, Ausnahmebedingung und Ausnahmeliste. |
Eigenschaft | O | K | Standardwert | Beschreibung |
---|---|---|---|---|
Ereignisse | Nein | Nein | Ohne | Auf dieser Registerkarte werden Ereignisse angezeigt, die Sie für den Knoten
definiert haben. Standardmäßig sind für keinen Knoten in einem Nachrichtenfluss
Überwachungsereignisse definiert. Über Hinzufügen,
Bearbeiten und Löschen können Sie
Überwachungsereignisse für den Knoten erstellen, ändern oder löschen (Details siehe
Überwachungsereignisquellen mithilfe von Überwachungseigenschaften konfigurieren). Sie können hier angezeigte Ereignisse aktivieren oder inaktivieren, indem Sie das Kontrollkästchen Aktiviert aktivieren oder inaktivieren. |