ActiveCache
http://download.oracle.com/docs/cd/E21764_01/web.1111/e16517/cases.htm
この記事では、最初のJava Servletコンテキストの部分を取り上げ、WLSでシームレスにデータキャッシュ層を利用するための方法(J2EE Webアプリケーションのパッケージング、デプロイ、管理)についてお伝えしたいと思います。
アーキテクチャ
WLS 10.3.4+には、ノードマネージャ(プロセス監視・管理サービス)があり、これを利用してWLS以外の、例えばCoherenceのようなコンポーネントを管理できます。WLS管理コンソールには追加の管理ページ(http://{ホスト名}:{ポート番号、通常は7001}/console)があり、ここでCoherenceクラスタを構成することができます(環境>Coherenceクラスタ)。
そして、Coherenceクラスタノードの構成画面はこちら。([環境]>[Coherenceサーバー])
WLS管理コンソールから、クラスタを構成したり、全てのクラスタノードを立ち上げたり停止したりできます。
この例では、サーブレットと全てのCoherenceキャッシュノードが同じCoherenceクラスタにありますが、サーブレットはデータを持っていません。つまりストレージ属性が無効になっています。これは、サーブレットがデプロイ/アンデプロイされても、サーブレットがデータを保持しないので、キャッシュデータをクラスタノード間で移動させる必要がないことを意味します。このトポロジは以下のようになっています。
[注意]上図はHTTPセッションデータをCoherenceにキャッシュする仕組みを示していますが、このトポロジーはWebアプリケーションのデータをキャッシュする場合と同じです。
Setup
以下のような前提条件のもとでセットアップを進めます。
- WLS 10.3.5 がインストール済みであること。
- Java JDK 1.6+ がインストール済みであること。
- ドメインが構成されていること。今回はドメイン名をbase_domainとする
- Coherence 3.7+ for Java がインストール済みであること。これは単にzipファイルを解凍するだけでよい
- Eclipse Indigo IDE (3.7.0) がインストール済みであること(オプション)
- ノードマネージャ を構成し、Coherenceクラスタノードの起動・停止を可能にする
この手順はWLSに詳しい読者にとっては当然なのですが、完全を期すため、Macで必要だった手順をまとめました。
1) まず、WLSの起動に使う環境編集を設定します。
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
2) ノードマネージャのパラメータを $MW_HOME/wlserver/common/nodemanager/nodemanager.properties に設置します。簡単のため、ネイティブライブラリ(これはプラットフォームに依存します)やSSLを使わないようにしました。
# Dir where WLS installed to
export MW_HOME=/Users/Dave/apps/wls1035_dev/
export USER_MEM_ARGS="-Xmx1024m -XX:PermSize=1024m"
NativeVersionEnabled=false
3) アプリケーションデプロイ先として、WLSのドメインを $MW_HOME/wlserver/common/nodemanager/nodemanager.domain プロパティファイルに追加しました。
PropertiesVersion=10.3
ListenAddress=localhost
SecureListener=false
DomainRegistrationEnabled=true
base_domain=/Users/Dave/apps/mywls/user_projects/domains/base_domain
4) 最後に、ノードマネージャを立ち上げました(ノードマネージャはドメインではなく、マシンと関連付けられています)。
cd $MW_HOME/wlserver/server/bin
./startNodeManager.sh - WLS管理コンソールを使う新しいマシンの定義を構成する
次に、ノードマネージャをCoherenceクラスタの立ち上げに使えるようにするため、マシンの定義をします。上述の通り、ノードマネージャはドメインではなくサーバに関連づけられており、マシンは1個以上のWLSインスタンス(サーバ)をホストするコンピュータの論理的な表現です。
マシンを構成するために、[環境]>[マシン]でWLS管理コンソールのマシン画面に移動し、[新規]ボタンを押して以下の値を入力します。
(画面1)
名前: MyMachine - あなたのマシン名
マシンのOS: その他 - Mac OSX用のネイティブライブラリを使わないので、ここでは指定しない
(画面2)
タイプ: プレーン - 追加のセキュリティ構成をしないようにします。
[注意]他のパラメータはデフォルトのままにしています。
ノードマネージャをデフォルト値のパラメータで立ち上げたら、特に追加の設定は必要ありません。マシンの監視ページでノードマネージャを監視できることを確認しましょう。
もし状態が取得できない場合は、ノードマネージャの出力を確認して下さい。コンソールから起動している場合は、ノードマネージャのログファイル($MW_HOME/wlserver/common/nodemanager/nodemanager.log)を参照しましょう。
- Coherenceクラスタを構成し、起動する
Webアプリケーションのデータをキャッシュするために使うCoherenceクラスタを立ち上げるためには、Coherenceクラスタを構成し、Coherenceサーバを立ち上げる定義をする必要があります。
Oracle Fusion Middleware Oracle WebLogic Server Administration Console Online Help
Create Coherence clusters
http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/coherence/CreateCoherenceClusters.html
Create Coherence servers
http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/coherence/CreateCoherenceServers.html
Coherenceクラスタを構成するために、[環境]>[Coherenceクラスタ]と辿って、Coherenceクラスタ定義画面に移動します。ここで使用した設定値は以下の通りです。
名前: MyCluster - 別の環境と衝突しないような名前にしています。
カスタム・クラスタ構成ファイルの使用: チェック
<activecache-example.zip>/WLSCohWebAppEAR/EarContent/APP-INF/classes/tangosol-coherence-override.xml がクラスタ用の Coherence operational override file です(キャッシュ構成ファイルではありません)。
次に、Coherenceクラスタサーバーを構成します。[環境]>[Coherenceサーバー]を辿って設定画面へ移動します。今回使用した構成パラメータは以下の通りです。
名前(任意): CacheServer1
マシン(作成したマシン名): MyMachine
クラスタ(作成したクラスタ名): MyCluster
ユニキャスト・リスニング・ポート: 9999
デフォルトの8888は他のクラスタで使われている可能性がありますので、別のクラスタに参加しないようにしておきます。
その他の構成パラメータはデフォルトのままにしています。
サーバーの起動構成は以下のパラメータを使用しました。
Java ホーム: /Library/Java/Home
Java ベンダー: Apple
BEAホーム(WLSのインストールディレクトリ): /Users/Dave/apps/wls1035_dev/wlserver
ルートディレクトリ(ドメインのベースディレクトリ): /Users/Dave/apps/mywls/user_projects/domains/base_domain
クラスパス:
/Users/Dave/apps/wls1035_dev/modules/features/weblogic.server.modules.coherence.server_10.3.4.1.jar:/Users/Dave/coherence/3.7/coherence-java/coherence/lib/coherence.jar
これらのJarファイルの順序が重要です。正しい区切り文字(:)を使って下さい。
引数:
-Xms1024m -Xmx1024m -Dtangosol.coherence.cacheconfig=/Users/Dave/Documents/workspace/WLSCohWebAppEAR/EarContent/APP-INF/classes/coherence-cache-config.xml -Dtangosol.coherence.distributed.localstorage=true -Dtangosol.coherence.role=CacheServer
JVMへの引数はCoherenceキャッシュサーバーを起動するためのものです。
[注意]Coherenceオーバーライドファイルの最後のパラメータでは、デフォルトストレージ設定がfalseに指定されています。そのため、ストレージ属性を明示的に有効にする必要があります。これは、WLSの起動スクリプトでこのプロパティを設定しなければ、TestServletのシステムプロパティを使って、ストレージ有効化のデフォルト設定を上書きすることができないためです。
なお、上記パスは皆様の読者の環境に適宜合わせて下さい。
Coherenceサーバを追加する場合、Coherenceサーバ管理ページにてCoherenceサーバを複製し、新しい(複製した)Coherenceサーバーの名前を変更すると簡単です。
Coherence クラスタはCoherenceサーバーページから起動します([環境]>[Coherenceサーバー])。このページの[制御]タブで、全てのCoherenceサーバーを選択し、[起動]ボタンをクリックします。
- CoherenceとActiveCacheの共有ライブラリを展開する
CoherenceとActiveCacheのJARファイルをデプロイする場合、WLSのクラスパスに追加する方法、Webアプリケーションの共有ライブラリとしてデプロイするなど、色々な方法があります。今回はJARファイルは共有ライブラリとしてデプロイして、(ライブラリをインポートするアプリケーションだけがスコープ内に共有ライブラリを持つように)利用を分離し、オーバーヘッドを最小限(クラスの1個のコピーのみがロードされるように)にしました。共有ライブラリはWLS管理コンソールからデプロイできます([環境]>[デプロイメント])。
- Coherenceキャッシュを使うWebアプリケーションをパッケージ、デプロイする
WARファイルもしくはEARファイルで実施するのですが、今回はEARファイルを使います。やり方としては、WLSの自動デプロイディレクトリにEARファイルを配置する、管理コンソールを使う、 Weblogic Scripting Tool(WLST)を使う、(WLSTを使う)EclipseのようなIDEを使う、などがあります。今回は、OEPEプラグインが提供するウィザードを使うことにしました。
EAR Webアプリケーションプロジェクト(依存関係のあるプロジェクトも)をインポートするだけで、Coherenceのライブラリパスを更新して、デプロイ対象のWLSにデプロイできます。
TestServletサンプルWebアプリケーションのURLは、
http://<your hostname>:7001/WLSCohWebApp/TestServletです。このアプリケーションは、Coherenceクラスタメンバーを表示し、MyCacheというキャッシュにエントリを追加します(キーはHTTPセッションIDで、値はHTTPセッションの最終変更値)。
この出力から、アクティブセッションを持つクライアントの個数と、クラスタのメンバー個数がわかります。全てのキャッシュデータはこのサーブレットを実行したクライアントから見えるので、参照データやドロップダウンリストの値などの頻繁に変更されないアプリケーションデータにとっては理想的な保管場所になるかと思います。
サンプルアプリケーションについて
ActiveCacheの機能を使うと、キャッシュの参照をリソースとして構成することができます。TestServletでは、アノテーション @Resource を使って動的にNamedCache "MyCache" への参照を注入しています。
OracleR Fusion Middleware Using ActiveCache
Access the Data Cache from your Application
http://download.oracle.com/docs/cd/E21764_01/web.1111/e16517/coh_wls.htm#FEDEJAAI
Coherenceキャッシュのリファレンス(NamedCache)リソースは、JNDIルックアップから検索できます。サーブレットが参照する共有ライブラリを weblogic-application.xml ファイルで指定できます。
CoherenceクラスタはJMXから監視することができます。クラスタのメトリックを見るためには、テストマシンのJConsoleを開き、weblogic.server.nodemanager... プロセスの一つを開きます(Coherence管理サーバーを起動して、リモートアクセス可能にすることもできます )。ノードツリーを開いたら、以下のようなメトリックを確認できるはずです。
明示的な起動と停止の操作のために、サーブレットのリスナークラスが登録されており、アプリケーションがアンデプロイされるとWebアプリケーションをシャットダウンします。
このエントリをご覧になった方々が、WLSのActiveCacheの機能を使えば、Webアプリケーションで頻繁に利用するデータへ高速にアクセスできることがわかってもらえると幸甚です。キャッシュを「サイドキャッシュ」(データを明示的にキャッシュに追加している)として使っていますが、データベースやその他のデータソースから必要なデータをキャッシュにオンデマンドで載せるように構成することも簡単です。その他のオプションはここでは検討していませんが、WLSTを使ってクラスタの設定と立ち上げを実行するスクリプトを作成することにも一考の価値があると思います。
サンプルアプリケーションはこちらからダウンロードできます。
関連資料
- ActiveCacheに関する詳細資料(英語)
http://coherence.oracle.com/download/attachments/5112972/2010-07-15_WLS-Coherence-ActiveCache.pdf - James BayersのBlogエントリ - WLSノードマネージャのセットアップ
http://blogs.oracle.com/jamesbayer/entry/weblogic_nodemanager_quick_sta - Pas ApicellaのBlogエントリ - WLS管理コンソールからCoherenceクラスタを起動する
http://theblasfrompas.blogspot.com/2011/07/starting-coherence-server-from-wls-1034.html
原文はこちら。
http://blogs.oracle.com/felcey/entry/using_weblogic_server_activecache_for
0 件のコメント:
コメントを投稿