[OSB, Coherence] OSB and Coherence Integration

Coherenceノードを管理したり、OSBに結果をキャッシュしようとしたりするのであれば、誰でもこの新しい機能が利用可能になったことをうれしく思うに違いないでしょう。WebLogic Server 10.3.4から、管理コンソールやWLSTから管理サーバ、ノードマネージャを使ってスタンドアロンのCoherenceキャッシュサーバのライフサイクルを監視できるようになっています。以前のようにスクリプトを自作することを考えれば、大きな進化といえるでしょう。WebLogic管理コンソールやノードマネージャからCoherenceキャッシュサーバを起動する方法は、James Bayerのエントリによい説明がありますし、WebLogic Serverのドキュメントにも(当然ながら)記載があります。

James Bayer's Blog - WebLogic Server 10.3.4 Screencast – Coherence Server Lifecycle Management
http://blogs.oracle.com/jamesbayer/2011/01/weblogic_server_1034_screencas.html

Oracle® Fusion Middleware Using ActiveCache11g Release 1 (10.3.4)
Starting Cache Servers Using Node Manager
http://download.oracle.com/docs/cd/E17904_01/web.1111/e16517/coh_wls.htm#COHWL729

Oracle Service Bus 11gR1 (11.1.1.3.0) より、OSBはCoherenceを使ったビジネスサービスのサービス結果キャッシュをサポートしています。あまり変動の多くない静的な結果を返すようなビジネスサービスを利用する場合、結果をキャッシュするように構成できます。結果キャッシュを使用するビジネスサービスについては、キャッシュ結果を保持する時間を管理できます。キャッシュ結果が期限切れになった場合は、次回のビジネスサービスの呼び出しでバックエンドのサービスを呼び出したときに結果を取得し、キャッシュします。このキャッシュ機能は夜間バッチで更新されるようなクロスリファレンスデータに非常に適していると思います。

Oracle® Fusion Middleware Administrator's Guide for Oracle Service Bus11g Release 1 (11.1.1.4.0)
Improving Performance by Caching Business Service Results
http://download.oracle.com/docs/cd/E17904_01/doc.1111/e15867/configuringandusingservices.htm#CHDDCGEE


専用のJVMでの結果キャッシュ


ここでは、OSBのビジネスサービスを構成して、WebLogic Serverで管理されている独立したCoherence JVMに結果をキャッシュする方法を説明します。独立した専用のJVMを使用する理由は、結果キャッシュのデータが非常に大きくなる可能性があり、OSBで利用するJavaのヒープを守るためです。
この例では、クライアントはOSBプロキシサービスを呼び出し、従業員IDから従業員データを取得しています。結果は自動的にキャッシュされ、再度呼び出されたときには、外部システムではなくキャッシュから結果を取得します。



Step 1 - Coherenceサーバをセットアップする
OSB管理コンソールからCoherenceサーバを作成して結果キャッシュとして使えるようにします。
サーバ起動のタブから、構成したCoherenceサーバの引数を以下に引用しています。なお、ドメイン中のデフォルトキャッシュ構成を利用して修正しています。
-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -Dtangosol.coherence.override=/app/middleware/jdev_11.1.1.4/user_projects/domains/osb_domain2/config/osb/coherence/osb-coherence-override.xml -Dtangosol.coherence.cluster=OSB-cluster -Dtangosol.coherence.cacheconfig=/app/middleware/jdev_11.1.1.4/user_projects/domains/osb_domain2/config/osb/coherence/osb-coherence-cache-config.xml -Dtangosol.coherence.distributed.localstorage=true -Dtangosol.coherence.management=all -Dtangosol.coherence.management.remote=true -Dcom.sun.management.jmxremote
Coherenceサーバのクラスパスも引用しておきます。
/app/middleware/jdev_11.1.1.4/oracle_common/modules/oracle.coherence_3.6/coherence.jar:
/app/middleware/jdev_11.1.1.4/modules/features/weblogic.server.modules.coherence.server_10.3.4.0.jar:
/app/middleware/jdev_11.1.1.4/oracle_osb/lib/osb-coherence-client.jar
デフォルトでは、OSBはローカル結果キャッシュインスタンスを作成しようとします。これを避けるためには、次のようなJVMパラメータを各OSB管理対象サーバに設定しておく必要があります。
-Dtangosol.coherence.distributed.localstorage=false -DOSB.coherence.cluster=OSB-cluster
リモートの結果キャッシュを構成する上でもっと情報が必要であれば、以下のドキュメントを参照してください。

Oracle® Fusion Middleware Administrator's Guide for Oracle Service Bus11g Release 1 (11.1.1.4.0)
Using an Out-of-Process Coherence Cache Server
http://download.oracle.com/docs/cd/E17904_01/doc.1111/e15867/configuringandusingservices.htm#sthref272

Step 2 - ビジネスサービスを構成する
各ビジネスサービスのメッセージ処理構成の詳細設定で、「結果キャッシュ」を有効にした上で、キャッシュデータのキーを決定する必要があります。以下に例を示しますが、今回は一意の従業員IDをキーとしています。

結果
このテストはノートPCで実施しました。実際の所要時間にキャッシュの結果が現れています。テストツールを使い、同一従業員IDのリクエストを10000件OSBに送信しました。このとき結果キャッシュはOffにしています。この結果から、各リクエストを受けるとその都度バックエンドのビジネスサービス(BS_GetEmployeeData)を呼び出していることがわかります。

では、結果キャッシュを有効にしてみましょう。同じ条件でリクエストを送信します。ビジネスサービスは最初の一度だけ起動され、以後のリクエストはすべて結果キャッシュを使っていることがわかります。


原文はこちら。
http://blogs.oracle.com/MarkSmith/2011/03/osb_and_coherence_integration_1.html

0 件のコメント:

コメントを投稿