WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

DECLARE-Anweisung

Mit der DECLARE-Anweisung definieren Sie eine Variable, ihren Datentyp und - optional - ihren Anfangswert.

Mit der DECLARE-Anweisung können drei Arten von Variablen definiert werden:
  • Extern
  • Normal
  • Gemeinsam
Weitere Informationen hierzu finden Sie unter ESQL-Variablen.

Syntax

Syntaxdiagramm lesenSyntaxdiagramm überspringen
            .-<<-,-<<-.                         
            V         |                         
>>-DECLARE---- -Name--+--+------------------+------------------->
                         +-SHARED (1) (2)---+   
                         '-EXTERNAL (3) (4)-'   

>--+-+----------+--Datentyp (5)-+--+----------------------------+-><
   | '-CONSTANT-'               |  '-UrsprünglicherWertAusdruck-'   
   +-NAMESPACE (6)--------------+                                   
   '-NAME (6)-------------------'                                   

Anmerkungen:
  1. Das Schlüsselwort SHARED ist in einer Funktion oder Prozedur nicht gültig.
  2. SHARED kann nicht mit dem Datentyp REFERENCE TO angegeben werden. Verwenden Sie den Datentyp ROW, um eine Nachrichtenbaumstruktur in einer gemeinsamen Variablen zu speichern.
  3. EXTERNE Variablen sind implizit konstant.
  4. Geben Sie bei der Programmierung einer EXTERNEN Variablen einen Anfangswert.
  5. Wenn Sie den Datentyp REFERENCE TO angeben, müssen Sie den Anfangswert (einer Variablen oder einer Baumstruktur) in UrsprünglicherWertAusdruck angeben.
  6. Bei Verwendung der Klauseln NAMESPACE und NAME sind die Werte implizit konstant und vom Typ CHARACTER.

Über die folgenden Links erhalten Sie weitere Informationen zu diesen Parametern:

CONSTANT

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.

Datentyp

Folgende Werte können Sie als Datentyp angeben:
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL. Gilt nicht für externe Variablen (Schlüsselwort EXTERNAL angegeben).
  • CHAR (Zeichen)
  • CHARACTER
  • BLOB
  • BIT
  • ROW. Gilt nicht für externe Variablen (Schlüsselwort EXTERNAL angegeben).
  • REFERENCE TO. Dieser Wert gilt nicht für externe oder gemeinsame Variablen (Schlüsselwort EXTERNAL oder SHARED angegeben).

EXTERNAL

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

Wenn Sie beispielsweise
       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.

Folgende Arten von Brokerknoten können auf UDPs zugreifen:
  • Compute-Knoten
  • Datenbank-Knoten
  • Filter-Knoten
  • Von diesen Knotentypen abgeleitete Knoten

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.

NAME

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>

NAMESPACE

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;

SHARED

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

Gemeinsame Variablen bleiben für die Lebensdauer der folgenden Elemente bestehen:
  • Ausführungsgruppenprozess
  • Nachrichtenfluss bzw. Knoten oder
  • ESQL-Code des Knotens zur Deklaration der Variablen
(immer die kürzeste Lebensdauer). Sie werden initialisiert, wenn die erste Nachricht nach jeder Broker-Initialisierung den Fluss oder Knoten durchläuft.

Sie können keine gemeinsame Variabel innerhalb einer Funktion oder Prozedur definieren.

Die Vorteile gemeinsamer Variablen im Vergleich zu Datenbanken sind:
  • Der Schreibzugriff ist wesentlich schneller.
  • Der Lesezugriff auf kleine Datenstrukturen ist schneller.
  • Der Zugriff ist direkt; d. h. Sie benötigen keine Sonderfunktion (SELECT) für den Datenabruf oder Sonderanweisungen (INSERT, UPDATE oder DELETE), um Daten zu ändern. Sie können in Ausdrücken direkt auf die Daten verweisen.
Die Vorteile von Datenbanken im Vergleich zu gemeinsamen Variablen sind:
  • Die Daten sind persistent.
  • Die Daten werden transaktionsorientiert geändert.

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

Da gemeinsame Variablen (SHARED) in der ersten Nachricht einmal durch einen Knoten initialisiert werden, ist es möglich, eine SHARED ROW-Variable zu initialisieren, wenn die Ergebnisse einer Datenbankabfrage vorliegen. Der folgende Code zeigt an einem Beispiel, wie dies erreicht werden kann:
      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.

Einschränkung:

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.

Musterprogramm

Der folgende Mustercode zeigt die Vorgehensweise zur Verwendung sowohl gemeinsamer als auch externer Variablen:

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.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:30


ReferenzthemaReferenzthema | Version 8.0.0.5 | ak04980_