Oracle Database のラージ オブジェクト データ型を持つテーブルに対して操作を実行する

Microsoft BizTalk Adapter for Oracle Database では、Oracle ラージ オブジェクト (LOB) データ型がサポートされています。

Note

BizTalk Serverで Oracle Database アダプターを使用する場合、ReadLOB 操作では Oracle データベースからの LOB 型データのストリーミングはサポートされません。 BizTalk Serverを使用して Oracle データベースから LOB データをストリーミングするには、代わりに Select 操作を使用する必要があります。 ストリーミングの詳細については、「 Oracle Database での LOB データ型のストリーミング サポート」を参照してください。 また、ReadLOB 操作に対する Oracle データベースからの応答は、WSDL に対する検証に失敗します。 エラーを回避する方法については、「 操作上の問題のトラブルシューティング」を参照してください。

LOB データに対して操作を実行する方法

BizTalk Serverで Oracle Database アダプターを使用して Oracle データベースに対して操作を実行するには、「Building blocks to develop BizTalk Applications with Oracle Database」で説明されている手続き型タスクが含まれます。 Oracle データベース内のテーブルに対して ReadLOB 操作と UpdateLOB 操作の両方を呼び出すには、次のタスクを実行します。

  1. BizTalk プロジェクトを作成し、ReadLOB 操作と UpdateLOB 操作の両方のスキーマを生成します。

  2. Oracle データベースからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。 両方の操作の送信要求と受信応答の両方に対してメッセージを作成する必要があります。

  3. ReadLOB 操作と UpdateLOB 操作の両方を呼び出すオーケストレーションを作成します。

  4. BizTalk プロジェクトをビルドして展開します。

  5. 物理送受信ポートを作成して BizTalk アプリケーションを構成します。

  6. BizTalk アプリケーションを起動します。

    このトピックでは、これらのタスクを実行する手順について説明します。

このトピックに基づくサンプル

このトピックに基づくサンプル Operate_LOBは、BizTalk アダプター パックでも提供されています。 詳細については、「 アダプターのサンプル」を参照してください。

スキーマの生成

このトピックでは、ReadLOB 操作と UpdateLOB 操作を実行する方法を示すために、Oracle データベースの SCOTT スキーマの下にある CUSTOMER テーブルに対して表示されるこれらの操作のメタデータを生成します。 このテーブルは、サンプルで提供されている SQL スクリプトを実行して、SCOTT スキーマの下に作成されます。 サンプルの詳細については、「 スキーマ サンプル」を参照してください。

メッセージとメッセージの種類の定義

前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 最初の手順で生成したスキーマを、BizTalk プロジェクトの [オーケストレーション ビュー] ウィンドウからメッセージにリンクする必要があります。

このトピックでは、2 つの要求/応答メッセージ セットを作成する必要があります。1 つは ReadLOB 操作の要求/応答セット、2 番目の要求応答セットは UpdateLOB 操作用です。

