次の方法で共有


BizTalk Server を使用して Oracle データベースで複合操作を実行する

Oracle データベース アダプターを使用すると、アダプター クライアントは Oracle データベースに対して複合操作を実行できます。 複合操作には、次のものが含まれます。

  • テーブルとビューに対する挿入、更新、削除、および選択操作。

  • パッケージの内部または外部にあるストアド プロシージャと関数。

    1 つの複合操作には、任意の数の操作を任意の順序で指定できます。 たとえば、2 つの挿入の後に削除を行い、最後にストアド プロシージャを実行できます。 また、異なるデータベース テーブルまたはビューを対象とするさまざまな操作を行うこともできます。 アダプターが複合操作をサポートする方法の詳細については、「 Oracle Database での複合操作の実行」を参照してください。 複合操作の SOAP メッセージの構造については、「複合操作の メッセージ スキーマ」を参照してください。

Oracle Database で複合操作を実行する方法

BizTalk Server で Oracle Database アダプターを使用して Oracle データベースに対する操作を実行するには、「Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手続き型タスクが含まれます。 Oracle データベースに対して複合操作を実行するには、次のタスクを実行します。

  1. Visual Studio で BizTalk プロジェクトを作成し、呼び出すすべての操作のスキーマを生成します。

  2. 前の手順で生成したすべてのスキーマへの参照を含むスキーマ ファイルを手動で作成します。

  3. Oracle データベースからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。 これらのメッセージは、前の手順で作成した要求と応答のスキーマに準拠している必要があります。

  4. Oracle データベースで複合操作を呼び出すオーケストレーションを作成します。

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

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

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

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

スキーマの生成

このトピックでは、複合操作を実行する方法を示すために、次のタスクを同じ順序で実行します。

  • ACCOUNTACTIVITY テーブルにレコードを挿入します。

  • ACCOUNT_PKG パッケージ内の GET_ALL_ACTIVITY プロシージャを呼び出して、ACCOUNTACTIVITY テーブル内のすべてのレコードを取得します。

  • ACCOUNTACTIVITY テーブルからレコードを削除します。

    サンプルに付属のスクリプトを実行して ACCOUNTACTIVITY テーブルを作成します。 サンプルの詳細については、「 スキーマサンプル」を参照してください。

    BizTalk プロジェクトを作成し、Consume Adapter Service アドインを使用してスキーマを生成する必要があります。 スキーマを生成する方法の詳細については、 Visual Studio での Oracle Database 操作のメタデータの取得 に関するページを参照してください。

複合スキーマ定義の作成

Visual Studio BizTalk プロジェクトで、個々の操作用に作成したスキーマを参照する複合スキーマを作成する必要があります。 複合スキーマ定義を作成するには、次の手順を実行します。

