Mit der DECLARE-Anweisung definieren Sie eine Variable, ihren Datentyp und - optional - ihren Anfangswert.
.-<<-,-<<-. V | >>-DECLARE---- -Name--+--+------------------+-------------------> +-SHARED (1) (2)---+ '-EXTERNAL (3) (4)-' >--+-+----------+--Datentyp (5)-+--+----------------------------+->< | '-CONSTANT-' | '-UrsprünglicherWertAusdruck-' +-NAMESPACE (6)--------------+ '-NAME (6)-------------------'
Über die folgenden Links erhalten Sie weitere Informationen zu diesen Parametern:
Definieren Sie eine Konstant mit CONSTANT. Konstanten innerhalb von Schemas, Modulen, Routinen oder zusammengesetzten Anweisungen können (sowohl implizit als auch explizit) deklariert werden. Das Verhalten dieser Fälle wird in der folgenden Liste dargestellt:
Eine Konstante oder Variable, die innerhalb einer Routine deklariert wird, überschreibt alle gleichnamigen Parameter sowie alle gleichnamigen Konstanten und Variablen, die in einem übergeordneten Modul oder Schema deklariert sind.
Mit EXTERNAL zeigen Sie eine benutzerdefinierte Eigenschaft (UDP) an. Eine UDP ist eine benutzerdefinierte Konstante, deren Anfangswert (optional über die DECLARE-Anweisung festgelegt) zur Entwicklungszeit vom Nachrichtenflusseditor geändert (siehe Abschnitt Nachrichtenflusseditor) bzw. zur Implementierungszeit vom Brokerarchiveditor überschrieben werden kann (siehe Abschnitt Brokerarchiveditor). Der Wert einer UDP kann nicht über ESQL geändert werden.
Wenn eine UDP in der DECLARE-Anweisung einen Anfangswert erhält, wird dieser Wert als Standardwert verwendet. Der in der DECLARE-Anweisung codierte Anfangswert wird jedoch durch jeden Wert überschrieben, der zur Entwicklungszeit im Nachrichtenflusseditor bzw. zur Implementierungszeit im Brokerarchiveditor angegeben wird (dies gilt sogar Zeichenfolgen mit Null-Länge).
DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';
codiert haben, wurde eine UDP-Variable von deployEnvironment mit dem Anfangswert Dev definiert.Fügen Sie die UDP mithilfe der UDP-Registerkarte im Nachrichtenflusseditor zum Nachrichtenfluss hinzu. Wenn Sie den Nachrichtenfluss der Brokerarchivdatei hinzufügen, dient die UDP als Attribut des Nachrichtenflusses. Das Attribut muss genauso bezeichnet werden wie die ESQL-Variable in der DECLARE-Anweisung (in diesem Fall deployEnvironment). Nur so kann sichergestellt werden, dass der festgelegte Anfangswert unverändert bleibt.
Alle UDPs in einem Nachrichtenfluss müssen einen Wert haben, der entweder in der DECLARE-Anweisung oder durch den Nachrichtenfluss- bzw. BAR-Editor vergeben wurde. Anderenfalls tritt bei Implementierungszeit ein Fehler auf. Nachdem die UDP deklariert wurde, kann ihr Wert zur Ausführungszeit von nachfolgenden ESQL-Anweisungen abgefragt werden.
Sie können eine UDP für einen untergeordneten Nachrichtenfluss definieren. UDPs sind global und gelten nicht für einen bestimmten untergeordneten Nachrichtenfluss. Wenn ein untergeordneter Nachrichtenfluss in einem Nachrichtenfluss wiederverwendet wird und die untergeordneten Nachrichtenflüsse identische UDPs haben, ist es nicht möglich, andere Werte für die UDPs anzugeben.
Der Vorteil von UDPs liegt darin, dass ihre Werte während der Implementierung geändert werden können. Wenn Sie z. B. mit den UDPs Konfigurationsdaten halten, können Sie bei der Implementierung einen Nachrichtenfluss für einen bestimmten Computer, eine Aufgabe oder Umgebung konfigurieren, ohne den Code auf Knotenebene ändern zu müssen. UDPs können auch zur Ausführungszeit über die CMP-API geändert werden.
UDPs können nur in Modulen oder Schemas deklariert werden; die DECLARE-Anweisung kann also nur auf der MODULE- oder SCHEMA-Ebene mit dem Schlüsselwort EXTERNAL verwendet werden. Wenn Sie eine DECLARE-Anweisung innerhalb von PROCEDURE oder FUNCTION mit dem Schlüsselwort EXTERNAL verwenden, wird bei der Implementierung des Nachrichtenflusses eine Ausnahme BIP2402E ausgegeben.
Legen Sie den Datentyp einer UDP mit Bedacht fest, da mit dem Typ CAST der Wert des angeforderten Datentyps geändert wird.
Eine Übersicht über benutzerdefinierte Eigenschafen finden Sie unter Benutzerdefinierte Eigenschaften in ESQL.
Beispiel 1:
DECLARE mycolor EXTERNAL CHARACTER 'blue';
Beispiel 2:
DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
Dabei ist TODAYSCOLOR eine benutzerdefinierte
Eigenschaft vom Typ CHARACTER und mit einem vom
Nachrichtenfluss-Editor festgelegten WERT.Mit NAME definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem eine Variable bekannt sein kann.
Beispiel 1:
-- Die nachfolgende Anweisung gibt Schema1 den Aliasnamen 'Joe'.
DECLARE Schema1 NAME 'Joe';
-- Die nachfolgende Anweisung erstellt ein Feld 'Joe'.
SET OutputRoot.XMLNS.Data.Schema1 = 42;
-- Die nachfolgende Anweisung fügt einen Wert in eine Tabelle namens Table1
-- im Schema 'Joe' ein.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42;
Beispiel 2:
-- Definieren Sie 'ColourElementName' im Modulbereich und setzen Sie es auf extern,
-- damit der Standardwert 'black' als UDP überschrieben werden kann
DECLARE ColourElementName EXTERNAL NAME 'black';
-- Verwenden Sie ColourElementName in einer Funktion
CREATE FIRSTCHILD OF OutputRoot.XMLNSC.TestCase.ColourElementName
Domain('XMLNSC')
NAME 'Node1' VALUE '1';
Wenn der Nachrichtenfluss, der Eigner ist, mit einer UDP mit der Bezeichnung ColourElementName vom Typ Zeichenfolge konfiguriert wurde, dem der Wert red zugeordnet wurde, wird die folgende Ausgabenachricht generiert:
<xml version="1.0"?>
<TestCase>
<red>
<Node1>1</Node1>
</red>
Mit NAMESPACE definieren Sie einen Aliasnamen (d. h. einen alternativen Namen), unter dem ein Namespace bekannt sein kann.
Beispiel:
Dies ist ein Beispiel für eine Namespacedeklaration, ihre Verwendung als BereichsId in einem Pfad und als Zeichenkonstante in einem Namespaceausdruck:
DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1';
-- Auf der rechten Seite der Zuweisung wird eine Namespacekonstante
-- als solche verwendet, während auf der linken Seite eine
-- als normale Konstante verwendet wird (d. h. in einem Ausdruck).
SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} =
InputRoot.XMLNS.prefixOne:PurchaseOrder;
Mit SHARED definieren Sie eine gemeinsame Variable. Gemeinsame Variablen gehören dem Nachrichtenfluss (wenn sie in einem Schema deklariert sind) oder Knoten (wenn sie in einem Modul deklariert sind), werden aber von den Instanzen des Flusses (Threads) gemeinsam verwendet. Außerhalb der Nachrichtenflussebene ist kein Variablentyp sichtbar. So ist es beispielsweise nicht möglich, Variablen unter mehreren Ausführungsgruppen gemeinsam zu nutzen.
Mithilfe von gemeinsamen Variablen kann ein Speichercache im Nachrichtenfluss implementiert werden (siehe Abschnitt Reaktionszeiten von Nachrichtenflüssen optimieren). Gemeinsame Variablen haben eine lange Lebensdauer und sind für mehrere Nachrichten sichtbar, die einen Fluss durchlaufen (siehe Abschnitt Langlebige Variablen).
Sie können keine gemeinsame Variabel innerhalb einer Funktion oder Prozedur definieren.
Diese Lese-/Schreib-Variablen sind ideal geeignet für Benutzer, die die Vorteile in Hinblick auf die Persistenz und Transaktionsorientiertheit von Datenbanken gerne gegen eine bessere Leistung eintauschen, da sie eine längere Lebensdauer als nur eine Nachricht und eine bessere Leistung als eine Datenbank aufweisen.
Da gemeinsame Variablen (SHARED) von mehreren zusätzlichen Instanzen aktualisiert werden können, müssen Sie sicherstellen, dass gemeinsame Variablen (SHARED) nicht geändert werden, da dies zu unerwarteten Ergebnissen führen kann (wenn die Variable beispielsweise als Zähler verwendet wird).
CREATE SCHEMA testSchema
DECLARE mySharedRow SHARED ROW;
DECLARE initialized SHARED BOOLEAN myINIT();
CREATE COMPUTE MODULE testModule
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot.XMLNSC.Top.TEST.Result1 VALUE = initialized;
SET OutputRoot.XMLNSC.Top.TEST.Result2 = mySharedRow;
END;
END MODULE;
CREATE FUNCTION myINIT( ) RETURNS BOOLEAN
BEGIN
LOG EVENT VALUES('myINIT CALLED');
SET mySharedRow.Top[] = SELECT A.MyCol1, A.MyCol2 from Database.Test AS A;
RETURN TRUE;
END;
Sie können verhindern, dass andere Instanzen die temporären Stufen der Daten sehen können, indem Sie eine BEGIN ATOMIC-Anweisung verwenden (Details hierzu erhalten Sie unter BEGIN ... END-Anweisung).
Ihr Benutzerprogramm kann mithilfe von gemeinsamen Zeilenvariablen eine effiziente Lese- oder Schreibkopie einer Eingabenachricht im Empfangsknoten erstellen, was die Handhabung großer Nachrichten vereinfacht.
Untergeordnete Baumstrukturen können nicht direkt aus einer gemensam genutzten Zeilenvariablen in eine andere gemeinsam genutzte Zeilenvariable kopiert werden. Untergeordnete Baumstrukturen lassen sich indirekt unter Verwendung einer Zeilenvariablen kopieren, die nicht gemeinsam genutzt wird. Skalare Werte, die aus einer gemeinsam genutzten Zeilenvariablen extrahiert wurden (mithilfe der FIELDVALUE-Funktion), können Sie in eine andere gemeinsam genutzte Zeilenvariable kopieren.
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.