SELECT ステートメントを使用して Oracle データベースのテーブルとビューを継続的にポーリングすることで、定期的なデータ変更メッセージを受信するように Oracle データベース アダプターを構成できます。 SELECT ステートメントは、アダプターが Oracle データベースをポーリングするために定期的に実行するポーリング ステートメントとして指定できます。 必要に応じて、データに変更がある場合にアダプターが実行するポーリング後の PL/SQL コード ブロックを指定することもできます。 このブロックは、多くの場合、ターゲット内のクエリ対象レコードのフィールドを更新したり、クエリされたレコードを別のテーブルまたはビューに移動したりするために使用されます。
これを有効にするには、Oracle データベース アダプターで特定のバインド プロパティを指定する必要があります。 接続 URI で PollingId プロパティを設定することで、POLLINGSTMT 操作のターゲット名前空間を変更することもできます。 詳細については、「Oracle Database でのポーリング ベースのデータ変更メッセージの受信のサポート」および「Oracle Database アダプターでのポーリング ベースのデータ変更メッセージの受信」を参照してください。 ポーリング操作用の SOAP メッセージの構造については、「ポーリング操作 2 の メッセージ スキーマ」を参照してください。
Oracle データベース アダプターのバインド プロパティを使用したポーリング操作の構成
次の表は、データ変更メッセージを受信するようにアダプターを構成するために使用する Oracle Database アダプターのバインド プロパティをまとめたものです。 BizTalk Server 管理コンソールで受信ポートを構成するときに、これらのバインド プロパティを指定する必要があります。
バインディングプロパティ | 説明 |
---|---|
InboundOperationType | ポーリングまたは通知の受信操作を行うかどうかを指定します。 既定値は ポーリングです。 |
ポーリングデータの利用可能声明 | ポーリングに使用できるデータがあるかどうかを判断するためにアダプターが実行する SQL ステートメントを指定します。 レコードが使用可能な場合にのみ、 PollingStatement バインディング プロパティに指定した SELECT ステートメントが実行されます。 既定値は SELECT 1 FROM DUAL です。これは、ポーリング対象のテーブルにデータがあるかどうかに関係なく、アダプターがポーリングを続行する必要があることを意味します。 |
PollingInterval | Oracle データベース アダプターが PolledDataAvailableStatement バインディング プロパティに指定されたステートメントを実行する間隔を秒単位で指定します。 既定値は 500 秒です。 ポーリング間隔は、連続するポーリング間の時間間隔を決定します。 ステートメントが指定された期間内に実行された場合、アダプターはその間隔の残りの時間スリープ状態になります。 |
PollingStatement | ポーリング ステートメントを指定します。 SELECT ステートメントを使用してポーリングするには、このバインド プロパティに SELECT ステートメントを指定する必要があります。 既定値は null です。 ポーリングを有効にするには、 PollingStatement バインド プロパティの値を指定する必要があります。 ポーリング ステートメントは、 PolledDataAvailableStatement バインディング プロパティによって決定されるポーリングに使用できるデータがある場合にのみ実行されます。 |
PollingAction | ポーリング操作のアクションを指定します。 アダプター サービス アドインを使用して、操作に対して生成したメタデータから、特定の操作のポーリング アクションを決定できます。 |
投票後声明 | PollingStatement バインディング プロパティで指定されたステートメントの実行後に実行されるステートメント ブロックを指定します。 |
PollWhileDataFound | ポーリング対象のテーブルでデータが使用可能な場合に、Oracle Database アダプターがポーリング間隔を無視し、ポーリング ステートメントを継続的に実行するかどうかを指定します。 テーブルにデータが存在しない場合、アダプターは、指定されたポーリング間隔でポーリング ステートメントを実行するように戻ります。 既定値は false です。 |
これらのプロパティの詳細については、「 Oracle Database アダプターのバインド プロパティの読み取り」を参照してください。 Oracle データベース アダプターを使用して Oracle データベースをポーリングする方法の詳細については、詳細を参照してください。
このトピックがポーリングを説明する方法
このトピックでは、Oracle データベース アダプターが SELECT ステートメントを使用したデータ変更メッセージの受信をサポートする方法を示すために、PollingStatement バインド プロパティを次に設定して BizTalk プロジェクトを作成し、POLLINGSTMT 操作のスキーマを生成します。
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
ACCOUNTACTIVITY テーブルは、サンプルで提供されている SQL スクリプトを実行してデータベースにこれらのオブジェクトを作成するときに作成されます。
注
このトピックのオーケストレーションでは、ACCOUNTACTIVITY テーブルをポーリングします。これは、サンプルで提供されるスクリプトを実行して作成されたベース データベース テーブルです。 他のテーブルをポーリングするには、このトピックの説明と同様の手順を実行する必要があります。
ポーリング操作を示すために、次の操作を行います。
PolledDataAvailableStatement バインディング プロパティの SELECT ステートメントを指定して、ポーリング対象のテーブル (ACCOUNTACTIVITY) にデータが含まれている場所を決定します。 この例では、このバインド プロパティを次のように設定できます。
SELECT COUNT (*) FROM ACCOUNTACTIVITY
これにより、ACCOUNTACTIVITY テーブルに一部のレコードがある場合にのみ、アダプターでポーリング ステートメントが実行されます。
PollingStatement バインディング プロパティに前述の SELECT ステートメントを指定します。 このステートメントは、ACCOUNTACTIVITY テーブル内のすべての行を取得します。
PostPollStatement バインディング プロパティの一部として PL/SQL ブロックを実行します。 このステートメントは、ACCOUNTACTIVITY テーブルからデータベース内の別のテーブルにすべてのデータを移動します。 これが発生すると、次に PollingStatement に指定されたステートメントが実行されると、データはフェッチされません。
ACCOUNTACTIVITY テーブルにさらにデータが追加されるまで、ポーリング メッセージは取得されません。 そのため、ACCOUNTACTIVITY テーブルに新しいレコードを再入力する必要があります。 これを行うには、サンプルで提供されているmore_activity_data.sql スクリプトを実行します。 このスクリプトを実行すると、次のポーリング操作によって、テーブルに挿入された新しいレコードが取得されます。
Oracle からデータ変更メッセージを受信する方法
BizTalk Server で Oracle データベース アダプターを使用して Oracle データベースに対する操作を実行するには、Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素で説明されている次の手順を実行します。 SELECT ステートメントを使用して Oracle データベースをポーリングするようにアダプターを構成するには、次のタスクを実行します。
BizTalk プロジェクトを作成し、ポーリングするテーブルの POLLINGSTMT 操作のスキーマを生成します。
Oracle データベースからメッセージを受信するためのメッセージを BizTalk プロジェクトに作成します。
Oracle からメッセージを受信し、フォルダーに保存するオーケストレーションを作成します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
Von Bedeutung
受信ポーリングのシナリオでは、常に一方向の受信ポートを構成する必要があります。 双方向の受信ポートは、受信操作ではサポートされていません。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する手順について説明します。
スキーマの生成
POLLINGSTMT 操作のスキーマを生成する必要があります。 Consume Adapter Service アドインを使用してスキーマを生成するときに、次のタスクを実行します。
スキーマの生成中に PollingStatement バインディング プロパティの値を指定します。 このバインディング プロパティの詳細については、「 Oracle Database アダプターのバインド プロパティの読み取り」を参照してください。 たとえば、ポーリング ステートメントとして次を指定します。
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
コントラクトの種類として サービス (受信操作) を選択します。
POLLINGSTMT 操作のスキーマを生成します。
スキーマを生成する方法の詳細については、「 Oracle Database 操作のメタデータの参照、検索、および取得」を参照してください。
メッセージとメッセージの種類の定義
前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 スキーマが生成されたら、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。
このトピックでは、Oracle からメッセージを受信するメッセージを 1 つ作成する必要があります。
メッセージを作成し、スキーマにリンクするには、次の手順を実行します。
メッセージを作成し、スキーマにリンクするには
BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーで、BizTalk プロジェクト名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。
まだ開いていない場合は、BizTalk プロジェクトのオーケストレーション ビュー ウィンドウを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントし、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
これを使用する 目的 識別子 「Receive」と入力します。 メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 TablePolling.OracleDBBinding を選択します。 TablePolling は BizTalk プロジェクトの名前です。 OracleDBBindingSchema は、ACCOUNTACTIVITY テーブルに対する POLLINGSTMT 操作に対して生成される応答スキーマです。
大事な ポーリングは一方向の操作であるため、アダプターによって生成されるスキーマには応答ノードが含まれていないため、スキーマにはルート ノードが 1 つだけ存在します。 メッセージの種類にこのようなスキーマを使用する場合は、生成されたスキーマのファイル名でスキーマを識別する必要があります。
たとえば、双方向操作のスキーマを作成する場合、名前OracleDBBindingSchema
を持つスキーマ ファイル内のノードは、"要求" と "応答" のようになります。 要求スキーマにマップされるメッセージをオーケストレーションで作成する場合は、OracleDBBindingSchema.Request
を探して一覧内のスキーマを識別できます。 ただし、ポーリング操作の場合、ノードが "POLLINGSTMT" のみであるため、1 つのノードを持つスキーマが <schemafilename>.< として一覧表示されないため、マップするスキーマを識別するのは簡単ではありません。rootnodename>。 代わりに、このようなスキーマはファイル名のみで一覧表示されます。 このような場合、スキーマを識別する唯一の方法は、OracleDBBindingSchema などのスキーマ ファイル名です。
オーケストレーションの設定
Oracle からポーリング ベースのデータ変更メッセージを受信するために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、アダプターは PollingStatement バインディング プロパティに指定された SELECT ステートメントを実行して応答を受け取ります。 SELECT ステートメントの応答メッセージは FILE の場所に保存されます。 Oracle データベースをポーリングするための一般的なオーケストレーションには、次のものが含まれます。
Oracle からメッセージを受信し、それぞれ FILE ポートに送信する図形を受信および送信します。
Oracle データベースからメッセージを受信する一方向の受信ポート。
Von Bedeutung
受信ポーリングのシナリオでは、常に一方向の受信ポートを構成する必要があります。 双方向の受信ポートは、受信操作ではサポートされていません。
Oracle データベースからポーリング応答を送信する一方向送信ポート。
サンプル オーケストレーションは次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。
形 | 図形の種類 | 特性 |
---|---|---|
メッセージ受信 | 受け取る | - 名前を ReceiveMessage に設定する - アクティブ化を True に設定する |
メッセージを保存 | 送信 | - 名前を SaveMessage に設定する |
ポートの追加
論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
港 / ポート | 特性 |
---|---|
OracleReceivePort | - 識別子を OracleReceivePort に設定する - 型を OracleReceivePortType に設定する - 通信パターンを一方向に設定する - 通信方向を受信に設定する |
SaveMessagePort | - 識別子を SaveMessagePort に設定する - 型を SaveMessagePortType に設定する - 通信パターンを一方向に設定する - 通信方向を送信に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。
形 | 特性 |
---|---|
メッセージ受信 | - メッセージを受信に設定する - 操作を OracleReceivePort.Polling.Request に設定する |
メッセージを保存 | - メッセージを受信に設定する - SaveMessagePort.Polling.Request に操作を設定する |
これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。
BizTalk ソリューションをビルドし、BizTalk Server に展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。
BizTalk アプリケーションの構成
BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが BizTalk Server 管理コンソールの [ オーケストレーション ] ウィンドウの下に一覧表示されます。 BizTalk Server 管理コンソールを使用してアプリケーションを構成する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。
アプリケーションの構成には、次の作業が含まれます。
アプリケーションのホストの選択。
オーケストレーションで作成したポートを BizTalk Server 管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。
ハード ディスク上の場所と、BizTalk オーケストレーションが Oracle からメッセージを削除する対応する FILE ポートを定義します。 これらのメッセージは、受信ポートに指定したポーリング ステートメントに応答します。
物理 WCF-Custom または一方向の受信ポート WCF-OracleDB 定義します。 このポートは Oracle データベースをポーリングします。 受信ポートを作成する方法については、「 Oracle データベース アダプターへの物理ポート バインドを手動で構成する」を参照してください。 受信ポートには、次のバインド プロパティを指定してください。
バインディングプロパティ 価値 InboundOperationType これをポーリングに設定 します。 ポーリングデータの利用可能声明 この例では、このバインド プロパティを次の値に設定します。
SELECT COUNT (*) FROM ACCOUNTACTIVITY
これにより、ACCOUNTACTIVITY テーブルに一部のレコードがある場合にのみ、アダプターでポーリング ステートメントが実行されます。PollingStatement このバインディング プロパティには、ACCOUNTACTIVITY テーブルからすべてのレコードを取得する SELECT ステートメントを指定します。 この例では、このバインド プロパティを次の値に設定します。
SELECT * FROM ACCOUNTACTIVITY FOR UPDATE
投票後声明 すべてのデータを ACCOUNTACTIVITY テーブルから別のテーブルに移動するには、ポーリング後のステートメントを指定します。 この例では、このバインド プロパティを次の値に設定します。
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
さまざまなバインド プロパティの詳細については、「 Oracle Database アダプターのバインド プロパティの読み取り」を参照してください。
注
Oracle Database アダプターを使用して受信操作を実行するときに、トランザクション分離レベルとトランザクション タイムアウトを構成することをお勧めします。 これを行うには、受信ポートの構成中にサービスの動作を追加します。 サービスの動作を追加する方法については、「 トランザクション分離レベルとトランザクション タイムアウトの構成」を参照してください。
アプリケーションの起動
Oracle データベースをポーリングするには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。
この段階で、次のことを確認します。
WCF-Custom または WCF-OracleDB 一方向の受信ポートは、PollingStatement バインディング プロパティに指定された SELECT ステートメントを使用して Oracle をポーリングしている状態で動作しています。
Oracle データベースからメッセージを受信する FILE 送信ポートが実行されています。
操作の BizTalk オーケストレーションが実行されています。
操作の実行
アプリケーションを実行すると、同じ順序で次の一連のアクションが実行されます。
アダプターは PolledDataAvailableStatement を実行し、 PollingStatement バインディング プロパティに指定されたステートメントを実行するアダプターを示す正の値を返します。
アダプターは 、PollingStatement バインド プロパティの SELECT ステートメントを実行し、ACCOUNTACTIVITY テーブル内のすべての行を返します。 Oracle データベースからの応答は次のようになります。
<?xml version="1.0" encoding="utf-8" ?> <POLLINGSTMT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/POLLINGSTMT"> <POLLINGSTMTRECORD> <POLLINGSTMTRECORD> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-08-03T20:10:28</TRANSDATE> <PROCESSED>n</PROCESSED> <POLLINGSTMTRECORD> <POLLINGSTMTRECORD> ...... ...... </POLLINGSTMTRECORD> ...... ...... </POLLINGSTMTRECORD> </POLLINGSTMT>
アダプターは、すべてのデータを ACCOUNTACTIVITY テーブルから別のテーブルに移動する、ポーリング後のステートメントを実行します。
ポーリング間隔の後、アダプターは 再度 PolledDataAvailableStatement を実行します。 ACCOUNTACTIVITY テーブルにはレコードがないため、 PolledDataAvailableStatement は正の値を返さないため、アダプターは PollingStatement バインディング プロパティに指定されたステートメントを実行しません。 その結果、アダプター クライアントはポーリング メッセージを受け取りません。
一部のレコードが ACCOUNTACTIVITY テーブルに明示的に挿入されるまで、アダプター クライアントはそれ以上ポーリング メッセージを取得しません。 さらにレコードを挿入するには、サンプルで提供されているmore_activity_data.sql スクリプトを実行します。 このスクリプトを実行すると、次 に PolledDataAvailableStatement が実行されると、正の値が返されます。 その結果、アダプターはポーリング ステートメントを実行し、アダプター クライアントは再度ポーリング メッセージを受信します。
注
Oracle データベース アダプターは、BizTalk Server 管理コンソールから受信ポートを明示的に無効にするまでポーリングを続行します。
考えられる例外
BizTalk Server を使用して Oracle データベースでポーリング クエリを実行しているときに発生する可能性がある例外については、「 Oracle データベース アダプターでの例外とエラー処理」を参照してください。
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、構成設定をバインド ファイルと呼ばれる XML ファイルにエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートと受信ポートを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「 Oracle データベース アダプターのバインドを再利用する」を参照してください。