複合スキーマ定義を追加するには

  1. Visual Studio の BizTalk プロジェクトにスキーマ ファイルを追加します。 ソリューション名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 [ 新しい項目の追加 ] ダイアログ ボックスの [ カテゴリ ] ボックスで、[ スキーマ ファイル] をクリックします。 テンプレート ボックスでスキーマをクリックします。 スキーマ ファイルの名前を指定し、[OK] をクリック します

    この例では、スキーマ ファイル名を CompositeSchema.xsdとして指定します。

  2. 実行するさまざまな操作に対して生成されたスキーマへの参照を追加します。 この例では、操作用に生成されるさまざまなスキーマを次に示します。

    • ORACLEDBBinding.xsd。ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作用です。

    • OracleDBBinding2.xsd、GET_ALL_ACTIVITY プロシージャ用。

      参照を追加するには:

    1. CompositeSchema.xsd のルート <Schema> ノードを右クリックし、[ プロパティ] をクリックします。

    2. [プロパティ] ボックスで、Imports プロパティに対する省略記号ボタン (...) をクリックします。

      インポート スキーマ定義

    3. [インポート] ダイアログ ボックス [ 新しいスキーマを一覧としてインポート ] から [ XSD インポート] を選択し、[ 追加] をクリックします。

    4. [BizTalk の種類の選択] ダイアログ ボックスで、[BizTalk プロジェクト名] ノードを展開し、[スキーマ] を展開して、インポートするスキーマを選択します。 この例では、 <BizTalk_project_name>を選択します。OracleDBBinding.xsd。 OK をクリックします。

      この手順を繰り返して、 <BizTalk_project_name>をインポートします。OracleDBBinding2.xsd も同様です。

    5. [インポート] ダイアログ ボックス 、[OK] をクリック します

  3. ルート スキーマ ノードに 2 つの子ノードを追加します。 1 つの子ノードは、複合操作を実行するための要求スキーマに対応します。 もう 1 つの子ノードは、応答スキーマに対応します。 要求スキーマに対応するノードには任意の名前を付けることができます。 応答スキーマに対応するノードは、 <request_schema_node>Response と呼ばれる必要があります。 この例では、要求スキーマ ノードを 要求として呼び出します。 そのため、応答スキーマ ノードは RequestResponse と呼ばれます。

    既定では、 ルート ノードも新しいスキーマ ファイルに追加されます。 ルート ノードの名前を Request に変更できます。 ノードの名前を変更するには、ノード名を右クリックし、[ 名前の変更] をクリックします。

    <Schema> ノードの下にノードを追加するには:

    1. <Schema> ノードを右クリックし、[スキーマ ノードの挿入] をポイントして、[子レコード] をクリックします。

    2. 新しいノードの名前を RequestResponse に変更します。

  4. 複合 操作の一 部として実行する各操作の要求スキーマに対応する子ノードを要求ノードの下に追加します。 この例では、次に対応する子ノードを追加する必要があります。

    • ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作。

    • GET_ALL_ACTIVITYプロシージャ。

    Von Bedeutung

    操作を実行するのと同じ順序でノードを追加する必要があります。 たとえば、レコードを挿入してからストアド プロシージャを実行し、レコードを削除する場合は、最初に Insert 操作のノードを追加し、次にストアド プロシージャのノードを追加し、最後に Delete 操作のノードを追加する必要があります。

    要求ノードに子ノードを追加するには:

    1. [要求] ノードを右クリックし、[スキーマ ノードの挿入] をポイントして、[子レコード] をクリックします。

      58992131-13a6-45c3-9513-5c0995091faeスキーマ のする

    2. 複合操作の一部として実行する操作の要求スキーマに対応するようにレコードの名前を変更します。 たとえば、ノードの名前を "Insert" に変更します。

    3. [ 挿入 ] ノードを ACCOUNTACTIVITY テーブルの挿入操作の要求スキーマにマップします。 これを行うには、[ 挿入 ] ノードを右クリックし、[ プロパティ] をクリックします。 [ プロパティ ] ボックスの [ データ構造の種類 ] ボックスの一覧から[ 挿入 (参照)]を選択します。

      子ノードを要求スキーマにマッピングする

    4. これらの手順を繰り返して、GET_ALL_ACTIVITY ストアド プロシージャと Delete 操作の要求スキーマのノードを追加します。 次の表に示すように、ノード名を指定し、対応するスキーマにマップします。

      ノード名 スキーマにマップされる
      全てのアクティビティを取得 GET_ALL_ACTIVITY (リファレンス)
      削除 削除 (参照)
  5. 複合操作の一部として実行する各操作の応答スキーマに対応する子ノードを RequestResponse ノードの下に追加します。 この例では、次に対応する子ノードを追加する必要があります。

    • ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作。

    • ストアド プロシージャ GET_ALL_ACTIVITY。

    Von Bedeutung

    子ノードは、 要求 ノードの下の子ノードと同じ順序で追加する必要があります。

    RequestResponse ノードに子ノードを追加するには:

    1. RequestResponse ノードを右クリックし、[スキーマ ノードの挿入] をポイントして、[子レコード] をクリックします。

    2. 複合操作の一部として実行する操作の応答スキーマに対応するようにレコードの名前を変更します。 たとえば、ノードの名前を "InsertResponse" に変更します。

    3. INSERTResponse ノードを ACCOUNTACTIVITY テーブルの挿入操作の応答スキーマにマップします。 これを行うには、[ InsertResponse ] ノードを右クリックし、[ プロパティ] をクリックします。 [ プロパティ ] ボックスの [ データ構造の種類 ] ボックスの一覧で、[ InsertResponse (参照)]を選択します。

    4. これらの手順を繰り返して、GET_ALL_ACTIVITY ストアド プロシージャと Delete 操作の応答スキーマのノードを追加します。 次の表に示すように、ノード名を指定し、対応するスキーマにマップします。

      ノード名 スキーマにマップされる
      GET_ALL_ACTIVITYレスポンス GET_ALL_ACTIVITYResponse (リファレンス)
      削除応答 DeleteResponse (リファレンス)
  6. CompositeSchema.xsd ファイルを保存します。

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

