51 大規模ドキュメントおよび多数のインスタンスの管理

この章では、Oracle SOA Suiteで大規模ドキュメントとメタデータを管理する場合、および多数のインスタンスがある環境を管理する場合のベスト・プラクティスについて説明します。また、大規模ドキュメントの処理のユースケース、大規模ドキュメントの同時処理に関する制限およびチューニングに関する推奨事項についても説明します。

この章の内容は次のとおりです。

Oracle SOA Suiteのチューニングとパフォーマンスの詳細は、『パフォーマンスのチューニング』を参照してください。

Oracle SOA Suiteの問題のトラブルシューティングの詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』「Oracle SOA SuiteおよびOracle BPM Suiteのトラブルシューティング」を参照してください。

大量のデータを迅速に移動し、複雑なデータ変換を処理するOracle Data Integratorの使用については、次のURLにアクセスしてください。

http://www.oracle.com/technetwork/middleware/data-integrator

51.1 大規模ドキュメントを処理する場合のベスト・プラクティス

この項では、大規模ドキュメントを処理する次のシナリオについて説明し、各シナリオに対するベスト・プラクティスなアプローチを示します。大規模なペイロードを開発および実行する前に、これらのベスト・プラクティスに従うことをお薦めします。

51.1.1 大規模ドキュメントを処理する場合のユースケース

この項では、大規模ドキュメントを処理する場合のユースケースについて説明します。

51.1.1.1 XMLペイロードへのバイナリ・オブジェクトのBase64エンコード・テキストとしての受け渡し

この項では、バイナリ・オブジェクトをBase64エンコード・テキストとしてXMLペイロードに渡す場合のユースケースについて説明します。

51.1.1.1.1 SOAPインライン

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表51-1に詳細を示します。

表51-1 機能

機能 説明

セキュリティ

サポートされています。

フィルタ/トランスフォーメーション/割当て

トランスフォーメーションを使用すると、パフォーマンスの低下またはメモリー不足のエラー(あるいはその両方)につながる場合があります。

ファンアウト

サポートされています。

バインディング

WSバインディングが、バイナリ・アタッチメントをドキュメント・オブジェクト・モデル(DOM)として送信します。

Oracle BPEL Process Manager/Oracle Mediator

BPELプロセスでJavaのexecを使用してデコードできます。

51.1.1.1.2 SOAP MTOM

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、MTOM(メッセージ転送最適化メカニズム)ドキュメントとして渡されます。表51-2に詳細を示します。

表51-2 機能

機能 説明

セキュリティ

サポートされています。

フィルタ/トランスフォーメーション/割当て

assignアクティビティはサポート対象です。

ファンアウト

サポートされています。

バインディング

WSバインディングが、MTOMとして送信されるアタッチメントをマテリアライズし、Base64エンコード形式で内部に配置します(ストリーミングはサポートされていません)。

Oracle BPEL Process Manager/Oracle Mediator

追加作業は不要です。

51.1.1.1.3 ファイル/FTPアダプタによって渡される不透明(Opaque)コンテンツ

このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表51-3に詳細を示します。

表51-3 機能

機能 説明

セキュリティ

サポートされていません。

フィルタ/トランスフォーメーション/割当て

パス・スルー。

ファンアウト

サポートされています。

バインディング

アダプタがBase64形式にエンコードします。

Oracle BPEL Process Manager/Oracle Mediator

サポートされています。不透明(Opaque)コンテンツは、assignアクティビティまたはtransformアクティビティでは操作できません。

51.1.1.1.4 Oracle B2Bによって渡される不透明(Opaque)コンテンツ

このユースケースでは、バイナリ・アタッチメント(画像など)がエンコード・テキストとしてBase64でエンコードされます。表51-4に詳細を示します。

表51-4 機能

機能 説明

セキュリティ

サポートされていません。

フィルタ/トランスフォーメーション/割当て

パス・スルー。

ファンアウト

サポートされています。

Oracle B2B

Oracle B2Bは、ネイティブ・ペイロードをBase64形式にエンコードします。このシナリオの場合は、Oracle B2Bバインディングのドキュメント定義の処理が不透明になるように構成する必要があります。

51.1.1.2 アタッチメントのエンドツーエンドのストリーミング

この項では、アタッチメントをエンドツーエンドでストリーミングする場合のユースケースについて説明します。

ノート:

Direct Internet Message Encapsulation (DIME)アタッチメントはサポートされていません。

51.1.1.2.1 アタッチメント付きのSOAP

このユースケースでは、バイナリ・アタッチメント(画像など)がストリームとしてエンドツーエンドで渡されます。表51-5に詳細を示します。

表51-5 機能

機能 説明

セキュリティ

サポートされていません。

フィルタ/トランスフォーメーション/割当て

パス・スルー。Oracle BPEL Process ManagerでXPath拡張関数を使用する必要があります。

バインディング

WSバインディングが、SOAPアタッチメントに対するストリーム・イテレータを作成します。

Oracle BPEL Process Manager/Oracle Mediator

Oracle Mediatorは、マテリアライズなしのパス・スルーを実行できます。Oracle BPEL Process Managerはアタッチメントを保持します。

チューニング

Oracle BPEL Process Managerで使用する場合は、データベース表領域を管理します。

アタッチメント付きSOAPの定義用のWSDLコード

<mime:part>
   <mime:content part="bin" type=“image/jpeg"/>
</mime:part>

ノート:

  • アタッチメントをWebサービスのコールバック・レスポンスの一部としてストリームすることはできません。

  • Springサービス・コンポーネントでは、MIMEアタッチメントの処理がサポートされていません。サポートされるのは、MTOMアタッチメントのみです。

  • 直接バインディング、Webサービスなどの様々なバインディング・コンポーネントを使用すると、大規模アタッチメントを処理できます。ただし、直接バインディングを使用した大規模アタッチメントの処理はメモリー不足のエラーにつながるため、お薦めできません。

51.1.1.2.2 ストリーミング・アタッチメントの使用

Oracle Fusion MiddlewareのWebサービスでは、大規模アタッチメントをストリームとして渡すことができます。アタッチメント全体がメモリー内にある場合と同様にアタッチメントを処理するJAX-RPCのAPIとは異なり、ストリームではプログラミング・モデルをより効率的に使用します。また、ストリームを使用すると、サービスの実行前にアタッチメントをメモリーにロードする必要がないため、パフォーマンスおよびスケーラビリティが向上します。

ストリーム・アタッチメントは、埋込みアタッチメントと同様に、MIMEマルチパートのバイナリ形式に準拠しています。埋込みアタッチメントとは、インラインまたはエンコードのアタッチメントを指します。

ワイヤ上では、ストリーム・アタッチメント付きのメッセージはアタッチメント付きの他のSOAPメッセージと同じです。