メッセージを作成し、スキーマにリンクするには、次の手順を実行します。

  1. BizTalk プロジェクトの [オーケストレーションの種類] ウィンドウを開きます (まだ表示されていない場合)。 これを行うには、[ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。

  2. [オーケストレーション ビュー] で、[ メッセージ] を右クリックし、[ 新しいメッセージ] をクリックします。

  3. 新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。

  4. Message_1[プロパティ] ウィンドウで、次の操作を行います。

    プロパティ 目的
    識別子 Request」と入力します
    メッセージ型 ドロップダウン リストから [スキーマ] を展開し、[Operate_LOB] を選択します。OracleDBBindingSchema.ReadLOBここで、Operate_LOBは BizTalk プロジェクトの名前です。 OracleDBBindingSchema は、CUSTOMER テーブルに対する ReadLOB および UpdateLOB 操作用に生成されるスキーマです。
  5. 前の手順を繰り返して、さらに 3 つのメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。

    識別子を に設定する メッセージの種類を に設定する
    Response Operate_LOB。OracleDBBindingSchema.ReadLOBResponse
    Request2 Operate_LOB。OracleDBBindingSchema.UpdateLOB
    Response2 Operate_LOB。OracleDBBindingSchema.UpdateLOBResponse

オーケストレーションの設定

テーブルに対して ReadLOB および UpdateLOB 操作を呼び出すためにBizTalk Serverを使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、ReadLOB 操作用と UpdateLOB 操作用の 2 つの要求メッセージを削除します。 これらのメッセージは受信場所にドロップされます。 Oracle Database アダプターはメッセージを使用し、ODP を介して Oracle データベースに渡します。 Oracle データベースからの応答は、別の場所に保存されます。

オーケストレーションは 2 つの要求を同時に選択するため、オーケストレーションに Parallel Actions 図形を含める必要があります。 並列アクションごとに、Oracle データベースにメッセージを送信して応答を受信するには、送受信図形を含める必要があります。 ただし、両方の操作でメッセージの送受信に同じポートを使用できます。 ReadLOB 操作と UpdateLOB 操作を同時に実行するための一般的なオーケストレーションには、次のものが含まれます。

  • Oracle データベースにメッセージを送信し、応答を受信する図形を送受信します。

  • Oracle データベースに送信する要求メッセージを受信する一方向の受信ポート。

  • Oracle データベースに要求メッセージを送信し、応答を受信する双方向送信ポート。

  • Oracle データベースからフォルダーに応答を送信する一方向送信ポート。

    サンプル オーケストレーションは次のようになります。

    LOB データの読み取りと更新のためのオーケストレーション

メッセージ図形の追加

メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。 次の表に、並列アクションの 1 つに含める必要がある図形を示します。

図形 図形の種類 プロパティ
ReceiveMessage 受信 - 名前を ReceiveMessage に設定する
- アクティブ化True に設定する
SendMessage Send - 名前SendMessage に設定する
ReceiveResponse 受信 - 名前ReceiveResponse に設定する
- アクティブ化False に設定する
SendResponse Send - 名前SendResponse に設定する

次の表に、他の並列アクションに含める必要がある図形の一覧を示します。

図形 図形の種類 プロパティ
ReceiveMessage2 受信 - 名前を ReceiveMessage2 に設定する
- Activate をTrue に設定する
SendMessage2 Send - 名前を SendMessage2 に設定する
ReceiveResponse2 受信 - Name を ReceiveResponse2 に設定する
- Activate をFalse に設定する
SendResponse2 Send - 名前を SendResponse2 に設定する

ポートの追加

論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。

Port プロパティ
FileIn - 識別子FileIn に設定する
- Typeを FileInType に設定する
- 通信パターン一方向に設定する
- 受信する通信方向を設定する
LOBPort - 識別子LOBPort に設定する
- LOBPortType に設定する
- 通信パターンRequest-Response に設定する
- [通信の方向] を [送受信] に設定する
SaveResponse - 識別子SaveResponse に設定する
- TypeSaveResponseType に設定する
- 通信パターン一方向に設定する
- [通信の方向] を [送信] に設定する

これらのポートを使用して 2 つの要求メッセージと応答メッセージを処理するため、ポートごとに 2 つの操作を作成する必要があります。各操作は 1 つのメッセージの種類に対応します。 操作を作成するには、ポート図形を右クリックし、[ 新しい操作] を選択します。 各ポートの最初の操作に ReadLOB という名前を付け、各ポートの 2 番目の操作に UpdateLOB という名前を付けます

関連付けの使用

関連付けは、受信メッセージをオーケストレーションの適切なインスタンスに一致させるプロセスです。 オーケストレーションでは、オーバーロードごとに 1 つずつ、2 つの要求メッセージを削除します。 関連付けを使用して、要求メッセージを適切なオーケストレーションに関連付けます。 相関関係の詳細については、「 オーケストレーションでの関連付けの使用」を参照してください。

相関関係を使用するには
  1. 各操作に対して生成されたスキーマからプロパティを昇格させます。 たとえば、readLOB 操作スキーマから LOB_COLUMN プロパティを昇格させます。UPDATELOB 操作スキーマから FILTER プロパティを昇格させます。 プロパティを昇格するには、スキーマ ビューでプロパティを右クリックし、[ 昇格] をポイントして、[ クイック プロモーション] を選択します。 これにより、PropertySchema.xsd ファイルが BizTalk プロジェクトに追加されます。

    プロパティの昇格の詳細については、「プロパティの 昇格」を参照してください。

  2. [オーケストレーション ビュー] で [ 関連付けの種類] を右クリックし、[ 新しい関連付けの種類] を選択します。

  3. [ 関連付けのプロパティ ] ダイアログ ボックスには、手順 1 で昇格したプロパティが一覧表示されます。 プロパティを選択し、[ 追加] をクリックします。

  4. [OK] をクリックします。

  5. 他の昇格されたプロパティの関連付けの種類を作成するには、次の手順を繰り返します。

  6. 関連付けられている操作に基づいて、関連付けの種類の名前を変更します。 関連付けの種類の名前を CorrelationType_ReadLOB (ReadLOB 操作の場合) と CorrelationType_UpdateLOB (UpdateLOB 操作の場合) に変更できます。

  7. [オーケストレーション ビュー] で [ 関連付けセット] を右クリックし、[ 新しい関連付けセット] を選択します。

  8. 新しく追加した関連付けセットを右クリックし、[ プロパティ] をクリックします。 [ プロパティ ] ウィンドウで、次の操作を行います。

    プロパティ 目的
    [関連付けの種類] Operate_LOB。CorrelationType_ReadLOB
    識別子 Correlation_ReadLOB
  9. 別の関連付けセットを追加し、[プロパティ] ペインから次のプロパティを指定します。

    プロパティ 目的
    [関連付けの種類] Operate_LOB。CorrelationType_UpdateLOB
    識別子 Correlation_UpdateLOB

アクション図形のメッセージを指定し、ポートに接続する

次の表では、アクション図形のメッセージを指定し、ポートにリンクするために設定する必要があるプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。

図形 プロパティ
ReceiveMessage - 関連付けセットの初期化をCorrelation_ReadLOB に設定する
- メッセージ要求に設定する
- 操作FileIn.ReadLOB.Request に設定する
SendMessage - メッセージ要求に設定する
- 操作LOBPort.ReadLOB.Request に設定する
ReceiveResponse - [メッセージ][応答] に設定する
- 操作LOBPort.ReadLOB.Response に設定する
SendResponse - [メッセージ][応答] に設定する
- 操作SaveResponse.ReadLOB.Request に設定する
ReceiveMessage2 - 関連付けセットの初期化をCorrelation_UpdateLOB に設定する
- メッセージRequest2 に設定する
- 操作FileIn.UpdateLOB.Request に設定する
SendMessage2 - メッセージRequest2 に設定する
- 操作LOBPort.UpdateLOB.Request に設定する
ReceiveResponse2 - メッセージResponse2 に設定する
- 操作LOBPort.UpdateLOB.Response に設定する
SendResponse2 - メッセージ応答に設定する
- 操作SaveResponse.UpdateLOB.Request に設定する

これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。

BizTalk ソリューションをビルドし、BizTalk Serverに展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。

BizTalk アプリケーションの構成

BizTalk プロジェクトを展開すると、先ほど作成したオーケストレーションが、BizTalk Server管理コンソールの [オーケストレーション] ウィンドウの下に一覧表示されます。 アプリケーションを構成するには、BizTalk Server管理コンソールを使用する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。

アプリケーションの構成には、次の作業が含まれます。

  • アプリケーションのホストの選択。

  • オーケストレーションで作成したポートを、BizTalk Server管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。

    • ハード ディスク上の場所と、要求メッセージを削除する対応するファイル ポートを定義します。この場所は、それぞれ ReadLOB 操作と UpdateLOB 操作用です。 BizTalk オーケストレーションは要求メッセージを使用し、Oracle データベースに送信します。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが Oracle データベースからの応答を含む各操作に対して 1 つずつ応答メッセージを削除する対応するファイル ポートを定義します。

    • Oracle データベースにメッセージを送信する物理 WCF-Custom または送信ポート WCF-OracleDB 定義します。 また、送信ポートでアクションを指定する必要があります。 WCF-Custom または WCF-OracleDB ポートを作成する方法については、「 Oracle データベース アダプターへの物理ポート バインドを手動で構成する」を参照してください。 WCF-Custom または WCF-OracleDB 送信ポートは、複数のスキーマに準拠したメッセージを送受信し、2 つの操作を実行するため、両方の操作に動的アクションを設定する必要があります。 アクションの詳細については、「 Oracle Database の SOAP アクションを構成する」を参照してください。 このオーケストレーションの場合、アクションは次のように設定する必要があります。

      <BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
        <Operation Name="ReadLOB" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER/ReadLOB" />  
        <Operation Name="UpdateLOB" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER/UpdateLOB" />  
      </BtsActionMapping>  
      

      Note

      アダプター サービス BizTalk プロジェクト アドインを使用してスキーマを生成すると、ポートに関する情報と、それらのポートに対して設定するアクションを含むバインド ファイルも作成されます。 BizTalk Server管理コンソールからこのバインド ファイルをインポートして、送信ポート (送信呼び出しの場合) または受信ポート (受信呼び出し用) を作成できます。 詳細については、「 Oracle Database へのポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。

アプリケーションの起動

Oracle データベースで操作を実行するには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。

この段階で、次のことを確認します。

  • オーケストレーションの要求メッセージを受信する FILE 受信ポートが実行されています。

  • オーケストレーションからの応答メッセージを受信する FILE 送信ポートが実行されています。

  • Oracle データベースにメッセージを送信する WCF-Custom 送信ポートまたは WCF-OracleDB が実行されています。

  • 操作の BizTalk オーケストレーションが実行されています。

操作の実行

アプリケーションを実行した後、要求メッセージを FILE 受信場所にドロップする必要があります。 要求メッセージのスキーマは、前に生成した操作のスキーマに準拠している必要があります。 Oracle Database アダプターを使用して LOB データ型に対する操作を呼び出すための要求メッセージ スキーマの詳細については、「 特殊な LOB 操作 のメッセージ スキーマ」を参照してください。

オーケストレーションは要求メッセージを使用し、Oracle データベースに送信します。 Oracle データベースからの応答は、オーケストレーションの一部として定義されている他の FILE の場所に保存されます。

このオーケストレーションでは、まず、UPDATELOB 操作の要求メッセージを削除して、CUSTOMER テーブルの PHOTO 列 (BLOB データ型) を更新します。 特定の顧客の PHOTO 列の更新を呼び出す要求メッセージは次のとおりです。

<UpdateLOB xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <LOB_COLUMN>PHOTO</LOB_COLUMN>  
  <FILTER>Name='Mindy Martin'</FILTER>  
  <Stream>YWJjZA==</Stream>  
</UpdateLOB>  

Note

フィルター文字列は、常に一致する行を 1 つフェッチする必要があります。それ以外の場合、Oracle Database アダプターは XmlReaderParsingException をスローします。 また、Stream> 要素の値は <base64Binary 型である必要があります。

UpdateLOB 操作の応答は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>  
<UpdateLOBResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER"></UpdateLOBResponse>  

ここでは、UpdateLOB 操作によって更新されたデータを読み取るための ReadLOB 操作の要求メッセージを削除します。 特定の顧客の PHOTO 列で ReadLOB 操作を呼び出す要求メッセージは次のとおりです。

<ReadLOB xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <LOB_COLUMN>PHOTO</LOB_COLUMN>  
  <FILTER>NAME='Mindy Martin'</FILTER>  
</ReadLOB>  

Note

フィルター文字列は、常に一致する行を 1 つフェッチする必要があります。 一致する行が複数ある場合、Oracle Database アダプターは最初の (一致する) 行の LOB 列のみを返します。

ReadLOB 操作の応答は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>  
<ReadLOBResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/CUSTOMER">  
  <ReadLOBResult>YWJjZA==</ReadLOBResult>  
</ReadLOBResponse>  

Note

ReadLOB 操作の応答が WSDL に対する検証に失敗する場合があります。 WSDL に対して ReadLOB を検証するには、特定のタスクを実行する必要があります。 詳細については、「 操作上の問題のトラブルシューティング」を参照してください。

考えられる例外

BizTalk Serverを使用して LOB データを含むテーブルに対する操作の実行中に発生する可能性がある例外については、「例外とエラー処理」を参照してください。

ベスト プラクティス

BizTalk プロジェクトを展開して構成したら、バインド ファイルと呼ばれる XML ファイルに構成設定をエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションに対して送信ポートや受信ポートなどを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「 Oracle データベース アダプター バインドの再利用」を参照してください。

参照

Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素