ヘッダーをスキップ
Oracle Fusion Middleware Oracle SOA Suite開発者ガイド
11g リリース1(11.1.1)
B56238-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

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

この章では、Oracle SOA Suiteで大規模ドキュメントとメタデータを管理する場合、および多数のインスタンスがある環境を管理する場合のベスト・プラクティスについて説明します。

項目は次のとおりです。

Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。

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

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

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

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

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

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

43.1.1.1.1 SOAPインライン

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

表43-1 機能

機能 説明

セキュリティ

サポート対象。

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

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

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


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


43.1.1.1.2 SOAPのMTOM

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

表43-2 機能

機能 説明

セキュリティ

サポート対象。

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

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

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


追加作業は不要です。


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

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

表43-3 機能

機能 説明

セキュリティ

サポート対象外。

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

パス・スルー。

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


サポート対象。不透明(Opaque)コンテンツは、assignアクティビティまたはtransformationアクティビティでは操作できません。


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

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

表43-4 機能

機能 説明

セキュリティ

サポート対象外。

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

パス・スルー。

ファンアウト

サポート対象。

Oracle B2B

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


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

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

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

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

表43-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サービスのコールバック・レスポンスの一部としてストリームすることはできません。

  • Oracle Mediator内の遅延ルーティング・ルールでは、アタッチメントの処理がサポートされていません。

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

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


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

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

ストリーム・アタッチメントは、埋込みアタッチメントと同様に、MIMEマルチパートのバイナリ形式に準拠しています。ワイヤ上では、ストリーム・アタッチメント付きのメッセージはアタッチメント付きの他のSOAPメッセージと同じです。

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

例43-1 ストリーム・アタッチメント付きのサンプル・メッセージ

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--

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

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

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

  2. Oracle MediatorのWSDLファイル内で、次の手順を実行します。

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

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

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

    4. 名前を入力します。

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

      例43-2 MIMEマルチパート

      <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. 例43-3に示すように、リクエスト/レスポンス・メッセージにMIMEパートを追加します。

      例43-3 リクエスト/レスポンス・メッセージの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. 例43-4に示すように、WSDL定義にネームスペースを追加します。

      表43-4 ネームスペース

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

完了すると、例43-5に示すように、MIMEアタッチメントを参照するWSDLが表示されます。

例43-5 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>

パフォーマンス・オーバーヘッドとパス・スルー・アタッチメント

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

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

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

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

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

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

<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 Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAコンポジット・アプリケーション・ポリシーの管理に関する項を参照してください。


注意:

Oracle Web Services Manager(OWSM)では、ストリームのアタッチメントに関するポリシーの確認や実施は行いません。OWSMの詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』を参照してください。

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

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

例43-7 ora:getAttachmentContent関数

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

例43-7では、href"input/bin"変数に格納されているアタッチメントのコンテンツを、コンテンツ変数にBase64エンコード形式でコピーしています。

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

Oracle Mediatorは、1つのターゲット・レシーバのみにアタッチメント・ストリームを渡すことができます。レシーバに指定できるのは、別のコンポーネントまたはWebサービス/アダプタです。2番目のターゲットはアタッチメントを受信できません。Oracle BPEL Process Managerでは、複数のレシーバへのアタッチメント・ストリームの送信がサポートされています。Oracle BPEL Process Managerで複数のレシーバにストリームを送信する場合は、readBinaryFromFile XPath関数を使用してデータベースからアタッチメント・ストリームを読み取り、そのストリームを適切なターゲットに渡す必要があります。

同期フローを使用したアタッチメントの共有

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

例43-8 bpel.config.transactionプロパティ

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

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

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

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

表43-6 機能

機能 説明

セキュリティ

なし。

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

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

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


サポート対象。

チューニング

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

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

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。


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

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

例43-9 アタッチメントをディスクに書き込むためのスキーマ

<?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のコンポジット内でアタッチメントを変換する場合にのみお薦めします。この関数は、アタッチメントの場所がサーバー上の相対パスで指定されることを想定しています。また、受信アタッチメント・ストリームを変換できません。

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

