WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

DECLARE ステートメント

DECLARE ステートメントを使用して、変数とそのデータ・タイプ、およびオプションで初期値を定義します。

DECLARE ステートメントでは、以下の 3 つのタイプの変数を定義できます。
  • 外部
  • 通常
  • 共用
詳細については、ESQL 変数を参照してください。

構文

構文図を読む構文図をスキップする
            .-<<-,-<<-.                         
            V         |                         
>>-DECLARE---- -Name -+--+------------------+------------------->
                         +-SHARED (1) (2)---+   
                         '-EXTERNAL (3) (4)-'   

>--+-+----------+--DataType (5)-+--+------------------------+--><
   | '-CONSTANT-'               |  '-InitialValueExpression-'   
   +-NAMESPACE (6)--------------+                               
   '-NAME (6)-------------------'                               

注:
  1. SHARED キーワードは、関数やプロシージャーでは無効です。
  2. DataType が REFERENCE TO の場合、SHARED を指定することはできません。 共用変数内にメッセージ・ツリーを保管するには、ROW データ・タイプを使用してください。
  3. EXTERNAL 変数は暗黙的に定数です。
  4. EXTERNAL 変数に初期値を指定することは適切なプログラミング手法です。
  5. DataType を REFERENCE TO と指定した場合、InitialValueExpression の中で (変数またはツリーの) 初期値を指定する必要があります。
  6. NAMESPACE および NAME 文節が使用された場合、値は暗黙的に定数かつタイプ CHARACTER です。

以下のリンク先には、これらすべてのパラメーターについての詳細情報が掲載されています。

CONSTANT

定数を定義するには、CONSTANT を使用します。 定数はスキーマ、モジュール、ルーチン、または複合ステートメント (暗黙および明示の両方) 内で宣言できます。 それぞれの場合の動作は、以下のリストに示されています。

ルーチン内で宣言された定数または変数は、含まれているモジュールおよびスキーマ内で宣言されているのと同じ名前のすべてのパラメーター、および同じ名前のすべての定数および変数をオーバーレイします。

DataType

DataType に指定できる値は以下のとおりです。
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL。 この値は外部変数 (EXTERNAL キーワードが指定されている) には適用されません。
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW。 この値は外部変数 (EXTERNAL キーワードが指定されている) には適用されません。
  • REFERENCE TO。 この値は外部変数または共用変数 (EXTERNAL または SHARED キーワードが指定されている) には適用されません。

EXTERNAL

ユーザー定義のプロパティー (UDP) を指示するには、EXTERNAL を使用します。 UDP とは、メッセージ・フロー・エディターによって設計時に初期値を変更したり (メッセージ・フロー・エディターを参照)、ブローカー・アーカイブ・エディターによってデプロイメント時に初期値をオーバーライドしたりできる (ブローカー・アーカイブ・エディターを参照)、ユーザー定義の定数のことで、その初期値はオプションで DECLARE ステートメントによって設定されます。 ESQL によって UDP の値を変更することはできません。

DECLARE ステートメントで UDP の初期値を指定すると、この値がデフォルトになります。 しかし、設計時にメッセージ・フロー・エディター内で指定した値や、デプロイメント時にブローカー・アーカイブ・エディター内で指定した値は (長さゼロのストリングであっても)、DECLARE ステートメントでコード化された初期値をオーバーライドします。

例えば、以下のようにコーディングするとします。
       DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';
deployEnvironment の UDP 変数を、初期値 Dev で定義しています。

メッセージ・フロー・エディターの「UDP」タブを使用して、UDP をメッセージ・フローに追加します。 フローを BAR ファイルに追加する場合、UDP はフローの属性となります。設定した初期値が変更されないようにするために、属性には DECLARE ステートメントの ESQL 変数と同じ名前にする必要があります (この場合は deployEnvironment)。

メッセージ・フロー中のすべての UDP に、DECLARE ステートメントで指定された値か、メッセージ・フロー・エディターまたはブローカー・アーカイブ・エディターによって指定された値がなければなりません。ない場合は、デプロイメント時にエラーが発生します。 実行時 (UDP は宣言済み) に、後続の ESQL ステートメントによってその値を照会できます。

サブフローの UDP を定義することもできます。 ただし、UDP はグローバル・スコープなので、特定のサブフローに限定されるわけではありません。 メッセージ・フローの中でサブフローを再利用する場合に、それらのサブフローに同じ UDP があれば、それらの UDP を別の値に設定することはできません。

UDP の利点は、デプロイメント時に値を変更できることです。 例えば、UDP を使用して構成データを保持している場合は、デプロイメント時にノード・レベルでコードに変更を加えずに特定のコンピューター、タスク、または環境用にメッセージ・フローを構成できることになります。 CMP API を使用して実行時に UDP を変更することもできます。

モジュールまたはスキーマの中でのみ、UDP を宣言することができます。 つまり、EXTERNAL キーワードを含む DECLARE ステートメントは MODULE レベルか SCHEMA レベルでしか使用できません。 PROCEDURE や FUNCTION の中で EXTERNAL キーワードを含む DECLARE ステートメントを使用すると、メッセージ・フローをデプロイする際に BIP2402E 例外が発生します。

以下のタイプのブローカー・ノードが UDP にアクセスできます。
  • Compute ノード
  • Database ノード
  • Filter ノード
  • これらのノード・タイプから派生したノード