次の例に、ストリーム添付付きのサンプル・メッセージを示します。メッセージの最初のパートはSOAPエンベロープ(<SOAP-ENV:Envelope...)です。2番目のパートがアタッチメント(この例ではmyImage.gif)です。

MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;
Content-Description: This is the optional message description.

--MIME_boundary
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: NotSure/DoesntMatter

<?xml version='1.0' ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
. . .
<DocumentName>MyImage.gif</DocumentName>
. . .
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

--MIME_boundary
Content-Type: image/gif
Content-Transfer-Encoding: binary
Content-ID: AnythingYoudLike

...binary GIF image...
--MIME_boundary--
51.1.1.2.3 MIMEアタッチメントを使用するコンポジットの作成

次の手順を実行して、MIMEアタッチメントを使用するコンポジットを作成します。

MIMEアタッチメントを使用するコンポジットを作成するには:

  1. ペイロード・スキーマを使用してコンポジット(たとえば、Oracle Mediatorを介してアウトバウンドWebサービスに接続するインバウンドWebサービス)を作成します。

  2. Oracle MediatorのWSDLファイル内で、次のステップを実行します。

    1. WSDLデザイナから、Oracle MediatorのWSDLファイルを開きます。

    2. バインディングを中央のスイムレーンにドラッグ・アンド・ドロップします。

    3. RPCバインディングを選択します。

    4. 名前を入力します。

    5. WSDLの「ソース」ビューに移動し、MIMEマルチパートを使用してWSDLの入力と出力を変更します。

      <wsdl:input>
            <mime:multipartRelated>
                <mime:part>
                    <soap:body parts="payload" use="literal"/>
                </mime:part>
                <mime:part>
                    <mime:content part="bin" type="application/octet-stream"/>
                </mime:part>
            </mime:multipartRelated>
      </wsdl:input>
      
    6. リクエスト/レスポンス・メッセージのMIMEパートを追加します。

      <wsdl:message name="BPELProcess1RequestMessage">
          <wsdl:part name="payload" element="ns1:purchaseOrder" />
          <!--add below part-->
          <wsdl:part name="bin" type="xsd:base64Binary"/>
      </wsdl:message>
      
    7. WSDL定義にネームスペースを追加します。

      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
      

完了すると、MIMEアタッチメントを参照するWSDLが表示されます。

<wsdl:definitions
  name="PhotoCatalogService"
  targetNamespace="http://examples.com/PhotoCatalog"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:types="http://examples.com/PhotoCatalog/types"
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
  xmlns:tns="http://examples.com/PhotoCatalog">
  <wsdl:message name="addPhotoRequest">
    <wsdl:part name="photo" type="xsd:hexBinary"/>
  </wsdl:message>
  <wsdl:message name="addPhotoResponse">
    <wsdl:part name="status" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="replacePhotoRequest">
    <wsdl:part name="oldPhoto" type="xsd:string"/>
    <wsdl:part name="newPhoto" type="xsd:hexBinary"/>
  </wsdl:message>
  <wsdl:message name="replacePhotoResponse">
    <wsdl:part name="status" type="xsd:string"/>
  </wsdl:message>
  <wsdl:portType name="PhotoCatalog">
    <wsdl:operation name="addPhoto">
      <wsdl:input message="tns:addPhotoRequest"/>
      <wsdl:output message="tns:addPhotoResponse"/>
    </wsdl:operation>
    <wsdl:operation name="replacePhoto">
      <wsdl:input message="tns:replacePhotoRequest"/>
      <wsdl:output message="tns:replacePhotoResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="PhotoCatalogBinding" type="tns:PhotoCatalog">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="addPhoto">
      <wsdl:input>
        <mime:multipartRelated>
          <mime:part>
            <soap:body use="literal"/>
          </mime:part>
          <mime:part>
            <mime:content part="photo"
                          type="image/jpeg"/>
          </mime:part>
        </mime:multipartRelated>
      </wsdl:input>
      <wsdl:output>
        <mime:multipartRelated>
          <mime:part>
            <soap:body use="literal"/>
          </mime:part>
          <mime:part>
            <mime:content part="status" type="text/plain"/>
            <mime:content part="status" type="text/xml"/>
          </mime:part>
        </mime:multipartRelated>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="replacePhoto">
      <wsdl:input>
        <mime:multipartRelated>
          <mime:part>
            <soap:body parts="oldPhoto" use="literal"/>
          </mime:part>
          <mime:part>
            <mime:content part="newPhoto"
                          type="image/jpeg"/>
          </mime:part>
        </mime:multipartRelated>
      </wsdl:input>
      <wsdl:output>
            <soap:body parts="status" use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
</wsdl:definitions>
51.1.1.2.4 パフォーマンス・オーバーヘッドとパス・スルー・アタッチメント

Oracle Mediatorはステートレスであるため、パス・スルー・アタッチメントに関するパフォーマンス・オーバーヘッドはありません。ただし、Oracle BPEL Process Managerでは、アタッチメントをデハイドレーション(圧縮して格納)するため、パス・スルー・アタッチメントの場合でもパフォーマンス・オーバーヘッドがあります。Oracle BPEL Process Managerでアタッチメントを一定の期間使用すると、SOAインフラストラクチャ・スキーマが最大サイズまで増加し、メモリーの問題が発生する可能性があります。大規模アタッチメントに対応するために、SOAインフラストラクチャ・スキーマに対するデータベース表領域を適切に拡張することをお薦めします。同時に、purgeスクリプトを使用して、表の添付とともに完了インスタンスをパージすることもできます。

パージ・スクリプトの詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。

表領域の拡張の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』表領域の拡張による実行時の問題の回避に関する項を参照してください。

同じコンポジット内の1番目のBPELプロセスが2番目のBPELプロセスをコールするシナリオでは、2番目のBPELプロセスは同じアタッチメントを再度デハイドレーションしません。

コンポジット1の1番目のBPELプロセスがコンポジット2の2番目のBPELプロセスを起動し、最適化が無効化されているシナリオでは、コンポジット1がコンポジット2へのSOAPコールを実行します。2番目のBPELプロセスがアタッチメントをデハイドレーションします。

51.1.1.2.5 アタッチメントをストリーミングするためのプロパティ

アタッチメントをストリームするには、composite.xmlファイルに次のプロパティを追加します。最適化が有効化されている場合は、SOAPコールのかわりにネイティブ・コールが使用されます。次の例に詳細を示します。

<binding.ws
port="http://services.otn.com#wsdl.endpoint(MIMEService/MIMEService)"
xmlns:ns="http://xmlns.oracle.com/sca/1.0"
streamIncomingAttachments="true" streamOutgoingAttachments="true">
<!--Add this prop to reference bindings to make a SOAP call. -->
<property name="oracle.webservices.local.optimization">false</property>
</binding.ws>

oracle.webservices.local.optimizationプロパティの詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』コンポジット間呼出しでのポリシー・アタッチメントおよびローカルの最適化に関する項およびローカルの最適化の構成に関する項を参照してください。