前の手順で作成した複合スキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 オーケストレーションのメッセージを作成し、前の手順で作成したスキーマにリンクする必要があります。

  1. Visual Studio で BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーで、BizTalk プロジェクト名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。

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

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

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

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

    これを使用する 目的
    識別子 Request」と入力します
    メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 Composite_Op.CompositeSchema.Request を選択します。ここで、Composite_Opは BizTalk プロジェクトの名前です。 CompositeSchema は、複合操作用に手動で作成したスキーマです。
  6. 手順 2. を繰り返して、新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。

    これを使用する 目的
    識別子 Response」と入力します
    メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 Composite_Op.CompositeSchema.RequestResponse を選択します。

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

Oracle データベースで複合操作を実行するために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、定義された受信場所に要求メッセージをドロップします。 要求メッセージは、前に作成した複合スキーマに準拠している必要があります。 Oracle データベース アダプターは、このメッセージを使用して Oracle データベースに渡します。 Oracle データベースからの応答は、別の場所に保存されます。 Oracle データベースにメッセージを送信し、応答を受信するには、送信図形と受信図形をそれぞれ含める必要があります。 複合操作を実行するための基本的なオーケストレーションは、次のようになります。

複合操作を行うためのオーケストレーション

メッセージ図形の追加

メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。

図形の種類 特性
メッセージ受信 受け取る - 名前ReceiveMessage に設定する
- アクティブ化True に設定する
メッセージを送信 送信 - 名前SendMessage に設定する
応答を受信する 受け取る - 名前ReceiveResponse に設定する
- アクティブ化False に設定する
SendResponse 送信 - 名前SendResponse に設定する

ポートの追加

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

港 / ポート 特性
MessageIn - 識別子MessageIn に設定する
- MessageInType に設定する
- 通信パターン一方向に設定する
- 通信方向受信に設定する
LOBPort - 識別子LOBPort に設定する
- LOBPortType に設定する
- 通信パターンRequest-Response に設定する
- 通信方向送受信に設定する
ResponseOut - 識別子ResponseOut に設定する
- ResponseOutType に設定する
- 通信パターン一方向に設定する
- 通信方向送信に設定する

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

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

特性
メッセージ受信 - メッセージ要求に設定する
- 操作MessageIn.CompositeOp.Request に設定する
メッセージを送信 - メッセージ要求に設定する
- 操作LOBPort.CompositeOp.Request に設定する
応答を受信する - メッセージ応答に設定する
- 操作LOBPort.CompositeOp.Response に設定する
SendResponse - メッセージ応答に設定する
- 操作ResponseOut.CompositeOp.Request に設定する

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

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

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

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

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

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

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

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

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

    • Oracle データベースにメッセージを送信する物理 WCF-Custom または送信ポート WCF-OracleDB 定義します。 複合操作の一部である操作は 1 つのトランザクションで実行されるため、 UseAmbientTransaction バインディング プロパティが True に設定されていることを確認します。

      また、送信ポートでアクションを指定する必要があります。 複合操作のアクションは"<http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation">です。 ポートを作成する方法については、「 Oracle データベース アダプターへの物理ポート バインドを手動で構成する」を参照してください。 ポートのアクションを指定する方法の詳細については、「 Oracle Database の SOAP アクションを構成する」を参照してください。

      また、Consume Adapter Service BizTalk Project アドインを使用してスキーマを生成すると、それらのポートに設定するポートとアクションに関する情報を含むバインディング ファイルも作成されます。 BizTalk Server 管理コンソールからこのバインド ファイルをインポートして、送信ポート (発信呼び出し用) または受信ポート (受信呼び出し用) を作成できます。 詳細については、「 Oracle Database へのポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。 このバインド ファイルをインポートすると、送信ポートのアクションは、スキーマの生成中にアダプター サービス アドインで選択したすべての操作を含む動的アクションに設定されます。 複合操作の場合は、動的アクションを "<http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation">に置き換える必要があります。

アプリケーションの起動

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

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

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

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

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

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

操作の実行

アプリケーションを実行した後、FILE 受信場所に要求メッセージをドロップする必要があります。 要求メッセージのスキーマは、前に作成した複合操作のスキーマに準拠している必要があります。 たとえば、ACCOUNTACTIVITY テーブルにレコードを挿入し、GET_ALL_ACTIVITY ストアド プロシージャを呼び出し、ACCOUNTACTIVITY テーブルからレコードを削除する要求メッセージは次のとおりです。