UDP のデータ・タイプを指定する際には注意が必要です。CAST が使用され、要求された DataType の値が変更されるからです。

UDP の概要については、ESQL でのユーザー定義プロパティーを参照してください。

例 1:

DECLARE mycolor EXTERNAL CHARACTER 'blue'; 

例 2:

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
TODAYSCOLOR は、TYPECHARACTER で、VALUE がメッセージ・フロー・エディターによって設定されたユーザー定義プロパティーです。

NAME

変数の認識に使用される別名 (別の名前) を定義するには、NAME を使用します。

例 1:

-- The following statement gives Schema1 an alias of 'Joe'.
DECLARE Schema1 NAME 'Joe';  
-- The following statement produces a field called 'Joe'.
SET OutputRoot.XMLNS.Data.Schema1 = 42; 
 
-- The following statement inserts a value into a table called Table1 
-- in the schema called 'Joe'.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42; 

例 2:

-- At Module scope define ColourElementName and set it external
-- so that its default value of 'black' can be overridden as a UDP  
DECLARE ColourElementName EXTERNAL NAME 'black';


-- Use the ColourElementName in a function
CREATE FIRSTCHILD OF OutputRoot.XMLNSC.TestCase.ColourElementName
                     Domain('XMLNSC') 
                     NAME 'Node1' VALUE '1';

これを所有するメッセージ・フローが、値 red を持つ String タイプの ColourElementName という UDP で構成されている場合、以下のような出力メッセージが生成されます。

<xml version="1.0"?>
<TestCase>
  <red>
    <Node1>1</Node1>
  </red>

NAMESPACE

ネーム・スペースの認識に使用される別名 (別の名前) を定義するには、NAMESPACE を使用します。

例:

次の例は、ネーム・スペース宣言をパス内の SpaceId として、およびネーム・スペース式内の文字定数として使用した場合を例示しています。

       DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1';

       -- On the right hand side of the assignment a namespace constant
       -- is being used as such while, on the left hand side, one is 
       -- being used as an ordinary constant (that is, in an expression).

       SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} = 
                      InputRoot.XMLNS.prefixOne:PurchaseOrder;

SHARED

共用変数を定義するには、SHARED を使用します。 共用変数は、フロー (スキーマ中で宣言されている場合) またはノード (モジュール中で宣言されている場合) には専用ですが、フローのインスタンス (スレッド) の間では共用されます。 フロー・レベルを超えて見えるタイプの変数はありません。例えば、実行グループ間で変数を共用することはできません。

共用変数は、メッセージ・フローでメモリー内のキャッシュをインプリメントするために使用できます。メッセージ・フロー応答時間の最適化を参照してください。 共用変数の存続時間は長く、フローを通過する複数のメッセージに可視になります。存続期間の長い変数を参照してください。

共用変数の存続時間は以下のとおりです。
  • 実行グループ・プロセス
  • フローまたはノード
  • 変数を宣言するノードの SQL コード
(いずれか短い方)。 共用変数は、個々のブローカーの始動後に最初のメッセージがフローまたはノードを移動する際に初期化されます。

関数やプロシージャー内には共用変数を定義できません。

データベースと比較した共用変数の利点は以下のとおりです。
  • 書き込みアクセスが高速です。
  • 小さなデータ構造に対する読み取りアクセスが高速です。
  • アクセスは直接行われます。つまり、特殊な関数 (SELECT) を使用してデータを取得したり、特殊なステートメント (INSERT、UPDATE、または DELETE) を使用してデータに変更を加える必要がありません。 式の中のデータを直接参照できます。
共用変数と比較したデータベースの利点は以下のとおりです。
  • データが永続的です。
  • データがトランザクションとして変更されます。

ユーザーが、データベースの永続性とトランザクション性の利点を犠牲にしてでもパフォーマンスを向上させようと思っている場合、これらの読み取り書き込み変数は理想的です。これらの読み取り/書き込み変数は存続時間が 1 つのメッセージよりも長く、パフォーマンスがデータベースよりも高いからです。

共用変数は複数の追加インスタンスによって更新できるため、共用変数を変更することがないようにしてください。これが行われると、例えば変数がカウンターとして使用されている場合などに、予期せぬ結果を招く可能性があります。

SHARED 変数は、ノードを経由した最初のメッセージで一度初期化されるため、データベース照会からの結果を使用して SHARED ROW 変数を一度初期化することができます。 以下のコードは、これを行う方法を例示しています。
      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; 

BEGIN ATOMIC 構造体を使用することによって、データの中間段階が他のインスタンスから見えないようにすることができます。 BEGIN ... END ステートメントを参照してください。

ユーザー・プログラムは、共用行変数を使用して、入力ノードの入力メッセージの効果的な読み取り、書き込み、またはコピーを行うことができます。これにより、大容量メッセージの処理技法が簡略化されます。

制約事項:

サブツリーは 1 つの共用行変数から別の共用行変数に直接コピーできません。 サブツリーは非共用行変数を使用して間接的にコピーできます。 1 つの共用行変数から (FIELDVALUE 関数を使用して) 抽出されたスカラー値は、別の共用行変数にコピーできます。

サンプル・プログラム

以下のサンプルは、共用変数と外部変数の両方の使用方法を示しています。

サンプルに関する情報は、WebSphere Message Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

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

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:21


参照トピック参照トピック | バージョン 8.0.0.5 | ak04980_