この章では、Oracle SOA Suiteで大規模ドキュメントとメタデータを管理する場合、および多数のインスタンスがある環境を管理する場合のベスト・プラクティスについて説明します。
項目は次のとおりです。
Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。
この項では、大規模ドキュメントを処理する次のシナリオについて説明し、各シナリオに対するベスト・プラクティスなアプローチを示します。大規模なペイロードを開発および実行する前に、これらのベスト・プラクティスに従うことをお薦めします。
この項では、大規模ドキュメントを処理する場合のユースケースについて説明します。
この項では、バイナリ・オブジェクトをBase64エンコード・テキストとしてXMLペイロードに渡す場合のユースケースについて説明します。
このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表42-1に詳細を示します。
このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、MTOM(メッセージ転送最適化メカニズム)ドキュメントとして渡されます。表42-2に詳細を示します。
このユースケースでは、バイナリ・アタッチメント(画像など)がテキストとしてBase64でエンコードされ、インラインでXML文書に渡されます。表42-3に詳細を示します。
このユースケースでは、バイナリ・アタッチメント(画像など)がエンコード・テキストとしてBase64でエンコードされます。表42-4に詳細を示します。
この項では、アタッチメントをエンドツーエンドでストリーミングする場合のユースケースについて説明します。
このユースケースでは、バイナリ・アタッチメント(画像など)がストリームとしてエンドツーエンドで渡されます。表42-5に詳細を示します。
表42-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> |
Oracle Fusion MiddlewareのWebサービスでは、大規模アタッチメントをストリームとして渡すことができます。アタッチメント全体がメモリー内にある場合と同様にアタッチメントを処理するJAX-RPCのAPIとは異なり、ストリームではプログラミング・モデルをより効率的に使用します。また、ストリームを使用すると、サービスの実行前にアタッチメントをメモリーにロードする必要がないため、パフォーマンスおよびスケーラビリティが向上します。
ストリーム・アタッチメントは、埋込みアタッチメントと同様に、MIMEマルチパートのバイナリ形式に準拠しています。ワイヤ上では、ストリーム・アタッチメント付きのメッセージはアタッチメント付きの他のSOAPメッセージと同じです。
例42-1に、ストリーム添付ファイル付きのサンプル・メッセージを示します。メッセージの最初のパートはSOAPエンベロープ(<SOAP-ENV:Envelope...
)です。2番目のパートがアタッチメント(この例ではmyImage.gif
)です。
例42-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アタッチメントを使用するコンポジットの作成
ペイロード・スキーマを使用してコンポジット(たとえば、Oracle Mediatorを介してアウトバウンドWebサービスに接続するインバウンドWebサービス)を作成します。
Oracle MediatorのWSDLファイル内で、次の手順を実行します。
WSDLデザイナで、Oracle MediatorのWSDLファイルを開きます。
バインディングを中央のスイムレーンにドラッグ・アンド・ドロップします。
RPCバインディングを選択します。
名前を入力します。
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>
リクエスト/レスポンス・メッセージのMIMEパートを追加します。
<wsdl:message name="BPELProcess1RequestMessage"> <wsdl:part name="payload" element="ns1:purchaseOrder" /> <!--add below part--> <wsdl:part name="bin" type="xsd:base64Binary"/> </wsdl:message>
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>
パフォーマンス・オーバーヘッドとパス・スルー・アタッチメント
Oracle Mediatorはステートレスであるため、パス・スルー・アタッチメントに関するパフォーマンス・オーバーヘッドはありません。ただし、Oracle BPEL Process Managerでは、アタッチメントをデハイドレーション(圧縮して格納)するため、パス・スルー・アタッチメントの場合でもパフォーマンス・オーバーヘッドがあります。Oracle BPEL Process Managerでアタッチメントを一定の期間使用すると、SOAインフラストラクチャ・スキーマが最大サイズまで増加し、メモリーの問題が発生する可能性があります。大規模アタッチメントに対応するために、SOAインフラストラクチャ・スキーマに対するデータベース表領域を適切に拡張することをお薦めします。同時に、purgeスクリプトを使用して、表の添付ファイルとともに完了インスタンスをパージすることもできます。purgeスクリプトの詳細は、『Oracle Fusion Middleware 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プロセスがアタッチメントをデハイドレーションします。
アタッチメントをストリームするには、composite.xml
ファイルに次のプロパティを追加します。最適化が有効化されている場合は、SOAPコールのかわりにネイティブ・コールが使用されます。例42-2に詳細を示します。
例42-2 アタッチメントをストリーミングするためのプロパティ
<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セキュリティおよび管理者ガイド』を参照してください。 |
BPELプロセスでは、ora:getAttachmentContent
関数がSOAPアタッチメントのコンテンツを読み取り、そのデータをBase64形式でエンコードします。そのためには、BPEL変数をSOAPアタッチメントのhref
を指定する引数として指定します。例42-3に、この関数の使用方法を示します。
例42-3 ora:getAttachmentContent関数
<copy> <from expression="ora:getAttachmentContent('input','bin')"/> <to variable="initiateTaskInput" part="payload" query="/taskservice:initiateTask/task:task/task:attachment/task:content"/> </copy>
例42-3では、href
が"input/bin"
変数に格納されているアタッチメントのコンテンツを、コンテンツ変数にBase64エンコード形式でコピーしています。
Oracle Mediatorは、1つのターゲット・レシーバのみにアタッチメント・ストリームを渡すことができます。レシーバに指定できるのは、別のコンポーネントまたはWebサービス/アダプタです。2番目のターゲットはアタッチメントを受信できません。Oracle BPEL Process Managerでは、複数のレシーバへのアタッチメント・ストリームの送信がサポートされています。Oracle BPEL Process Managerで複数のレシーバにストリームを送信する場合は、readBinaryFromFile
XPath関数を使用してデータベースからアタッチメント・ストリームを読み取り、そのストリームを適切なターゲットに渡す必要があります。
Oracle BPEL Process Managerベースのコンポジットで同期フローを使用してアタッチメントを共有する場合は、同じエンドツーエンドのトランザクションを使用する必要があります。これは、コロケートされ、ローカル・コールまたは最適化されたコールを使用するコンポジットに適用できます。これを実行するには、コール・チェーンでコールされるすべてのBPELコンポーネント(コール先)に、例42-4に示すプロパティを設定します。
例42-4 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"
このユースケースでは、アダプタがバイナリ・データをデータ・ストアにストリームし、サービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhref
を公開します。表42-6に詳細を示します。
表42-6 機能
機能 | 説明 |
---|---|
セキュリティ |
なし。 |
フィルタ/トランスフォーメーション/割当て |
アタッチメントのフィルタおよびトランスフォーメーションはサポートされていません。 |
ファンアウト |
サポート対象。 |
バインディング |
アダプタが非XMLをデータベースにバイナリ・ラージ・オブジェクト(BLOB)としてストリームし、そのキーをサービス・エンジンに渡します。 |
Oracle BPEL Process Manager/Oracle Mediator |
サポート対象。 |
チューニング |
|
ドキュメント |
『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。 |
アウトバウンド・ファイル・アダプタを使用したアタッチメントの書込み
例42-5に、ファイル・アダプタを使用してアタッチメントをディスクに書き込むことができるサンプル・スキーマを示します。
例42-5 アタッチメントをディスクに書き込むためのスキーマ
<?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.7項「doStreamingTranslate」を参照してください。
このユースケースでは、Oracle B2Bがバイナリ・データをデータベースに格納し、Oracle B2B定義のXSDに基づいてサービス・エンジン(Oracle BPEL Process ManagerまたはOracle Mediator)にhref
を公開します。Oracle B2Bプロトコルがアタッチメントを定義します。表42-7に詳細を示します。
SOAコンポジット・アプリケーションでは、Oracle SOA Suite内で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にトランスフォーメーション文もAssign文も含まれていない場合、これはパス・スルーOracle Mediatorと呼ばれます。受信したメッセージと添付は、ペイロードと添付を変更せずにターゲットに伝播されます。同じメッセージ内の複数のMTOMアタッチメントも同様にOracle SOA Suiteで送受信されます。
ストリーミングとMTOMメッセージ処理機能の両方を添付の送受信に使用しないことをお薦めします。ストリーミングまたはMTOMメッセージ処理機能のどちらかを使用してください。
注意: 入力がtext/xml タイプの場合、MTOM形式でのファイル送信に大幅なファイル・サイズの減少はありません。 |
ベスト・プラクティスとしては、バイナリ・データの伝播にXSLTマッパーを使用しないことをお薦めします。かわりに、assignアクティビティを使用します。バイナリ・データの伝播にスタイルシートを使用する必要がある場合は、xsl:copy-of
による方法(copy-of
により属性を含むすべてをコピー)を使用するか、ソースからターゲットへ属性をコピーするカスタム関数を使用することをお薦めします。
MTOMアタッチメントのサイズはGB単位にはできません。かわりに、大きいサイズの添付にはアタッチメント付きのSOAPストリーミング機能を使用します。詳細は、第42.1.1.2.1項「アタッチメント付きのSOAP」を参照してください。
SOAインフラストラクチャのdispatch.invoke()
コールに渡されたSOAPメッセージにすでにBinaryTextIml
ノードが含まれていないかぎり、バイナリ・データの転送はワイヤ上で最適化されません。このように、WS-MTOMポリシーが構成されていればバイナリ・データの最適化が常に行われるという保証はありません。確実に最適化されるようにする唯一の方法は、SOAのMTOM構成も指定されているかどうかです。WS-MTOMポリシーは、SOAのMTOM設定がある場合、またはない場合でのコンテンツ・タイプ設定の適切さを保証します。
たとえば、SOAPメッセージにBinaryTextIml
ノードのない、次のコンポーネントで構成されるSOAコンポジット・アプリケーションを作成するとします。
Java API for an XML Web Services (JAX-WS)、MTOM対応の、クライアント・サービス・バインディング・コンポーネント
MTOM対応のBPELサービス・コンポーネント
MTOM対応のJAX-WS Webサービス参照バインディング・コンポーネント
JAX-WS、MTOM対応のクライアント・サービス・バインディング・コンポーネントは、BPELサービス・コンポーネントを起動します。次に、BPELサービス・コンポーネントはJAX-WS、Webサービス、参照バインディング・コンポーネントを起動します。JAX-WSクライアント・サービス・バインディング・コンポーネントからBPELサービス・コンポーネントへのSOAPメッセージは、MTOMにより最適化されます。ただし、BPELサービス・コンポーネントからJAX-WS、Webサービス参照バインディング・コンポーネントに対しては、メッセージはBase64バイナリ対応で、MTOMによる最適化は行われません。
この項では、繰返しコンストラクトを使用して大規模XMLを処理する場合のユースケースについて説明します。
このユースケースでは、インバウンド・アダプタがソース・ドキュメントを複数のバッチのレコードに分割し、各バッチがコンポジット・インスタンスを起動します。表42-8に詳細を示します。
表42-8 機能
機能 | 説明 |
---|---|
セキュリティ |
なし。 |
フィルタ/トランスフォーメーション/割当て |
サポート対象。 |
ファンアウト |
サポート対象。 |
バインディング |
ファイル/FTPアダプタが、ソース・ドキュメントをネイティブのXSD(NXSD)定義に基づいて小さいチャンクにデバッチします。 |
Oracle BPEL Process Manager/Oracle Mediator |
サポート対象。 |
チューニング |
ペイロード全体のサイズと比較して繰返し構造の方が小さいペイロードであるシナリオの場合は、繰返し構造に対してXSLTがサポートされます。assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティでの置換をお薦めします。 |
ドキュメント |
『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。 |
このユースケースでは、BPELプロセス内のループが一度に1チャンクのレコードとプロセス(つまりカーソル)を読み取ります。表42-9に詳細を示します。
この項では、複雑な構造の大規模XML文書を処理する場合のユースケースについて説明します。
このユースケースでは、大規模XMLファイルがSDOMとしてOracle B2BからOracle SOA Suiteに渡されます。これが実行されるのは、大規模ペイロード・サイズがOracle B2Bユーザー・インタフェースで定義されている場合のみです。表42-11に詳細を示します。
この項では、チューニングに関する一般的な推奨事項について説明します。
Oracle SOA Suiteのチューニングおよびパフォーマンスの詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』を参照してください。
この項では、チューニングに関する一般的な推奨事項について説明します。
Oracle WebLogic Server管理コンソールで、JTAトランザクションのタイムアウトを500
秒に増加します。手順については、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の接続タイムアウトの解決に関する項を参照してください。
Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーション・レベルの監査レベルを「オフ」または「本番」に設定します。詳細は、第42.1.3.2項「大規模ペイロード処理に対するOracle Enterprise Managerからの監査レベルの設定」を参照してください。
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:
doTranslateFromNative
、ora:
doTranslateToNative
、ora:
doStreamingTranslate
など)を使用します。この機能は大規模なペイロードのトランスフォーメーションおよびトランスレーション実行時に使用できます。
これらの関数の詳細は、付録B「XPath拡張関数」を参照してください。
大規模アタッチメントを処理するためにデータ・ファイルを拡張します。詳細は、『Oracle Database管理者ガイド』を参照してください。
大規模ドキュメントの処理時にタイムアウト・エラーが発生した場合は、次のタスクを実行します。
タイムアウト・プロパティ値を増やします。
「スタック・スレッド最大時間」プロパティ値を増やします。
タイムアウト・プロパティ値は次のように増加します。
Oracle Web Services Manager管理コンソールにログインします。
「デプロイメント」→「soa-infra」→「EJB」の順に移動します。
次に示すBeanをそれぞれクリックし、「構成」を選択してタイムアウト値を増加します。
BpelEngineBean
BpelDeliveryBean
CompositeMetaDataServiceBean
「スタック・スレッド最大時間」プロパティ値は次のように増加します。
手順は、Oracle Fusion Middleware Oracle WebLogic Serverパフォーマンスおよびチューニングの「WebLogic 8.1のスレッド・プール・モデルの使用」の章を参照してください。
大規模なペイロードを処理する際は、特定のコンポジットに対する監査レベルのロギングをオフにしてください。Oracle Enterprise Manager Fusion Middleware Controlで、コンポジットの監査レベルのオプションを「オフ」または「本番」に設定できます。コンポジットの監査レベルのオプションを「開発」に設定した場合は、大規模なペイロード全体がメモリー内文字列にシリアライズされ、メモリー不足のエラーが発生する可能性があります。
監査レベルの設定に関する詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
Oracle BPEL Process ManagerまたはOracle Mediatorで、大規模なペイロードを操作するためにassignアクティビティを使用する場合は、メッセージ全体を割り当てないでください。かわりに、ペイロードの必要な部分のみを割り当ててください。
また、Oracle BPEL Process Managerでassignアクティビティを使用する場合は、可能なかぎりプロセス変数ではなくローカル変数を使用することをお薦めします。ローカル変数は、BPELプロセスのスコープ内に制限されます。これらの変数は、スコープを閉じた後はメモリーおよびデータベースから削除されます。ただし、グローバル変数のライフ・サイクルは、インスタンスのライフ・サイクルと関連付けられています。これらの変数は、インスタンスが完了するまで、メモリー内またはディスク内にとどまります。したがって、プロセス変数またはグローバル変数より、ローカル変数をお薦めします。
大規模ペイロードに対して、Oracle Mediatorを使用したXSLTトランスフォーメーションを実行しないことをお薦めします。これを行うと、ドキュメント全体にわたるXSLT操作時にメモリー不足エラーになります。かわりに、Oracle BPEL Process Managerを使用してください。
11g リリース1 11.1.1.3までは、Oracle BPEL Process ManagerでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFile
プロパティが追加されています。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFile
をyes
に設定します。デフォルト値はno
です。
このプロパティは、次のBPEL XPath関数を使用する場合に適用可能です。
ora:processXSLT('template','input','properties'?)
ora:doXSLTransformForDoc ('template','input','name', 'value')
大きなXML文書をXSLTを使用して処理するよう構成する手順は、次のとおりです。
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>
BPELプロセス内で、import
セクションにネームスペースを追加します。
xmlns:common = "http://schemas.oracle.com/service/bpel/common"
グローバル変数を作成します(この例では、propertiesXMLVar
という名前で作成):
<variable name="propertiesXMLVar" element="common:anyProperties"/>
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>
ペイロード全体と比較して繰返し構造の方がペイロードが小さい場合は、XSLTトランスフォーメーションの使用をお薦めします。これは、現在のXSLT実装ではDOM全体がメモリーにマテリアライズされるためです。たとえば、PurchaseOrder.LineItem.Supplier
(大規模ペイロードの一部分)を使用します。
また、assignアクティビティではシャドウ・コピーが実行されるため、assignアクティビティを使用して置換することもできます。シャドウ・コピーではDOMはマテリアライズされませんが、ソース文書を指し示すシャドウ・ノードが作成されます。
また、大規模なペイロードのトランスフォーメーション/トランスレーション実行時に、次に示す最適化されたトランスレーション機能を使用することもできます。
ora:doTranslateFromNative
ora:doTranslateToNative
ora:doStreamingTranslate
これらの機能の使用方法については、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』を参照してください。
Oracle B2Bで大規模ドキュメントを処理する場合は、次のパラメータをチューニングします。
mdsCache
Cache
Size
Protocol
Message
Size
Number
of
threads
Stuck
Thread
Max
Time
Tablespace
次の各項では、Oracle B2Bで大規模ドキュメントを処理する場合に設定する必要があるパラメータについて説明します。
メタデータ・サービス(MDS)インスタンス・キャッシュ・サイズを設定するには、例42-6に示すように、$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xml
ファイルにプロパティと値を追加する必要があります。
Oracle B2Bで10MBを超えるメッセージを送受信する場合、またはインポート/エクスポート構成が10MBを超える場合は、Oracle WebLogic Server管理コンソールで次の設定を変更します。
「ドメイン構造」で、「環境」→「サーバー」の順に選択します。
表の「名前」列で、「soa_server」を選択します。
「プロトコル」タブを選択します。
「最大メッセージ・サイズ」の値を変更します。
この設定は、$DOMAIN_HOME/config/config.xml
ファイルで追加または変更することもできます。サーバー名構成の次で追加または変更します。例42-7に例を示します。
注意: デフォルトで、max-message-size はconfig.xml ファイルで使用可能ではありません。 |
このパラメータは、Oracle B2Bのメッセージ処理機能の向上に役立ちます。$DOMAIN_HOME/config/soa-infra/configuration/b2b-config.xml
ファイルで設定する必要があります。例42-8に例を示します。
例42-8 スレッド数
<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>
「スタック・スレッド最大時間」パラメータは、サーバーがスレッドをスタック状態であると判断するまでに、スレッドが継続的に動作している必要のある秒数をチェックします。Oracle WebLogic Server管理コンソールで次の設定を変更する必要があります。
「ドメイン構造」で、「環境」→「サーバー」の順に選択します。
表の「名前」列で、「soa_server」を選択します。
「チューニング」タブを選択します。
「スタック・スレッド最大時間」の値を変更します。
150MBを超える構成をデータ・ファイルに格納する必要がある場合は、例42-9に示すように、データ・ファイルを拡張または追加して、表領域のサイズを増やす必要があります。
次の関数を使用して、大規模なXSLT/XQuery操作の結果をディレクトリ・システム内の一時ファイルに書き込むことができます。このドキュメントは必要に応じて一時ファイルからロードされます。これにより、ドキュメント全体をバイナリXMLとしてメモリーにキャッシュする必要がなくなります。
ora:processXSLT
ora:doXSLTransformForDoc
この機能を有効化にするには、ora:processXSLT
関数でproperties
引数を使用します。
ora:processXSLT('template','input','properties'?)
この引数の値は、XSLT内で、XSL変数からデータを抽出するのと同様な方法で取得します。properties
引数は、例42-10に示されているような構造のXML要素です。大きいペイロードの結果(10MBを超えるなど)に対しては、streamResultToTempFile
をyes
に設定します。一時ファイルに書き込む必要のない小さいペイロードの結果には、このプロパティをデフォルト値のno
の設定のままにしておきます。
例42-10 プロパティXML
<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が実行されます。
この関数の使用の詳細は、B.2.53項「processXSLT」を参照してください。
ora:doXSLTransformForDoc
関数では、この機能を有効にするために、name
およびvalue
プロパティを設定します。
ora:doXSLTransformForDoc ('template','input','name', 'value')
この関数で、name
にstreamResultToTempFile、value
にyes
が渡されます。
この関数の使用の詳細は、B.2.11項「doXSLTransformForDoc」を参照してください。
この項では、大規模メタデータの処理に関する推奨事項について説明します。
BPELプロセスで実行できるアクティビティ数には制限があります。この制限を超えると、システム・メモリーが一杯になり、タイムアウトが発生する可能性があります。たとえば、次のパラメータを使用すると、タイムアウトによって2つのフォルト・インスタンスが発生します。
スレッド数: 100
思考時間(秒数): 1
受信リクエスト・メッセージ数: 1000
システム・メモリーの安定性を確保するために、受信リクエスト・メッセージ数を適切なレベルに保つようにしてください。
多数のアクティビティ(例: 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プロセスを、正常にデプロイおよび実行できるようになります。
多数のアクティビティ(例: 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プロセスでのパラレル・フローの使用」を参照してください。
7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。
USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m
注意: 8000を超えるアクティビティがあるBPELプロセスをデプロイすると、Oracle BPEL Process Managerのコンパイルでエラーがスローされます。 |
7000までのアクティビティがあるBPELプロセスを、次の設定で正常にデプロイおよび実行できます。
USER_MEM_ARGS: -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=512m
注意: 10,000を超えるアクティビティがあるBPELプロセスをデプロイすると、Oracle BPEL Process Managerのコンパイルに失敗します。 |
多数のアクティビティ(例: 5000まで)があるBPELプロセスを、正常にデプロイおよび実行できます。
BPELのコンパイルは、6000アクティビティの場合は失敗する可能性があります。
単一のコンポジットに50を超えるOracle Mediatorを含めないことをお薦めします。環境にあわせて、JTAトランザクション・タイムアウトを高い値に増やします。
大規模なデータ・セットのインポートには、ブラウザは使用せずにコマンドライン・ユーティリティを使用することをお薦めします。大規模なデータの構成には、次のユーティリティ・コマンドを使用してください。
purge
: リポジトリ全体をパージする場合に使用します。
import
: 指定したZIPファイルをインポートする場合に使用します。
deploy
: 名前を指定してアグリーメントをデプロイする場合に使用します。名前を指定しない場合は、すべてのアグリーメントがデプロイされます。
ただし、purgeimportdeploy
オプションは、Oracle B2B構成の転送またはデプロイには使用しないことをお薦めします。
詳細は、『Oracle Fusion Middleware Oracle B2Bユーザーズ・ガイド』を参照してください。
この項では、多数のインスタンスおよびフォルト・メトリックの処理に関する推奨事項について説明します。
Oracle Enterprise Manager Fusion Middleware Controlでの数千のインスタンスおよび拒否メッセージの削除は時間を要するため、トランザクション・タイムアウトが発生する可能性があります。このタスクを実行する必要がある場合は、PL/SQLパージ・スクリプトを使用してインスタンスと拒否メッセージを削除します。
詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』を参照してください。
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管理者ガイド』を参照してください。