BAM インターセプターについて
概要
BAM インターセプターは、アプリケーションをインストルメント化して対象のデータを取得するためのオブジェクトです。 次の図は、BAM インターセプターの役割と、他の BAM コンポーネントとのやり取りを示しています。
BAM インターセプター
ユーザーは、対象のデータが発生するアプリケーションのステップごとにインターセプター OnStep を呼び出し、ステップの識別子を指定して、アプリケーションで使用するデータや任意のオブジェクトを指定します。
コールバックが発生した場合に現在のステップ ID およびデータ オブジェクトをコールバック プロシージャで取得するためのコールバック関数を実装する必要があります。 BAM インターセプターの役割は基本的に、データ オブジェクトをコールバック関数に渡すという単純なものです。 データを抽出する実際のロジックはアプリケーション内に存在しています。 たとえば、データが XML メッセージの形式である場合、コールバックは XPath を使用します。 XPath の詳細については、「 メッセージの割り当てでの XPath の使用」を参照してください。
BAM インターセプターは、構成に基づいて各ステップでどのデータを要求するかを判断します。この構成はプログラムで作成できます。 次に BAM インターセプターは取得したデータを使用して DirectEventStream または BufferedEventStream を呼び出します。これらのクラスを保持し、引数として OnStep インターセプターに渡す必要があります。
ステップごとにインターセプターを呼び出しても、リソースを消耗することはありません。 このステップでインターセプターを呼び出し、何も登録しなければ、インターセプターは直ちに戻ります。 つまり、ディスク操作、トランザクション、メモリの割り当てが行われないため、パフォーマンスは影響をほとんど受けません。 また、必要に応じて BAM が使用するためのデータを抽出することもできます。 データの抽出とデータの可用性に関する手順のパフォーマンスへの影響は、 の IBAMDataExtractor Interface
実装によって異なります。
次のコード例は、構成時および実行時のインターセプターの使用例を示しています。
構成時
次のコードは、アプリケーションの recvPO ステップでインターセプターを停止し、Customer Name および Customer SSN を要求するようにインターセプターを構成する方法を示しています。
ActivityInterceptorConfiguration cfg= new ActivityInterceptorConfiguration ("PurchaseOrder");
...
cfg.RegisterDataExtraction("CustomerName",recvPO,XpathName);
cfg.RegisterDataExtraction("CustomerSSN",recvPO,XpathSSN);
...
BAMInterceptor interceptor=new BAMInterceptor();
cfg.UpdateInterceptor(interceptor);
...
// The interceptor instance is ready.
インターセプター インスタンスを一度作成すると、インスタンスを保存して後続の実行時に使用できます。
BAM で使用するデータやマイルストーンについて、さまざまな環境設定を表すインターセプターをあらかじめ作成しておくことができます。 最高のパフォーマンスを得るには、BinaryFormatter クラスを使用してインターセプター インスタンスをシリアル化してください。
実行時
実稼働環境で実行時にインターセプターを使用するには、次のコードを使用します。
// Deserialize the Interceptor that was prepared before
...
es=new DirectEventStream(...)
...
Interceptor.OnStep(recvPO, data1, es, callback)
...
Interceptor.OnStep(approvePO, data2, es, callback)
...
各値の説明:
recvPO と approvePO は、アプリケーションの手順を識別するために使用する任意のオブジェクトです。
data1 と data2 は、その時点で持っている任意のオブジェクトであり、たとえば、発注書の XML ドキュメントなど、興味深いデータを含む可能性があります。
es は、パフォーマンス要件に応じて、DirectEventStream または BufferedEvent ストリームです。
callback は の実装です
IBAMDataExtractor Interface
。SDK サンプルの BAM API (BizTalk Server サンプル) では、構成ツールとランタイム アプリケーションの例の両方を含むインターセプターの使用を示します。
BizTalk オーケストレーション エンジンはインターセプトに対応します。これにより、実行時に追跡プロファイル エディターを使用して BAM 用に収集されるデータを変更できます。