BizTalk Serverを使用して Oracle Database で複合操作を実行する
Oracle Database アダプターを使用すると、アダプター クライアントは Oracle データベースに対して複合操作を実行できます。 複合操作には、次のものが含まれます。
テーブルとビューに対する挿入、更新、削除、および選択操作。
パッケージ内またはパッケージ外のストアド プロシージャと関数。
1 つの複合操作には、任意の数の操作を任意の順序で指定できます。 たとえば、2 つの挿入の後に削除を行い、最後にストアド プロシージャを実行できます。 また、異なるデータベース テーブルまたはビューを対象とするさまざまな操作を行うこともできます。 アダプターが複合操作をサポートする方法の詳細については、「 Oracle Database での複合操作の実行」を参照してください。 複合操作の SOAP メッセージの構造については、「複合操作の メッセージ スキーマ」を参照してください。
Oracle データベースで複合操作を実行する方法
BizTalk Serverで Oracle Database アダプターを使用して Oracle データベースに対して操作を実行するには、「Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手続き型タスクが含まれます。 Oracle データベースに対して複合操作を実行するには、次のタスクを実行します。
Visual Studio で BizTalk プロジェクトを作成し、呼び出すすべての操作のスキーマを生成します。
前の手順で生成したすべてのスキーマへの参照を含むスキーマ ファイルを手動で作成します。
Oracle データベースからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。 これらのメッセージは、前の手順で作成した要求と応答のスキーマに準拠している必要があります。
Oracle データベースで複合操作を呼び出すオーケストレーションを作成します。
BizTalk プロジェクトをビルドして展開します。
物理送受信ポートを作成して BizTalk アプリケーションを構成します。
BizTalk アプリケーションを起動します。
このトピックでは、これらのタスクを実行する方法について説明します。
スキーマの生成
このトピックでは、複合操作を実行する方法を示すために、次のタスクを同じ順序で実行します。
ACCOUNTACTIVITY テーブルにレコードを挿入します。
ACCOUNT_PKG パッケージ内のGET_ALL_ACTIVITY プロシージャを呼び出して、ACCOUNTACTIVITY テーブル内のすべてのレコードを取得します。
ACCOUNTACTIVITY テーブルからレコードを削除します。
サンプルに付属のスクリプトを実行して、ACCOUNTACTIVITY テーブルを作成します。 サンプルの詳細については、「 スキーマ サンプル」を参照してください。
BizTalk プロジェクトを作成し、アダプター サービス アドインを使用してスキーマを生成する必要があります。 スキーマの生成方法の詳細については、「 Visual Studio で Oracle Database 操作のメタデータを取得 する」を参照してください。
複合スキーマ定義の作成
次に、個々の操作用に作成したスキーマを参照する複合スキーマを Visual Studio BizTalk プロジェクトに作成する必要があります。 次の手順を実行して、複合スキーマ定義を作成します。
複合スキーマ定義を追加するには
Visual Studio の BizTalk プロジェクトにスキーマ ファイルを追加します。 ソリューション名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 [ 新しい項目の追加 ] ダイアログ ボックスの [ カテゴリ ] ボックスで、[ スキーマ ファイル] をクリックします。 [テンプレート] ボックス で 、[ スキーマ] をクリックします。 スキーマ ファイルの名前を指定し、[OK] をクリック します。
この例では、スキーマ ファイル名を として
CompositeSchema.xsd
指定します。実行するさまざまな操作に対して生成されたスキーマへの参照を追加します。 この例では、操作用に生成されるさまざまなスキーマを次に示します。
ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作用の OracleDBBinding.xsd。
GET_ALL_ACTIVITY プロシージャの OracleDBBinding2.xsd。
参照を追加するには:
CompositeSchema.xsd のルート <スキーマ> ノードを右クリックし、[ プロパティ] をクリックします。
[プロパティ] ボックスで、Imports プロパティに対する省略記号ボタン (...) をクリックします。
[ インポート ] ダイアログ ボックスの [ 新しいスキーマをとしてインポート ] ボックスの一覧から [ XSD インポート] を選択し、[ 追加] をクリックします。
[ BizTalk の種類の選択 ] ダイアログ ボックスで、[BizTalk プロジェクト名] ノードを展開し、[ スキーマ] を展開して、インポートするスキーマを選択します。 この例では、[BizTalk_project_name>] を選択<します。OracleDBBinding.xsd。 [OK] をクリックします。
この手順を繰り返して、BizTalk_project_name>をインポート<します。OracleDBBinding2.xsd も同様です。
[インポート] ダイアログ ボックス で 、[OK] をクリック します。
ルート スキーマ ノードに 2 つの子ノードを追加します。 1 つの子ノードは、複合操作を実行するための要求スキーマに対応します。 もう 1 つの子ノードは、応答スキーマに対応します。 要求スキーマに対応するノードには任意の名前を付けることができます。 応答スキーマに対応するノードは、Response request_schema_node>呼び出<す必要があります。 この例では、要求スキーマ ノードを Request として呼び出 します。 そのため、応答スキーマ ノードは RequestResponse と呼ばれます。
Note
既定では、 ルート ノードも新しいスキーマ ファイルに追加されます。 ルート ノードの名前を Request に変更できます。 ノードの名前を変更するには、ノード名を右クリックし、[ 名前の変更] をクリックします。
[スキーマ] ノードの下にノードを<追加するには:>
[スキーマ] ノードを <右クリックし、[スキーマ>ノードの挿入] をポイントして、[ 子レコード] をクリックします。
新しいノードの名前を RequestResponse に変更します。
複合 操作の一 部として実行する各操作の要求スキーマに対応する子ノードを [要求] ノードの下に追加します。 この例では、次に対応する子ノードを追加する必要があります。
ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作。
プロシージャGET_ALL_ACTIVITYします。
重要
操作を実行する順序と同じ順序でノードを追加する必要があります。 たとえば、レコードを挿入してからストアド プロシージャを実行し、レコードを削除する場合は、最初に Insert 操作のノードを追加し、次にストアド プロシージャのノードを追加し、最後に Delete 操作のノードを追加する必要があります。
要求ノードに子ノードを追加するには:
[要求] ノードを右クリックし、[スキーマ ノードの挿入] をポイントして、[子レコード] をクリックします。
スキーマ のする
複合操作の一部として実行する操作の要求スキーマに対応するようにレコードの名前を変更します。 たとえば、ノードの名前を "Insert" に変更します。
[ 挿入 ] ノードを、ACCOUNTACTIVITY テーブルの挿入操作の要求スキーマにマップします。 これを行うには、[ 挿入 ] ノードを右クリックし、[ プロパティ] をクリックします。 [ プロパティ ] ボックスの [ データ構造の種類 ] ボックスの一覧で、[ 挿入 (参照)] を選択します。
スキーマ をする
ストアド プロシージャと Delete 操作の要求スキーマのノードGET_ALL_ACTIVITY追加するには、次の手順を繰り返します。 次の表に示すように、ノード名を指定し、対応するスキーマにマップします。
ノード名 スキーマにマップ済み GET_ALL_ACTIVITY GET_ALL_ACTIVITY (リファレンス) 削除 削除 (参照)
複合操作の一部として実行する各操作の応答スキーマに対応する子ノードを RequestResponse ノードの下に追加します。 この例では、次に対応する子ノードを追加する必要があります。
ACCOUNTACTIVITY テーブルに対する挿入操作と削除操作。
ストアド プロシージャGET_ALL_ACTIVITYします。
重要
子ノードは、 要求 ノードの下の子ノードと同じ順序で追加する必要があります。
RequestResponse ノードに子ノードを追加するには:
[RequestResponse] ノードを右クリックし、[スキーマ ノードの挿入] をポイントして、[子レコード] をクリックします。
複合操作の一部として実行する操作の応答スキーマに対応するようにレコードの名前を変更します。 たとえば、ノードの名前を "InsertResponse" に変更します。
INSERTResponse ノードを、ACCOUNTACTIVITY テーブルの挿入操作の応答スキーマにマップします。 これを行うには、[ 挿入][応答 ] ノードを右クリックし、[ プロパティ] をクリックします。 [ プロパティ ] ボックスの [ データ構造の種類 ] ボックスの一覧で、[ 挿入][応答 (参照)] の順に選択します。
これらの手順を繰り返して、GET_ALL_ACTIVITY ストアド プロシージャと Delete 操作の応答スキーマのノードを追加します。 次の表に示すように、ノード名を指定し、対応するスキーマにマップします。
ノード名 スキーマにマップ済み GET_ALL_ACTIVITYResponse GET_ALL_ACTIVITYResponse (リファレンス) DeleteResponse DeleteResponse (リファレンス)
CompositeSchema.xsd ファイルを保存します。
メッセージとメッセージの種類の定義
前の手順で作成した複合スキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 オーケストレーションのメッセージを作成し、前の手順で作成したスキーマにリンクする必要があります。
メッセージを作成し、スキーマにリンクするには
Visual Studio の BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーから BizTalk プロジェクト名を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。
BizTalk プロジェクトの [オーケストレーションの種類] ウィンドウを開きます (まだ表示されていない場合)。 これを行うには、[ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。
オーケストレーション ビューで、[ メッセージ] を右クリックし、[ 新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
プロパティ 目的 識別子 「 Request
」と入力しますメッセージ型 ドロップダウン リストから [ スキーマ] を展開し、[ Composite_Op.CompositeSchema.Request] を選択します。ここで、Composite_Opは BizTalk プロジェクトの名前です。 CompositeSchema は、複合操作用に手動で作成したスキーマです。 手順 2 を繰り返して、新しいメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。
プロパティ 目的 識別子 「 Response
」と入力しますメッセージ型 ドロップダウン リストから [ スキーマ] を展開し、[ Composite_Op.CompositeSchema.RequestResponse] を選択します。
オーケストレーションの設定
Oracle データベースで複合操作を実行するためにBizTalk Serverを使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、定義された受信場所に要求メッセージをドロップします。 要求メッセージは、前に作成した複合スキーマに準拠している必要があります。 Oracle Database アダプターは、このメッセージを使用して Oracle データベースに渡します。 Oracle データベースからの応答は別の場所に保存されます。 Oracle データベースにメッセージを送信し、それぞれ応答を受信するには、Send 図形と Receive 図形を含める必要があります。 複合操作を実行するための基本的なオーケストレーションは、次のようになります。
メッセージ図形の追加
メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、単一のオーケストレーションに表示されるメッセージ図形の名前です。
図形 | 図形の種類 | プロパティ |
---|---|---|
ReceiveMessage | 受信 | - 名前を ReceiveMessage に設定する - Activate をTrue に設定する |
SendMessage | Send | - 名前を SendMessage に設定する |
ReceiveResponse | 受信 | - 名前を ReceiveResponse に設定する - Activate をFalse に設定する |
SendResponse | Send | - 名前を SendResponse に設定する |
ポートの追加
論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。
Port | プロパティ |
---|---|
MessageIn | - 識別子を MessageIn に設定する - 型を MessageInType に設定する - 通信パターンを一方向に設定する - 受信する通信方向を設定する |
LOBPort | - 識別子を LOBPort に設定する - 型を LOBPortType に設定する - 通信パターンを Request-Response に設定する - [通信の方向] を [送受信] に設定する |
ResponseOut | - 識別子を ResponseOut に設定する - Type を ResponseOutType に設定する - 通信パターンを一方向に設定する - [通信の方向] を [送信] に設定する |
アクション図形のメッセージを指定し、ポートに接続する
次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定する必要があるプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。
図形 | プロパティ |
---|---|
ReceiveMessage | - メッセージを要求に設定する - 操作を MessageIn.CompositeOp.Request に設定する |
SendMessage | - メッセージを要求に設定する - 操作を LOBPort.CompositeOp.Request に設定する |
ReceiveResponse | - [メッセージ] を [応答] に設定する - 操作を 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 アクションを構成する」を参照してください。
Note
アダプター サービス BizTalk プロジェクト アドインを使用してスキーマを生成すると、ポートとそれらのポートに設定するアクションに関する情報を含むバインド ファイルも作成されます。 このバインド ファイルを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
要素には 、Delete 操作によって削除された行の数を示す '1' が含まれています。
重要
複合操作の実行中にタイムアウトの問題が発生した場合は、接続の数が、次に関連する複合操作の操作の数より少ないことが原因である可能性があります。
BFILE、BLOB、CLOB、NCLOB、REF CURSOR を OUT パラメーターまたは IN OUT パラメーターとして含むストアド プロシージャ。
- 操作を選択します。
この問題を解決するには、複合操作にこのような操作の数が "n" ある場合、 MinPoolSize バインド プロパティに指定された値が "n+1" 以上であることを確認する必要があります。 MinPoolSize バインド プロパティの詳細については、「バインド プロパティの操作」を参照してください。
ベスト プラクティス
BizTalk プロジェクトを展開して構成したら、構成設定をバインド ファイルと呼ばれる XML ファイルにエクスポートできます。 バインド ファイルを生成したら、ファイルから構成設定をインポートして、同じオーケストレーションの送信ポートや受信ポートなどの項目を作成する必要がないようにすることができます。 バインド ファイルの詳細については、「 Oracle Database アダプター バインドを再利用する」を参照してください。