ノート:

Oracle Web Services Manager (OWSM)では、ストリームのアタッチメントに関するポリシーの確認や実施は行いません。OWSMの詳細は、『Webサービスの管理』を参照してください。

51.1.1.2.6 SOA Webサービスのバインディング・レイヤーからのストリーミング・アタッチメント

SOA Webサービス(WS)のバインディング・レイヤーからのアタッチメントをストリーミングすると、次の例に示すエラーが発生する可能性があります。

java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:2271)
        at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
        at
java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
        at
java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
        at

このエラーを解決するには、次のプロパティをcomposite.xmlファイルのサービス・コンポーネントおよび参照バインディング・コンポーネントに追加します。

  • streamIncomingAttachments="true"

  • streamOutgoingAttachments="true"

これらのプロパティの設定の詳細は、前の項を参照してください。

51.1.1.2.7 SOAPアタッチメントのコンテンツの読取りおよびエンコード

BPELプロセスでは、ora:getAttachmentContent関数がSOAPアタッチメントのコンテンツを読み取り、そのデータをBase64形式でエンコードします。そのためには、BPEL変数をSOAPアタッチメントのhrefを指定する引数として指定します。次の例は、この関数の使用方法を示しています。

<copy>
   <from expression="ora:getAttachmentContent('input','bin')"/>
   <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:attachment/task:content"/>
</copy>

前の例では、"input/bin"変数にhrefが格納された添付コンテンツを、Base64でエンコードされた形式のcontent変数にコピーしています。

51.1.1.2.8 アタッチメント・ストリームの送信

Oracle BPEL Process Managerでは、複数のレシーバへのアタッチメント・ストリームの送信がサポートされています。Oracle BPEL Process Managerで複数のレシーバにストリームを送信する場合は、readBinaryFromFile XPath関数を使用してデータベースからアタッチメント・ストリームを読み取り、そのストリームを適切なターゲットに渡す必要があります。

デフォルトの構成では、Oracle Mediatorはアタッチメント・ストリームを1つのターゲット・レシーバにのみ渡すことができ、これは別のコンポーネントやWebサービス/アダプタの場合があります。2番目のターゲットはアタッチメントを受信できません。Oracle Mediatorコンポーネントに対してpersistStreamAttachmentプロパティを定義した場合、Oracle Mediatorではアタッチメント・ストリームを複数のターゲット・レシーバに渡すことができます。

Oracle Mediatorでは、アタッチメントが含まれているソース・メッセージが複数のターゲット・レシーバによって共有されている場合、ストリーミング・アタッチメントにpersistStreamAttachmentプロパティが必要です。複数のターゲットに対するアタッチメントのストリーミングを有効にするには、composite.xmlでこのプロパティをtrueに設定します。次の例に詳細を示します。

component name="Mediator1">
   <implementation.mediator src="Mediator1.mplan"/>
   <property name="persistStreamAttachment">true</property>
</component>
51.1.1.2.9 Oracle Mediatorでのアタッチメントのパス・スルー設定のオーバーライド

Oracle Mediatorでは、パス・スルーの(つまり、トランスフォーメーションや割当てのルールが含まれない)Oracle Mediatorコンポーネントのアタッチメントはターゲット・レシーバに自動的に伝播されますが、パス・スルーでないOracle Mediatorコンポーネントのアタッチメントは伝播されません。passThroughAttachmentプロパティを使用して、アタッチメント専用のパス・スルー設定をオーバーライドできます。このプロパティをtrueに設定すると、すべてのアタッチメントがターゲット・レシーバに暗黙的にコピーされます。

パス・スルーでないOracle Mediatorコンポーネントの場合は、このプロパティを使用してアタッチメントを伝播し、パス・スルーのOracle Mediatorコンポーネントの場合は、このプロパティを使用してアタッチメントをブロックします。パス・スルー・アタッチメントのオーバーライドを実装するには、このプロパティをプロジェクトのcomposite.xmlファイルのOracle Mediatorコンポーネントに対応するcomponent要素に追加します。パス・スルーでないOracle Mediatorコンポーネントをオーバーライドするには、プロパティをtrueに設定します。パス・スルー・コンポーネントをオーバーライドするには、falseに設定します。次の例に詳細を示します。

<component name="Mediator">
    <implementation.mediator src="Mediator.mplan"/>
    <property name="passThroughAttachment">true</property>
</component>
51.1.1.2.10 同期フローを使用したアタッチメントの共有

Oracle BPEL Process Managerベースのコンポジットで同期フローを使用してアタッチメントを共有する場合は、同じエンドツーエンドのトランザクションを使用する必要があります。これは、コロケートされ、ローカル・コールまたは最適化されたコールを使用するコンポジットに適用できます。これを実行するには、コール・チェーンでコールされるすべてのBPELコンポーネント(コール先)に、次の例に示すプロパティを設定します。

<property name="bpel.config.transaction" many="false"
type="xs:string">required</property>

このようなコンポジットが同じトランザクション・コンテキストの一部として実行されない場合、コール・チェーンの最初のBPELコンポーネントで保存されたアタッチメント・データはコール・チェーンの他のBPELコンポーネントに表示されません。さらに、そのコンポジットではデータベースがロックされ、次のタイムアウト例外が発生します。

"ORA-02049: timeout: distributed transaction waiting for lock"
51.1.1.2.11 ファイル/FTPアダプタのアタッチメント・オプション

このユースケースでは、アダプタがバイナリ・データをデータベース・ストアにストリームし、サービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhrefを公開します。表51-6に詳細を示します。

表51-6 機能

機能 説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

アタッチメントのフィルタおよびトランスフォーメーションはサポートされていません。

ファンアウト

サポートされています。

バインディング

アダプタが非XMLをデータベースにバイナリ・ラージ・オブジェクト(BLOB)としてストリームし、そのキーをサービス・エンジンに渡します。

Oracle BPEL Process Manager/Oracle Mediator

サポートされています。

チューニング

  • Oracle SOA Suiteスキーマのデータベース表領域を拡張します。

  • メッセージ処理の完了後にアタッチメントを削除します。

ドキュメント

『テクノロジ・アダプタの理解』を参照してください。

アウトバウンド・ファイル・アダプタを使用したアタッチメントの書込み

次の例は、ファイル・アダプタを使用してアタッチメントをディスクに書き込むことができるサンプル・スキーマを示しています。

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://xmlns.oracle.com/attachment"
            targetNamespace="http://xmlns.oracle.com/attachment"
            elementFormDefault="qualified">
            <xsd:element name="attach">
              <xsd:complexType>
                 <xsd:attribute name="href" type="xsd:string"/>
              </xsd:complexType>
  </xsd:element>
</xsd:schema>

フローでOracle Mediatorを使用する場合は、Oracle Mediatorのassignを使用して、ソース(Oracle Mediator)のアタッチメント・パートをターゲット(ファイル・アダプタ)にマップします。