<Request xmlns="http://Composite_Op.CompositeSchema">  
  <Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">  
    <RECORDSET>  
      <ACCOUNTACTIVITYRECORDINSERT>  
        <TID>1</TID>  
        <ACCOUNT>100001</ACCOUNT>  
        <AMOUNT>1500</AMOUNT>  
        <DESCRIPTION></DESCRIPTION>  
        <TRANSDATE>2008-06-21T15:52:19</TRANSDATE>  
        <PROCESSED>n</PROCESSED>  
      </ACCOUNTACTIVITYRECORDINSERT >  
    </RECORDSET>  
  </Insert>  
  <GET_ALL_ACTIVITY xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG"/>  
  <Delete xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">  
    <FILTER>WHERE AMOUNT = 1500</FILTER>  
  </Delete>  
</Request>  

上記の要求メッセージは、最初にレコードを挿入してから、GET_ALL_ACTIVITY プロシージャを呼び出して ACCOUNTACTIVITY テーブル内のすべてのレコードを取得します。 次に、FILTER 句を指定して、挿入されたレコードを削除します。 Oracle データベース アダプターを使用して Oracle データベースに 対して複合操作 を実行するための要求メッセージ スキーマの詳細については、複合操作のメッセージ スキーマを参照してください。

オーケストレーションによってメッセージが取り込まれ、Oracle データベースに送信されます。 Oracle データベースからの応答は、オーケストレーションの一部として定義されている他の FILE の場所に保存されます。 たとえば、上記の要求メッセージに対する Oracle データベースからの応答は、次のようになります。

<?xml version="1.0" encoding="utf-8" ?>   
<RequestResponse xmlns="http://Composite_Op.CompositeSchema">  
  <InsertResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOOT/Table/ACCOUNTACTIVITY">  
    <InsertResult>1</InsertResult>   
  </InsertResponse>  
  <GET_ALL_ACTIVITYResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
    <ALLRECS>  
      <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
        <xs:element msdata:IsDataSet="true" name="NewDataSet">  
          <xs:complexType>  
            <xs:sequence>  
              <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">  
                <xs:complexType>  
                  <xs:sequence>  
                    <xs:element minOccurs="0" name="TID" type="xs:decimal" />   
                    <xs:element minOccurs="0" name="ACCOUNT" type="xs:decimal" />   
                    <xs:element minOccurs="0" name="AMOUNT" type="xs:decimal" />   
                    <xs:element minOccurs="0" name="DESCRIPTION" type="xs:string" />   
                    <xs:element minOccurs="0" name="TRANSDATE" type="xs:dateTime" />   
                    <xs:element minOccurs="0" name="PROCESSED" type="xs:string" />   
                  </xs:sequence>  
                </xs:complexType>  
              </xs:element>  
            </xs:sequence>  
          </xs:complexType>  
        </xs:element>  
      </xs:schema>  
      <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">  
        <NewDataSet xmlns="">  
          <NewTable>  
            ......   
            ......   
          </NewTable>  
          ......  
          ......  
          <NewTable>  
            <TID>10</TID>   
            <ACCOUNT>100001</ACCOUNT>   
            <AMOUNT>1000</AMOUNT>   
            <TRANSDATE>2008-07-28T21:39:57</TRANSDATE>   
            <PROCESSED>n</PROCESSED>   
          </NewTable>  
        </NewDataSet>  
      </diffgr:diffgram>  
    </ALLRECS>  
  </GET_ALL_ACTIVITYResponse>  
  <DeleteResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">  
    <DeleteResult>1</DeleteResult>   
  </DeleteResponse>  
</RequestResponse>  

上記の応答には、複合操作の一部として実行されるさまざまな操作に対応する複数の結果セットが含まれています。 たとえば、 InsertResult 要素には、挿入操作によって挿入された行の数を示す '1' が含まれています。 同様に、 DeleteResult 要素には '1' が含まれています。これは、Delete 操作によって削除された行の数を示します。

Von Bedeutung

複合操作の実行中にタイムアウトの問題が発生した場合は、接続の数が、次を含む複合操作の操作の数よりも少ないためである可能性があります。

  • BFILE、BLOB、CLOB、NCLOB、REF CURSOR を OUT パラメーターまたは IN OUT パラメーターとして含むストアド プロシージャ。

    • 操作を選択します。

    この問題を解決するには、複合操作にそのような操作の数が "n" ある場合、 MinPoolSize バインディング プロパティに指定された値が "n+1" 以上であることを確認する必要があります。 MinPoolSize バインド プロパティの詳細については、「バインド プロパティの操作」を参照してください。

ベスト プラクティス

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

こちらもご覧ください

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