DatabaseInput ノードのサンプルについて

DatabaseInput ノードを使用して、データベースに保持されているアプリケーション・データの変更に迅速に反応するメッセージ・フローを作成できます。 このノードは、データベースから更新済みデータを直接取得します。

次の図は、イベントのシーケンスを示しています。アプリケーション・データ表に変更が導入されると、トリガーが起動され、変更された行を判別するのに必要な情報がイベント表に取り込まれます。

DatabaseInput ノード・デプロイメントの構造

このサンプルで使用されるアプリケーション・データ表の構造を、次の図に示します。

顧客と住所のレコードがあるサンプル・アプリケーション・データ表

例えば、顧客表に項目が挿入される場合、顧客表とイベント表の挿入行は、次の表のようになります。

PKEY FIRSTNAME LASTNAME CCODE
cust1 Joe Bloggs sales

イベント表

イベント表は、ユーザーが作成するデータベース表で、通常はイベントを格納するアプリケーション表と同じスキーマ内に存在します。 イベント表は、アプリケーション表に加えられた変更のタイプ、および変更された行の ID を記述します。以下の表は、イベント表の一般的な列のいくつか、およびそれが含まれる理由を示します。

列名 列の機能 サンプル値
EVENT_ID 必須。どのイベントが任意の指定時間に処理中であるかを識別する 1 次キー。 1
OBJECT_KEY 必須。アプリケーション表の変更された行の識別エレメント。通常は 1 次キー列の行のエレメントです。 cust1
OBJECT_VERB オプション。 実行された変更。通常は CREATE、UPDATE、または DELETE のいずれかです。このイベントは、DELETE イベントの識別に使用されます。これは、この場合では、フローのメッセージが作成されたときに、アプリケーション表に取得する行が含まれていないためです。 CREATE
OBJECT_NAME オプション。 変更されたアプリケーション表の名前。この列は、複数のアプリケーション表の更新をサポートするために DatabaseInput ノードを使用している場合に必要になります。 customer
EVENT_PRIORITY オプション。 イベントの優先度。例えば、優先度の高いトランザクションが、優先度の値の低いものより前に計算されるようにするために使用できます。 1
EVENT_TIME オプション。 操作が実行された時刻。通常、フローのロギングまたはパフォーマンス・モニターのために使用されます。 2010-10-19T17:10:00
EVENT_STATUS オプション。 イベントが既に処理されたかどうかを判別するために使用されます。イベントが削除されない、または処理後アーカイブされる場合に必要になります。 0
EVENT_COMMENT オプション。 フリー・フォーム・フィールド。例えば、イベントが処理後削除されなかった場合に、メッセージ処理の結果を保管するために使用できます。 処理時に例外が発生します。

注:

以下の例のイベント表は、3 つの列だけのきわめて基本的なものです。 アプリケーション表に追加すると、イベント表に以下の新しい行が追加されます。

EVENT_ID OBJECT_KEY OBJECT_VERB
1 cust1 Create

主キー cust1 を持つ新しい顧客が作成されました。DatabaseInput ノードは変更に反応し、メッセージ・フロー内の新しい行を処理します。

完了時の処理オプション

フローでイベントの処理が完了した場合、処理を完了するために以下の 3 つの方法のいずれかが使用されます。

  1. イベントを削除します。今後の参照のためにイベントを保管しない場合は、このオプションを使用します。
  2. 状況列を更新します。処理されたイベントの記録を保持する場合、イベント表に状況列 (EVENT_STATUS) があるときは、このオプションを使用します。
  3. イベントを別のイベント表にアーカイブします。イベントの記録を保持し、イベント表のサイズを最小に維持する場合は、このオプションを使用します。

このサンプルでは最初のオプションを使用し、処理が正常に完了したら、イベントを削除します。

メッセージ・フローとそれが実行する処理の詳細は、次のセクションで示します。

DatabaseInput メッセージ・フロー

DatabaseInput メッセージ・フローは、データベースの変更を取得し、それを出力メッセージ・フォーマットにマップして WebSphere MQ キューに入れます。

DatabaseInput メッセージ・フローの画面取り。

フローには、発生する可能性がある例外をキャッチするための 2 番目の MQOutput ノードが含まれています。 このアクションにより、誤った形式の ESQL の不必要な再試行や反復処理、またはデータベースや表の誤ったセットアップが回避されます。

テスト・スクリプト

このサンプルでは、3 つの SQL スクリプトが使用されます。

データベースに行を挿入するためのスクリプト

INSERT INTO DBINPUT_CUSTOMER
      VALUES ('cust1', 'Fred', 'Flintstone', 'Dev');

データベースの行を更新するためのスクリプト

UPDATE DBINPUT_CUSTOMER SET FIRSTNAME = 'Barney', LASTNAME = 'Rubble' WHERE PKEY='cust1';

データベースの行を削除するためのスクリプト

DELETE FROM DBINPUT_CUSTOMER WHERE PKEY='cust1';

サンプルのホームに戻る