43.1.1.2.3 Oracle B2Bアタッチメント

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

表43-7 機能

機能 説明

セキュリティ

なし。

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

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

ファンアウト

サポート対象。

バインディング

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

チューニング

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


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

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

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

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

表43-8 機能

機能 説明

セキュリティ

なし。

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

サポート対象。

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


サポート対象。

チューニング

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

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。


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

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

表43-9 機能

機能 説明

セキュリティ

サポート対象。

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

サポート対象。

ファンアウト

サポート対象。

Oracle BPEL Process Manager/Oracle Mediator


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

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。


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

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

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

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

表43-10 機能

機能 説明

セキュリティ

なし。

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

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

ファンアウト

サポート対象。

バインディング

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

ドキュメント

『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。


43.1.1.4.2 Oracle B2Bストリーム

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

表43-11 機能

機能 説明

セキュリティ

なし。

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

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

ファンアウト

サポート対象。

バインディング

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

Oracle BPEL Process Manager/Oracle Mediator


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


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

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

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

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

これらの機能の使用方法については、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

43.1.2.2 ストリーミングMTOMアタッチメント

サービス・インフラストラクチャを介して渡されるストリーミングMTOMアタッチメントに対する受信リクエストは正規化されます。このようなメッセージの処理は、サービス・インフラストラクチャ・レイヤー内では最適化されません。

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

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

Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。

43.1.3.1 一般的な推奨事項

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

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

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

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

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

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

  • 大規模アタッチメントを処理するためにデータ・ファイルを拡張します。詳細は、『Oracle Database管理者ガイド』を参照してください。

    http://download-west.oracle.com/docs/cd/B28359_01/server.111/b28310/toc.htm
    
  • 大規模ドキュメントの処理時にタイムアウト・エラーが発生した場合は、次のタスクを実行します。

    • タイムアウト・プロパティ値の増加

    • 「スタック・スレッド最大時間」プロパティ値の増加

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

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

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

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

      • BpelEngineBean

      • BpelDeliveryBean

      • CompositeMetaDataServiceBean

    「スタック・スレッド最大時間」プロパティ値は次のように増加します。

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

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

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

監査レベルの設定に関する詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.1.3.3 Oracle BPEL Process Manager/Oracle Mediatorでのassignアクティビティの使用

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

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

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

大規模なペイロードにXSLTトランスフォーメーションを適用しないことをお薦めします。XSLTでドキュメント全体を横断する必要がある場合は、メモリー不足のエラーが発生する可能性があるためです。

43.1.3.5 繰返し構造に対するXSLTトランスフォーメーションの使用

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

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

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

  • ora:doTranslateFromNative

  • ora:doTranslateToNative

  • ora:doStreamingTranslate

これらの関数の使用方法については、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。

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

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

  • MDSInstance

  • Cache Size

  • Protocol Message Size

  • Number of threads

  • Stuck Thread Max Time

  • Tablespace

次の各項では、Oracle B2Bで大規模ドキュメントを処理する場合に設定する必要があるパラメータについて説明します。

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

MDSインスタンス・キャッシュ・サイズを設定するには、例43-10に示すように、$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xmlファイルにプロパティと値を追加する必要があります。

例43-10 MDSインスタンス・キャッシュ・サイズ

<property>
 <name>b2b.mdsCache</name>
 <value>200000</value>
 <comment>MDS Instance cache size </comment>
</property>
43.1.3.6.2 プロトコル・メッセージ・サイズ

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

  1. 「ドメイン構造」で、「環境」「サーバー」の順に選択します。

  2. 表の「名前」列で、「soa_server」を選択します。

  3. 「プロトコル」タブを選択します。

  4. 「最大メッセージ・サイズ」の値を変更します。

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

例43-11 max-message-sizeプロパティ

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

注意:

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

43.1.3.6.3 スレッド数

このパラメータは、Oracle B2Bのメッセージ処理機能の向上に役立ちます。$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xmlファイルで設定する必要があります。例43-12に例を示します。