Oracle BPEL Process Managerを使用すると、アタッチメントがデハイドレーション・ストアに書き込まれ、処理速度が低下します。

ora:doStreamingTranslate XPath関数を使用したアタッチメントの変換

ora:doStreamingTranslate XPath関数の使用は、Oracle BPEL Process ManagerまたはOracle Mediatorサービス・コンポーネント内でアタッチメントを変換する場合にのみお薦めします。この関数は、アタッチメントの場所がサーバー上の相対パスで指定されることを想定しています。また、受信アタッチメント・ストリームを変換できません。

この関数の詳細は、「doStreamingTranslate」を参照してください。

51.1.1.2.12 Oracle B2Bアタッチメント

このユースケースでは、Oracle B2Bがバイナリ・データをデータベースに格納し、Oracle B2B定義のXSDに基づいてサービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhrefを公開します。Oracle B2Bプロトコルがアタッチメントを定義します。表51-7に詳細を示します。

表51-7 機能

機能 説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

アタッチメントのフィルタおよびトランスフォーメーションはサポートされていません。

ファンアウト

サポートされています。

バインディング

Oracle B2Bが、アタッチメントをhrefキーとしてサービス・エンジンに渡します。

チューニング

Oracle SOA Suiteスキーマのデータベース表領域を拡張します。

51.1.1.3 SOAコンポジット・アプリケーションとのMTOM最適化メッセージの送受信

SOAコンポジット・アプリケーションでは、MTOM (MIMEバイナリ)最適化メッセージを送受信するように、サービスおよび参照のバインディング・コンポーネントにOracle WS-MTOMポリシーを添付する必要があります。Oracle WS-MTOMポリシーにサービス・バインディング・コンポーネント(composite.xmlファイル内のbinding.wsの下に定義)が構成されている場合は、Oracle SOA SuiteのMTOMメッセージ処理機能が使用されます。Oracle WS-MTOMポリシーに参照バインディング・コンポーネント(これもcomposite.xmlファイル内のbinding.wsの下に定義)が構成されている場合は、Oracle SOA SuiteはMTOM最適化メッセージを送信します。

MTOMアタッチメントについては、次の点に注意してください。

  • 添付をインラインにエンコードしている場合は、ファイルへの添付の書込みにファイル・アダプタを使用しないことをお薦めします。

  • デフォルトのmtomThreshold値は1024バイトで、変更できません。添付が1024バイト未満の場合、アウトバウンド構成については、Oracle SOA Suiteは添付をインライン添付として送信します。サイズが1024バイトを超える場合は、添付はメッセージ内のhref属性のアタッチメント・パートとして送信され、ワイヤ上のWSDL定義形式として送信されます。ただし、(別のWebサービス・プロバイダからなどの)着信リクエストに小さいバイナリ・データ(サイズが1024バイト未満)のxop hrefノードがある場合、Oracle SOA Suiteは、フロー・トレースでペイロード内の同じhref属性を使用します。たとえば:

    <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
     href="cid:e29caf23dc8045908451fdfaafa26dce" />
    
  • コンポジットのサービス・バインディング・コンポーネントにOracle WS-MTOMポリシー参照が含まれていない場合は、サービスで非MTOMメッセージが受入れ可能であることを示します。これは、コール元のコンポジット(該当する参照バインディング)にOracle WS-MTOMポリシー参照がなく、そのサービスに非MTOMメッセージを送信可能であることを示します。

  • 添付のMTOMストリーミングはOracle SOA Suiteではサポートされません。

  • MTOMアタッチメントは、Webサービス・バインディングでのみサポートされています。他のバインド(HTTPバインディングなど)はサポートされません。

  • Oracle Mediatorパス・スルー・シナリオがサポートされます。Oracle Mediatorにトランスフォーメーション文も割当て文も含まれていない場合、これはパス・スルーOracle Mediatorと呼ばれます。受信したメッセージと添付は、ペイロードと添付を変更せずにターゲットに伝播されます。同じメッセージ内の複数のMTOMアタッチメントも同様にOracle SOA Suiteで送受信されます。

  • ストリーミングとMTOMメッセージ処理機能の両方を添付の送受信に使用しないことをお薦めします。ストリーミングまたはMTOMメッセージ処理機能のどちらかを使用してください。

    ノート:

    入力がtext/xmlタイプの場合、MTOM形式でのファイル送信に大幅なファイル・サイズの減少はありません。

  • ベスト・プラクティスとしては、バイナリ・データの伝播にXSLTマップ・エディタを使用しないことをお薦めします。かわりに、assignアクティビティを使用します。バイナリ・データの伝播にスタイルシートを使用する必要がある場合は、xsl:copy-ofによる方法(copy-ofにより属性を含むすべてをコピー)を使用するか、ソースからターゲットへ属性をコピーするカスタム関数を使用することをお薦めします。

  • MTOMアタッチメントのサイズはGB単位にはできません。かわりに、大きいサイズの添付にはアタッチメント付きのSOAPストリーミング機能を使用します。詳細は、「アタッチメント付きのSOAP」を参照してください。

51.1.1.3.1 SwAおよびMTOM最適化アタッチメントをデータベースに格納するためのシナリオ

BPELプロセスを含むSOAコンポジット・アプリケーションがMTOM最適化SOAPメッセージを受信すると、そのMTOM最適化要素(<xop href="">が付いたもの)それぞれのアタッチメントのコンテンツがデハイドレーション・ストアに格納されます。同様に、1つ以上のアタッチメントとともにアタッチメント付きのSOAPメッセージ(SwA)メッセージを受信すると、各アタッチメントはデハイドレーション・ストアに格納されます。これらのアタッチメントは、データベース内でそれらを識別するhref属性を使用する参照によって、受け渡すことができます。実際に、このhref属性によって、これらのアタッチメント要素のテキスト・コンテンツのすべてが削除され、置換されます。MTOM最適化メッセージの場合、<xop>要素の受信href属性の同じ値が再使用されます。同様に、SwAの場合、アタッチメント要素のhref属性が再使用されます。

メッセージがBPELプロセス・サービス・エンジンに配信されるとき(受信メッセージがDLV_MESSAGE表に保存されるとき)に、アタッチメントはデハイドレーション・ストアに格納されます。したがって、それは、composite.xmlファイルでbpel.config.oneWayDeliveryPolicyasync.persist (デフォルト値)に設定されている一方向および非同期BPELプロセスに対してのみ適用できます。

アタッチメントは、次のユース・ケースでは永続化されません。

  • SOAPメッセージが、bpel.config.oneWayDeliveryPolicysyncまたはasync.cacheに設定した同期BPELプロセスまたは一方向/非同期BPELプロセスによって受信された場合。

  • インライン・バイナリ・コンテンツ付きのSOAPリクエスト内のすべての要素のコンテンツが永続化されず、そのままで渡されます。(つまり、それらには子要素<xop:Include>はないが、子としてbase64エンコード文字列があります。)MTOM最適化メッセージは、インラインbase64データを持つ1つ以上の要素と、いずれかのレベルでXOPパッケージ化された1つ以上の要素の組合せにすることができます。

ノート:

サービス・バインディング・コンポーネントがMTOM対応であっても、それが、自動的に、そのサービスがMTOM最適化メッセージを受信することを示すわけではありません。コール元のサービスまたはアプリケーションは、MTOM最適化メッセージが確実に受信されるようにするには、ワイヤを介してそのメッセージを送信する必要があります。MTOM対応バインディングは、通常の非MTOMメッセージも受信できます。したがって、それが受信したときに、サービスに着信したSOAPリクエストには、データベースに保存されない非最適化インライン・バイナリ・データ要素が含まれていることがあります。

MTOM最適化要素またはSwAアタッチメントのコンテンツの値が実行時にhref属性によって置換される場合でも、それらの設計時のWSDLが変更されることありません。Oracle JDeveloperでこれらの変更は表示されません。これらの要素タイプ定義が、hexBinary、base64Binaryなどから、href属性を持つ空のコンテンツの定義に変更されることはありません。

ただし、これは、ユーザーとって透過的です。たとえば、assignアクティビティを使用してそれらのコンテンツ全体をコピーすると、実行時にhref値がコピーされます。同様に、Webサービス、アダプタなどアウトバウンド参照を起動すると、Oracle SOA Suiteによってhref属性が実際のデータに自動的に解決され、起動が実行されます。

51.1.1.4 繰返しコンストラクトを使用した大規模XMLの処理

この項では、繰返しコンストラクトを使用して大規模XMLを処理する場合のユースケースについて説明します。

51.1.1.4.1 ファイル/FTPアダプタによるデバッチ

このユースケースでは、インバウンド・アダプタがソース・ドキュメントを複数のバッチのレコードに分割し、各バッチがコンポジット・インスタンスを起動します。表51-8に詳細を示します。

表51-8 機能

機能 説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポートされています。

ファンアウト

サポートされています。

バインディング

ファイル/FTPアダプタが、ソース・ドキュメントをネイティブのXSD (NXSD)定義に基づいて小さいチャンクにデバッチします。

Oracle BPEL Process Manager/Oracle Mediator

サポートされています。

チューニング

ペイロード全体のサイズと比較して繰返し構造の方が小さいペイロードであるシナリオの場合は、繰返し構造に対してXSLTがサポートされます。assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティでの置換をお薦めします。

ドキュメント

『テクノロジ・アダプタの理解』を参照してください。

51.1.1.4.2 ファイル/FTPアダプタによるチャンク

このユースケースでは、BPELプロセス内のループが一度に1チャンクのレコードとプロセス(つまりカーソル)を読み取ります。表51-9に詳細を示します。

表51-9 機能

機能 説明

セキュリティ

サポートされています。

フィルタ/トランスフォーメーション/割当て

サポートされています。

ファンアウト

サポートされています。

Oracle BPEL Process Manager/Oracle Mediator

Oracle BPEL Process Managerでのみサポート対象。

ドキュメント

『テクノロジ・アダプタの理解』を参照してください。

51.1.1.5 複雑な構造の大規模XML文書の処理

この項では、複雑な構造の大規模XML文書を処理する場合のユースケースについて説明します。

51.1.1.5.1 ファイル/FTPアダプタによるストリーム

このユースケースでは、Oracle SOA Suiteを介して大規模XMLファイルをストリームします。表51-10に詳細を示します。

表51-10 機能

機能 説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポート対象ですが、問題を回避するために最適化する必要があります。

ファンアウト

サポートされています。

バインディング

アダプタがペイロードをデータベースにSDOMとしてストリームし、そのキーをサービス・エンジンに渡します。

ドキュメント

『テクノロジ・アダプタの理解』を参照してください。

51.1.1.5.2 Oracle B2Bストリーム

このユースケースでは、大規模XMLファイルがSDOMとしてOracle B2BからOracle SOA Suiteに渡されます。これが実行されるのは、大規模ペイロード・サイズがOracle B2Bユーザー・インタフェースで定義されている場合のみです。表51-11に詳細を示します。

表51-11 機能

機能 説明

セキュリティ

なし。

フィルタ/トランスフォーメーション/割当て

サポート対象ですが、問題を回避するために最適化する必要があります。

ファンアウト

サポートされています。

バインディング

Oracle B2BがペイロードをデータベースにSDOMとしてストリームし、そのキーをサービス・エンジンに渡します。

Oracle BPEL Process Manager/Oracle Mediator

XPath拡張関数を使用してペイロードを操作できます。

51.1.2 大規模ドキュメントの同時処理に関する制限

この項では、大規模ドキュメントの同時処理に関する制限について説明します。

51.1.2.1 大規模ペイロードを処理するための不透明(Opaque)スキーマ

大規模なペイロードを処理するために不透明(Opaque)スキーマを使用する場合は、制限があります。不透明(Opaque)トランスレータのデータ全体が、単一のBase64エンコード文字列に変換されます。不透明(Opaque)スキーマは通常、比較的小さいデータに使用されます。大規模なデータの場合は、不透明(Opaque)トランスレータのかわりにアタッチメント機能を使用してください。

51.1.3 SOAコンポジット・アプリケーション用JVMメモリーのサイズ設定の推奨事項

サイズが100MB以上のペイロードでメッセージを送信する場合、適切にチューニングされていないとJVMヒープ・サイズの制限を超える場合があります。

たとえば、Oracle advanced queueing (AQ) JMSを使用してイベント配信ネットワーク(EDN)で大規模ペイロードを送信する場合、最初に標準的なメッセージ・ペイロード・サイズおよび可能性のある最大のメッセージ・サイズでテストして、最大メモリー値を設定してください。少ないメモリー値を使用することでORACLE.JMS.AQJMSEXCEPTIONエラーが発生する可能性があります。たとえば、100MBのペイロードの送信では、JTAタイムアウトおよび最大メモリーを5GBに変更することをお薦めします。

JVMヒープ・サイズのチューニングの詳細は、「チューニングに関する一般的な推奨事項」および『Oracle WebLogic Serverのパフォーマンスのチューニング』Java HotSpot VMヒープ・サイズのオプションに関する項を参照してください。

51.1.4 チューニングに関する一般的な推奨事項

この項では、チューニングに関する一般的な推奨事項について説明します。

Oracle SOA Suiteのチューニングとパフォーマンスの詳細は、『パフォーマンスのチューニング』を参照してください。

51.1.4.1 一般的な推奨事項