例43-12 スレッド数

<property>
  <name>b2b.inboundProcess.threadCount</name>
  <value>5</value>
  <comment></comment>
</property>
<property>
  <name>b2b.inboundProcess.sleepTime</name>
  <value>10</value>
  <comment></comment>
</property>
<property>
  <name>b2b.outboundProcess.threadCount</name>
  <value>5</value>
  <comment></comment>
</property>
<property>
  <name>b2b.outboundProcess.sleepTime</name>
  <value>10</value>
  <comment></comment>
</property>
<property>
  <name>b2b.defaultProcess.threadCount</name>
  <value>5</value>
  <comment></comment>
</property>
<property>
  <name>b2b.defaultProcess.sleepTime</name>
  <value>10</value>
  <comment></comment>
</property> 
43.1.3.6.4 スタック・スレッド最大時間

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

  1. 「ドメイン構造」で、「環境」「サーバー」の順に選択します。

  2. 表の「名前」列で、「soa_server」を選択します。

  3. 「チューニング」タブを選択します。

  4. 「スタック・スレッド最大時間」の値を変更します。

43.1.3.6.5 表領域

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

例43-13 データ・ファイルの拡張

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;

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

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

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

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

  • スレッド数: 100

  • 思考時間(秒数): 1

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

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

43.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プロセスを、正常にデプロイおよび実行できるようになります。

43.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プロセスを、正常にデプロイおよび実行できるようになります。

詳細は、第9章「BPELプロセスでのパラレル・フローの使用」を参照してください。

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

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

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


注意:

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

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

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

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


注意:

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

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

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

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

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

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

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

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

  • purge: リポジトリ全体をパージする場合に使用します。

  • import: 指定したZIPファイルをインポートする場合に使用します。

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

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

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

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

43.3.1 パージ・スクリプトを使用したインスタンスおよび拒否メッセージの削除

Oracle Enterprise Manager Fusion Middleware Controlコンソールでの数千のインスタンスおよび拒否メッセージの削除は時間を要するため、トランザクション・タイムアウトが発生する可能性があります。このタスクを実行する必要がある場合は、purge_soainfra_oracle.sql PL/SQLスクリプトを使用してインスタンスと拒否メッセージを削除します。

詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。

43.3.2 Oracle Enterprise Manager Fusion Middleware Controlコンソールでのページのロード時間の短縮

Oracle Enterprise Manager Fusion Middleware Controlコンソールで、大量のインスタンスとフォルト・データを表示するページのロード時間を短縮するには、SOAインフラストラクチャの「共通プロパティ」ページの「データ数の表示」セクションで2つのプロパティを設定します。

この2つのプロパティによって、次の操作を実行できます。

  • インスタンス数とフォルト数のデータのフェッチを無効化して、次のページのロード時間を短縮できます。

    • SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービス・エンジンおよびサービス・コンポーネントのダッシュボード・ページ

    • 「オプションを指定して削除: インスタンス」ダイアログ

    この設定では、ページをロードする際にすべてのメトリック情報のロードが無効化されます。たとえば、SOAインフラストラクチャのダッシュボード・ページでは、「最新のコンポジット・インスタンス」セクションの「実行中」フィールドと「合計」フィールド、および「デプロイ済コンポジット」セクションの「インスタンス」列に通常表示される各値が、リンクに置き換えられます。これらの値が大量にある場合は、このページや類似情報が含まれた他のページのロードに時間を要する可能性があります。

  • 検索基準の一部として使用するデフォルトの期間を指定して、次のページに表示される最新のインスタンスとフォルトを取得できます。

    • SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービス・エンジンおよびサービス・コンポーネントのダッシュボード・ページおよびインスタンス・ページ

    • サービスと参照のダッシュボード・ページ

    • SOAインフラストラクチャ、SOAコンポジット・アプリケーション、サービスおよび参照のフォルト・ページおよび拒否メッセージ・ページ

    • サービス・エンジンおよびサービス・コンポーネントのフォルト・ページ

これらのプロパティの設定に関する詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。