この項では、チューニングに関する一般的な推奨事項について説明します。

  • Oracle WebLogic Server管理コンソールで、JTAトランザクションのタイムアウトを500秒に増やします。手順は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』接続タイムアウトの解決に関する項を参照してください。

  • Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーション・レベルの監査レベルを「オフ」または「本番」に設定します。詳細は、「大規模なペイロードの処理に対する監査レベルの設定」を参照してください。

  • setDomainEnv.sh (Linux)またはsetDomainEnv.bat (Windows)のJAVA_OPTIONSで次の行を非コメント化して、サーバーを再起動します。この行が存在しない場合は追加します。この設定を行わないと、大規模ペイロード・シナリオは、デハイドレーション・データ・ソースに対してResourceDisabledExceptionエラーで失敗します。

    -Dweblogic.resourcepool.max_test_wait_secs=30
    
  • 次のように、setSOADomainEnv.shまたはsetDomainEnv.batのヒープのサイズを更新します。

    DEFAULT_MEM_ARGS="-Xms1024m -Xmx2048m"
    
  • 最適化されたトランスレーション機能(ora:doTranslateFromNativeora:doTranslateToNativeora:doStreamingTranslateなど)を使用します。この機能は大規模なペイロードのトランスフォーメーションおよびトランスレーション実行時に使用できます。

    これらの関数の詳細は、「XPath拡張関数」を参照してください。

  • 大規模アタッチメントを処理するためにデータ・ファイルを拡張します。

  • Oracle WebLogic Server管理コンソールでSocketException: Broken pipeエラーに対するHTTP POSTタイムアウトを増やします。「HTTP POSTタイムアウトを増やす」を参照してください

  • 大規模ドキュメントの処理時にタイムアウト・エラーが発生した場合は、次のタスクを実行します。

    • タイムアウト・プロパティ値を増やします。

    • 「スタック・スレッド最大時間」プロパティ値を増やします。

    詳細は、「タイムアウト値を増やす」を参照してください。

51.1.4.1.1 HTTP POSTタイムアウトを増やす

Oracle WebLogic Server管理コンソールでSocketException: Broken pipeエラーに対するHTTP POSTタイムアウトを増やします。

  1. 「ドメイン構造」から、「soainfra」「サーバー」「server_name」「プロトコル」「HTTP」の順に選択します。

  2. 「POSTタイムアウト」フィールドに、120 (最大)と入力します。

51.1.4.1.2 タイムアウト値を増やす

タイムアウト・プロパティ値は次のように増加します。

  1. Oracle Web Services Manager管理コンソールにログインします。

  2. 「デプロイメント」「soa-infra」「EJB」の順に移動します。

  3. 次に示すBeanをそれぞれクリックし、「構成」を選択してタイムアウト値を増加します。

    • BpelEngineBean

    • BpelDeliveryBean

    • CompositeMetaDataServiceBean

「スタック・スレッド最大時間」プロパティ値を増やすには:

手順は、『Oracle WebLogic Serverのパフォーマンスのチューニング』「WebLogic 8.1のスレッド・プール・モデルの使用」を参照してください。

51.1.4.2 大規模なペイロードの処理に対するOracle Enterprise Managerからの監査レベルの設定

大規模なペイロードを処理する際は、特定のコンポジットに対する監査レベルのロギングをオフにしてください。Oracle Enterprise Manager Fusion Middleware Controlで、コンポジットの監査レベルのオプションを「オフ」または「本番」に設定できます。コンポジットの監査レベルのオプションを「開発」に設定した場合は、大規模なペイロード全体がインメモリー文字列にシリアライズされ、メモリー不足のエラーが発生する可能性があります。

監査レベルの設定の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。

51.1.4.3 Oracle BPEL Process ManagerおよびOracle Mediatorでのassignアクティビティの使用

Oracle BPEL Process ManagerまたはOracle Mediatorで、大規模なペイロードを操作するためにassignアクティビティを使用する場合は、メッセージ全体を割り当てないでください。かわりに、ペイロードの必要な部分のみを割り当ててください。

また、Oracle BPEL Process Managerでassignアクティビティを使用する場合は、可能なかぎりプロセス変数ではなくローカル変数を使用することをお薦めします。ローカル変数は、BPELプロセスのスコープ内に制限されます。これらの変数は、スコープを閉じた後はメモリーおよびデータベースから削除されます。ただし、グローバル変数のライフ・サイクルは、インスタンスのライフ・サイクルと関連付けられています。これらの変数は、インスタンスが完了するまで、メモリー内またはディスク内にとどまります。したがって、プロセス変数またはグローバル変数より、ローカル変数をお薦めします。

51.1.4.4 大規模ペイロード(Oracle BPEL Process Manager)でのXSLTトランスフォーメーションの使用

11gリリース1 11.1.1.3までは、Oracle BPEL Process ManagerでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFileプロパティが追加されました。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFileyesに設定します。デフォルト値はnoです。

このプロパティは、次のBPEL XPath関数を使用する場合に適用可能です。

  • ora:processXSLT('template','input','properties'?)

  • ora:doXSLTransformForDoc('template','input','name', 'value')

大きなXML文書をXSLTを使用して処理するよう構成するには:

  1. BPEL共通プロパティ・スキーマを作成します。たとえば:
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema targetNamespace ="http://schemas.oracle.com/service/bpel/common" 
              xmlns:common = "http://schemas.oracle.com/service/bpel/common"
              xmlns:xs = "http://www.w3.org/2001/XMLSchema"
              elementFormDefault="qualified" blockDefault="#all">
       
      <xs:element name="serviceProperties"  type="common:PropertiesType"/> 
      <xs:element name="anyProperties"  type="common:ArrayOfNameAnyTypePairType"/> 
         <xs:complexType name="NameValuePairType">
        <xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="value" type="xs:string"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfNameValuePairType">
        <xs:sequence>
          <xs:element name="item" type="common:NameValuePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="NameAnyTypePairType">
        <xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="value" type="xs:anyType"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfNameAnyTypePairType">
        <xs:sequence>
          <xs:element name="item" type="common:NameAnyTypePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>  
       <xs:complexType name="PropertiesType">
        <xs:sequence>
          <xs:element name="property" type="common:NameValuePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfAnyTypeType">
        <xs:sequence>
          <xs:element name="item" type="xs:anyType" maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>   
    </xs:schema>
    
  2. BPELプロセス内で、importセクションにネームスペースを追加します。
    xmlns:common = "http://schemas.oracle.com/service/bpel/common"
    
  3. グローバル変数を作成します(この例では、propertiesXMLVarという名前で作成):
    <variable name="propertiesXMLVar" element="common:anyProperties"/>
    
  4. streamResultToTempFileプロパティをyesに設定します。このassignアクティビティはXSLTトランスフォーメーションの実行前に存在している必要があります。
    <assign name="Assign_xsltprop">
          <copy>
            <from>
               <common:anyProperties>
                 <common:item>
                       <common:name>streamResultToTempFile</common:name>
                       <common:value>yes</common:value>
                 </common:item>
               </common:anyProperties>
            </from>
            <to variable="propertiesXMLVar"/>
          </copy>
    </assign>
51.1.4.5 大規模ペイロード(Oracle Mediator)でのXSLTトランスフォーメーションの使用

11gリリース1 11.1.1.3までは、Oracle MediatorでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFileプロパティが追加されました。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFileyesに設定します。デフォルト値はnoです。

ノート:

このプロパティは、大規模なペイロードを処理する場合にのみお薦めします。このプロパティを有効にすると、通常のペイロードのパフォーマンスが低下する可能性があります。

大きなXML文書をXSLTを使用して処理するよう構成するには:

  1. Oracle MediatorコンポーネントでOracle SOA Suiteプロジェクトを作成します。
  2. 「ソース」ビューでプロジェクトのcomposite.xmlファイルを開きます。
  3. composite.xmlファイルで、大規模なXMLドキュメントを処理するOracle Mediatorコンポーネントを定義するコンポーネント要素までスクロールし、streamResultToTempFileプロパティを追加します。次に示すように、プロパティをyesに設定します。
    <component name="Mediator1">
       <implementation.mediator src="Mediator1.mplan"/>
       <property name="streamResultToTempFile">yes</property>
    </component>
    
  4. ファイルを保存して閉じます。
51.1.4.6 繰返し構造に対するXSLTトランスフォーメーションの使用

ペイロード全体と比較して繰返し構造の方がペイロードが小さい場合は、現在のXSLT実装ではDOM全体がメモリーにマテリアライズされるため、XSLTトランスフォーメーションの使用をお薦めします。たとえば、PurchaseOrder.LineItem.Supplier(大規模ペイロードの一部分)を使用します。

また、assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティを使用して置換することもできます。シャドウ・コピーではDOMはマテリアライズされませんが、ソース文書を指し示すシャドウ・ノードが作成されます。

また、大規模なペイロードのトランスフォーメーション/トランスレーション実行時に、次に示す最適化されたトランスレーション機能を使用することもできます。

  • ora:doTranslateFromNativeまたはmed:doTranslateFromNative

  • ora:doTranslateToNativeまたはmed:doTranslateToNative

  • ora:doStreamingTranslateまたはmed:doStreamingTranslate

これらの関数の詳細は、「XPath拡張関数」および『テクノロジ・アダプタの理解』を参照してください。

51.1.4.7 Oracle B2Bでの大規模ドキュメントの処理

Oracle B2Bで大規模ドキュメントを処理する場合は、次のパラメータをチューニングします。

  • mdsCache

  • キャッシュ・サイズ

  • プロトコル・メッセージ・サイズ

  • スレッド数

  • スタック・スレッド最大時間

  • 表領域

  • 大きなペイロード・サイズ

次の各項では、Oracle B2Bで大規模ドキュメントを処理する場合に設定する必要があるパラメータについて説明します。詳細は、『Oracle B2Bの使用』大規模なペイロードを処理するためのドキュメント・ストリームの使用に関する項を参照してください。

51.1.4.7.1 MDSインスタンス・キャッシュ・サイズ

Oracle Metadata Services (MDS)リポジトリのインスタンス・キャッシュ・サイズを設定するには、Oracle Enterprise Manager Fusion Middleware Controlを使用します。このプロパティは、メタデータのサイズに依存します。メタデータまたはエンドポイントのカウントに基づいて値を指定します。デフォルト値は100000です。詳細は、『Oracle B2Bの使用』Fusion Middleware ControlでのB2B構成プロパティの設定に関する項を参照してください。

51.1.4.7.2 プロトコル・メッセージ・サイズ

Oracle B2Bで10MBを超えるメッセージを送受信する場合、またはインポート/エクスポート構成が10MBを超える場合は、Oracle WebLogic Server管理コンソールで次の設定を変更します。

プロトコル・メッセージ・サイズを構成するには:

  1. 「ドメイン構造」で、「環境」「サーバー」の順に選択します。
  2. 表の「名前」列で、「soa_server」を選択します。
  3. 「プロトコル」タブを選択します。
  4. 「最大メッセージ・サイズ」の値を変更します。

この設定は、$DOMAIN_HOME/config/config.xmlファイルで追加または変更することもできます。サーバー名構成の次で追加または変更します。次に例を示します。

<name>soa_server1</name>
<max-message-size>150000000</max-message-size> 

ノート:

デフォルトで、max-message-sizeconfig.xmlファイルで使用可能ではありません。

51.1.4.7.3 スレッド数

このパラメータは、Oracle B2Bのメッセージ処理機能を向上させるため、Oracle Enterprise Manager Fusion Middleware Controlで設定する必要があります。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』Oracle B2Bサーバーのプロパティの構成に関する項を参照してください。

  • b2b.inboundThreadCount

  • b2b.inboundSleepTime

  • b2b.outboundThreadCount

  • b2b.outboundSleepTime

  • b2b.defaultThreadCount

51.1.4.7.4 スタック・スレッド最大時間パラメータ

「スタック・スレッド最大時間」パラメータは、サーバーがスレッドをスタック状態であると判断するまでに、スレッドが継続的に動作している必要のある秒数をチェックします。Oracle WebLogic Server管理コンソールで次の設定を変更する必要があります。

スタック・スレッド最大時間パラメータを構成するには:

  1. 「ドメイン構造」で、「環境」「サーバー」の順に選択します。
  2. 表の「名前」列で、「soa_server」を選択します。
  3. 「チューニング」タブを選択します。
  4. 「スタック・スレッド最大時間」の値を変更します。
51.1.4.7.5 表領域

150MBを超える構成をデータ・ファイルに格納する必要がある場合は、次の例に示すように、データ・ファイルを拡張または追加して、表領域のサイズを増やす必要があります。

ALTER TABLESPACE sh_mds add DATAFILE 'sh_mds01.DBF' SIZE 100M autoextend on next
 10M maxsize unlimited;
ALTER TABLESPACE sh_ias_temp add TEMPFILE 'sh_ias_temp01.DBF' SIZE 100M autoextend
 on next 10M maxsize unlimited;
51.1.4.8 インバウンドWebサービスのメッセージ・サイズに対するサイズ制限の設定

インバウンドWebサービスのメッセージ・サイズにサイズ制限を設定する場合は、composite.xmlファイルでバインディング・コンポーネントのプロパティmax-message-sizeを構成します。プロパティ値は基礎となるWebサービス・インフラストラクチャで使用可能となり、値は受信メッセージ・サイズに対するテストに使用されます。指定した値を超えると、メッセージ・サイズが大きすぎることを示す例外がスローされ、トランザクションは処理されません。次の例に詳細を示します。

<composite name="LrgMsg" revision="1.0" label="2011-09-08_22-53-53_259"
 mode="active" state="on">
  <import namespace="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1"
   location="BPELProcess1.wsdl" importType="wsdl"/>
  <service name="bpelprocess1_client_ep" ui:wsdlLocation="BPELProcess1.wsdl">
     <interface.wsdl
 interface="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1# wsdl.interface
(BPELProcess1)"/>

<binding.ws port="http://xmlns.oracle.com/LargeMsg/LrgMsg/BPELProcess1
    #wsdl.endpoint(bpelprocess1_client_ep/BPELProcess1_pt)">
  <property name="max-message-size" type="xs:integer" many="false"
    override="may">4</property>
</binding.ws>
</service>

  <component name="BPELProcess1" version="1.1">
    <implementation.bpel src="BPELProcess1.bpel"/>
  </component>

  <wire>
    <source.uri>bpelprocess1_client_ep</source.uri>
    <target.uri>BPELProcess1/bpelprocess1_client</target.uri>
  </wire>
</composite>
51.1.4.9 XPath関数を使用したファイル・システムへの大規模なXSLT/XQuery出力の書込み

次の関数を使用して、大規模なXSLT/XQuery操作の結果をディレクトリ・システム内の一時ファイルに書き込むことができます。その後、ドキュメントは必要なときに一時ファイルからロードされます。これにより、ドキュメント全体をバイナリXMLとしてメモリーにキャッシュする必要がなくなります。

  • ora:processXSLT

  • ora:doXSLTransformForDoc

この機能を有効化にするには、ora:processXSLT関数でproperties引数を使用します。

ora:processXSLT('template','input','properties'?)

この引数の値は、XSLT内で、XSL変数からデータを抽出するのと同様な方法で取得します。properties引数は、次の例に示されているような構造のXML要素です。大きいペイロードの結果(10MBを超えるなど)に対しては、streamResultToTempFileyesに設定します。一時ファイルに書き込む必要のない小さいペイロードの結果には、このプロパティをデフォルト値のnoの設定のままにしておきます。

<propertiesXMLVar>
  <common:item  xmlns:common="http://schemas.oracle.com/service/bpel/common">
    <common:name>streamResultToTempFile</common:name>
    <common:value>yes</common:value>
  </common:item>
</propertiesXMLVar>

XSLT内で、名前streamResultToTempFileおよびその値yesを介して、このパラメータにアクセスできます。

Oracle BPEL Process Managerでは、ora:processXSLT('template','input','properties'?)にプロパティを移入するためにリテラルのassignが実行されます。

この関数の使用の詳細は、「processXSLT」を参照してください。

ora:doXSLTransformForDoc関数では、この機能を有効にするために、nameおよびvalueプロパティを設定します。

ora:doXSLTransformForDoc('template','input','name', 'value')

この関数では、namestreamResultToTempFileおよびvalueyesが渡されます。

この関数の使用の詳細は、「doXSLTransformForDoc」を参照してください。

51.2 大規模メタデータを処理する場合のベスト・プラクティス

この項では、大規模メタデータの処理に関する推奨事項について説明します。

51.2.1 BPELプロセスでの多数のアクティビティの処理に対する境界

BPELプロセスで実行できるアクティビティ数には制限があります。この制限を超えると、システム・メモリーが一杯になり、タイムアウトが発生する可能性があります。たとえば、次のパラメータを使用すると、タイムアウトによって2つのフォルト・インスタンスが発生します。

  • スレッド数: 100

  • 思考時間(秒数): 1

  • 受信リクエスト・メッセージ数: 1000

システム・メモリーの安定性を確保するために、受信リクエスト・メッセージ数を適切なレベルに保つようにしてください。

51.2.2 BPELプロセスでの多数のアクティビティの使用(flowNを使用しない場合)

多数のアクティビティ(たとえば、50,000)があるBPELプロセスをデプロイするには、次の設定が必要です。

MEM_ARGS: -Xms512m -Xmx1024m -XX:PermSize = 128m -XX:MaxPermSize = 256m
Number of Concurrent Threads = 20
Number of Loops = 5 Delay = 100 ms

この設定によって、flowNアクティビティを使用せずにwhileループのみを使用するBPELプロセスを、正常にデプロイおよび実行できるようになります。

51.2.3 BPELプロセスでの多数のアクティビティの使用(flowNを使用する場合)

多数のアクティビティ(たとえば、50,000)があるBPELプロセスをデプロイするには、次の設定が必要です。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m
Number of Concurrent Threads= 10
Number of Loops=5 Delay=100 ms

Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザで、StatsLastNプロパティを-1に設定します。

この設定によって、flowNアクティビティを使用するBPELプロセスを、正常にデプロイおよび実行できるようになります。

詳細は、「BPEL 1.1のflowNアクティビティによるflowアクティビティ数のカスタマイズ」、および『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』BPELプロセス・サービス・エンジン・プロパティの構成に関する項を参照してください。

51.2.4 複数シーケンスを含むフローの使用

7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m

ノート:

8000を超えるアクティビティがあるBPELプロセスをデプロイすると、Oracle BPEL Process Managerのコンパイルでエラーがスローされます。

51.2.5 単一シーケンスを含むフローの使用

7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。

USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=512m

ノート:

10,000を超えるアクティビティがあるBPELプロセスをデプロイすると、そのプロセスのコンパイルに失敗します。

51.2.6 シーケンスを含まないフローの使用

多数のアクティビティ(たとえば、5000まで)があるBPELプロセスを、正常にデプロイおよび実行できます。

BPELプロセスのコンパイルは、6000アクティビティの場合は失敗する可能性があります。

51.2.7 コンポジットの多数のOracle Mediator

単一のコンポジットに50を超えるOracle Mediatorを含めないことをお薦めします。環境にあわせて、JTAトランザクション・タイムアウトを高い値に増やします。

51.2.8 Oracle B2Bへの大規模データ・セットのインポート

大規模なデータ・セットのインポートには、ブラウザは使用せずにコマンドライン・ユーティリティを使用することをお薦めします。大規模なデータの構成には、次のユーティリティ・コマンドを使用してください。

  • purge: リポジトリ全体をパージします。

  • import: 指定したZIPファイルをインポートします。

  • deploy: 名前を指定してアグリーメントをデプロイします。名前を指定しない場合は、すべてのアグリーメントがデプロイされます。

ただし、purgeimportdeployオプションは、Oracle B2B構成の転送またはデプロイには使用しないことをお薦めします。

詳細は、『Oracle B2Bの使用』を参照してください。

51.3 多数のインスタンスを処理する場合のベスト・プラクティス

この項では、多数のインスタンスおよびフォルト・メトリックの処理に関する推奨事項について説明します。

51.3.1 パージ・スクリプトまたはOracle Enterprise Manager Fusion Middleware Controlを使用したインスタンスと拒否されたメッセージの削除

PL/SQLパージ・スクリプトを使用するか、Oracle Enterprise Manager Fusion Middleware Controlの「自動パージ」ページを使用して、大量のインスタンスと拒否されたメッセージを削除できます。

詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。