このチュートリアルでは、Oracle WebLogic Server上で実行されるアプリケーションからOracle Coherence*Webを使用するための構成方法について説明します。
約90分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:
すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順 にある各アイコンの上にカーソルを置いてください。
Oracle Coherence*WebはOracle Coherenceの拡張モジュールであり、Oracle WebLogic Server、IBM WebSphere、TomcatなどのWebアプリケーション・サーバーのHTTPセッション管理を行います。 Oracle Coherence*WebはネイティブのOracle WebLogicのセッション管理用のサービス・プロバイダ・インタフェース(SPI)としてパッケージ化されているため、Oracle WebLogic Server(Oracle WLS)へOracle Coherence*Webのサポートをわずか数ステップで追加できます。
Oracle WebLogic Server上にSPIをインストールした後、アプリケーションからOracle Coherence*Webを使用できるようにするためには、いくつかの追加手順を実行する必要があります。 Oracle Coherence*WebによってWebLogic ServerのネイティブWebセッション・キャッシュが置き換えられるわけではないため、 アプリケーションに明確な構成を行わない限り、通常のOracle WebLogic ServerのHTTPセッション機能が使用されます。
このチュートリアルは2部で構成されたチュートリアルの第2部であり、Oracle WLSドメイン上のアプリケーションでOracle Coherence*Webを使用する方法について説明します。 必要なパッチとライブラリをOracle WebLogic Serverドメインにインストールする方法については、第1部で説明しています。 ここでは、実際にOracle Coherence*Webを使用するためにアプリケーションを設定し、2つに区分けされた実行中のドメインに対してテストを行います。
このチュートリアルではEclipse統合開発環境(IDE)を使用するため、インストールされている Oracle製品からのソフトウェア・パッケージの追加が必要になります。 Eclipse向けの無償拡張モジュールであるOracle Enterprise Pack for Eclipseを使用すると、Oracle WebLogic Server向けの開発とデプロイが簡単になります。 Oracle Coherenceを使用できるように、EclipseにOracle Enterprise Pack for Eclipseをセットアップする方法については、こちらのチュートリアルを参照してください。 参照先のチュートリアルをすでに完了している場合、ご使用のEclipseは正しく構成されているため、すぐにこのチュートリアルを開始できます。 それ以外の場合は、参照先のチュートリアル全体を実行するか、または第1.3項のみを実行してください。
このチュートリアルでは、Eclipseの作業領域とプロジェクトを作成および構成した後で、アプリケーション からOracle Coherence*Webを利用するために必要な基本リソースを構築します。 必要なコードはあらかじめ提供されており、シンプルなサーブレットとJavaServer Page(JSP)が含まれています。 このサーブレットとJSPは、HttpSessionへのデータ移入とアクセスを行うだけであり、Oracle Coherence固有のコードは含んでいません。 コードをインポートしたら、第1部で作成した2つのOracle WebLogic Serverドメインに対してアプリケーションをデプロイします。 はじめに、アプリケーションにOracle Coherence*Webの構成が含まれていない状態で、同じアプリケーションが、完全に独立した2つのWLSドメイン・インスタンス上でどのように動 作するかを確認します。 次に、Oracle Coherence*Web向けに必要な構成変更を実施した上で、再度アプリケーションのデプロイとテストを行い、独立した2つのドメインで同じセッショ ン情報が共有される様子を確認します。 最後の手順では、より現実的な手段として、Oracle Coherenceを使用したアプリケーション・テスト向けに同梱されたソフトウェア・ロードバランサを使用します。
このチュートリアルを始める前に次のことを確認してください。
| 1. |
このチュートリアルの第1部を完了し、以下のすべての前提条件を満たしていること。
このチュートリアルでは、システム上の各場所に対して次のラベルを使用しています。
|
| 2. |
Eclipse 3.4 SR2(Ganymede)がインス トールされており、Oracle Enterprise Pack for Eclipseがこれに追加されていること (詳しくは、チュートリアル『Oracle Coherence and Oracle WebLogic Server: Setting Up an Eclipse Development Environment』の第1.3項を参照してください。)。
|
| 3. |
次のドキュメントを参照していること。
|
ここでは、基本的な作業領域を選び、動的なWebプロジェクトを作成し、Oracle WebLogic Serverの実行時設定を指定します。
重要: このチュートリアルは、Oracle Enterprise Pack for Eclipseがインストールされていることを前提としています。 詳しくは、前提条件の項を参照してください。
| 作業領域のオープンとプロジェクトの 作成 | ||
|
1. |
Eclipseを起動します。
|
|
2. |
Eclipse Workspace Launcherが表示されます。 作業領域を作成する場所(例:D:\oracle\tutorial)を選択します (以降、この場所を$WORKSPACEとします)。 「OK」をクリックします。
|
| 3. | 「File」
→「New」→「Dynamic Web Project」の順に選択します。
|
| 4. |
プロジェクト名としてCoherenceWebと入力したら、Target Runtimeの横にある「New」ボタンをクリックします。
|
| 5. |
タイプとして「Oracle」→「Oracle WebLogic Server 10gR3」を選択し、「Next」をクリックします。
|
| 6. |
WebLogic Server Home($MIDDLEWARE_HOME\wlserver_10.3) を選択し、「Finish」をクリックします。
|
| 7. |
Dynamic Runtime Module versionが自動的に2.5に更新され、ConfigurationにはDefault Configuration for Oracle WebLogic Server 10gR3が設定されます。 この画面で追加の構成は必要ありません。 「Finish」をクリックします。
|
| アプリケーション・コードのインポート | ||
| 1. |
コードを ダウンロードします。
|
| 2. |
一時的な場所にファイルを解凍します。 この一時的な場所は$STARTER_SOURCEと 呼ばれます。
|
| 3. |
EclipseのProject Explorerで「CoherenceWeb」プロジェクトを 開きます。
|
| 4. |
「CoherenceWeb」を右クリックし、「Import」 →「Import」の順に選択します。
|
| 5. |
「General」カテゴリを展開し、「File System」 を選択します。 「Next」をクリックします。
|
| 6. | From directoryフィールドに$STARTER_SOURCE/tutorial_startと 入力し、移動します。 |
| 7. |
tutorial_startを展開し、srcフォルダとWebContentフォ
ルダの横にあるチェック・ボックスのみを選択します。
その他はすべてデフォルトのままで、「Finish」をクリックします。
|
| 8. |
プロジェクト内のファイルを上書きするかどうかを尋ねるQuestionダイアログ・ボックスが表示されたら、「Yes To All」をクリックします。
|
| 9. |
「Java Resources/src/obe.coherence」 ツリーと「WebContent」ツリーを開きます。
|
| 10. | Sourceビューで、SessionTest1.javaサーブレッ ト・コードとgetSessionValue1.jspコードを開きます。 |
| 11. |
SessionTest1サーブレット内ですべての関数を実行するのはdoGet()メソッドであることに注目します。
protected void doGet(HttpServletRequest request, HttpServletResponse response) |
| 12. |
次に、getSessionValue1.JSPを確認します。 SessionTest1サー ブレットのコードとよく似ていますが、ここではテスト値を作成してセッションに追加する代わりに、セッション内にあらかじめ設定された値 (SessionTest1サーブレットが追加した値)を探します。 値が見つからない場合、JSPはテスト値をnullとして返します。 ここでもWLSコンソール・ウィンドウに文が出力されるため、どのサーバー上でJSPが実行されているかを特定できます。 <%@ page contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
| 13. | EclipseのProblemsビューを表示し、エラーがないことを確認します。 |
Oracle Enterprise Pack for Eclipse拡張モジュールを利用すると、WebLogic Serverへのデプロイとテストが素早く簡単に実行できます。 ここでは、このチュートリアルの第1部で作成したOracle WebLogic Serverドメインに対して、サーバー・プロファイルを作成します。
| Eclipseを使用した、Oracle WebLogic Serverの構成プロファイルの作成 | ||
アプリケーションのデプロイとテストが簡単に実行できるように、Eclipseでサーバー構成を作成するには、以下の手順 を実行します。
| 1. |
このチュートリアルの第1部で作成したドメインを起動します (ドメイン名はWLS_AとWLS_Bで
す。ドメインを起動するには、それぞれのルート・ディレクトリからstartWebLogic.cmdス
クリプトを実行します)。 ドメインの開始時にエラーが発生していないことを確認します。
|
| 2. |
Eclipseインスタンスの最下部にある「Servers」ビューをクリックします。
|
| 3. |
Serversビューの内側を右クリックし、「New」→「Server」 の順に選択します。
|
| 4. |
「Oracle」カテゴリを展開し、「Oracle WebLogic Server 10gR3」を選択します。 サーバー名としてOracle WebLogic Server WLS_Aと 入力し、「Next」をクリックします。
|
| 5. |
WLS_Aドメインの場所を選択したら、再度、名前をOracle WebLogic Server WLS_Aに変更します。 「Finish」をクリックします。
Serversビューに表示されるサーバー・ステータスがStartedであることを確認します。
|
| 6. |
ステップ1~5を繰り返します。今回は、サーバー名としてOracle WebLogic Server WLS_Bを設定し、WLS_Bドメインの場所を指定します。
|
| 7. |
両方のサーバー・プロファイルの作成が完了したら、ServersビューのステータスがStartedに なっていることを確認します。
|
Oracle Coherence*Webのサポートを有効化する前に、そのままの状態でアプリケーションを実行します。こうすることで、Oracle WebLogicのネイティブ・セッション処理とOracle Coherence*Webのセッション・キャッシュの違いがよく理解できます。
| サーバーへのアプリケーションのデプロイ | ||
| アプリケーションのテスト | ||
サーバーにアプリケーションをデプロイするには、以下 の手順を実行します。
| 1. |
WLS_Aサーバーへアプリケーションをデプロイします。 Serversビューで「Oracle WebLogic Server WLS_A」を右クリッ クし、「Add and Remove Projects」を選択します。
|
| 2. |
「Add All」ボタンをクリックして、WLS_AのConfigured projectsにアプリケーションを追加したら、「Finish」をクリックしてサーバーにアプ リケーションを公開します。
|
| 3. |
WLS_Aサーバー・ウィンドウにエラーが表示されておらず、EclipseのServers ビューに表示されるWLS_AのステータスがSynchronizedであること を確認します。
|
| 4. |
WLS_Bサーバーに対して、ステップ1~3を繰り返します。
|
ア プリケーションをテストするには、以下の手順を実行します。
| 1. |
Webブラウザを開き、WLS_AのSessionTest1サー
ブレットへ接続します (WLS_Aのポート番号は7001であり、WLS_Bのポート番号は7201です)。 http://localhost:7001/CoherenceWeb/SessionTest1 ブラウザに表示されるデータとWLS_Aのコンソール・ウィンドウに表示されるデータを確認します。
|
| 2. |
新規ブラウザ・ウィンドウまたは新規タブを開き、WLS_AのgetSessionValue1.jspへ接続します。 http://localhost:7001/CoherenceWeb/getSessionValue1.jsp ブラウザに表示されているデータが、SessionTest1サーブレットによって表示されたデータと一致することを確認します。 "JSPを実行しているサーバー"として表示されるポートは7001であり、テスト値の最初の 4桁も7001であることに注目します。 これは、この値を作成したサーバーがWLS_Aであることを示しています。
また、WLS_Aコンソール・ウィンドウには、JSPを実行したことを示す文が表示されます。
|
| 3. |
別のブラウザ・ウィンドウまたはタブを開き、WLS_BのJSP(サー ブレットではありません)へ接続します。 http://localhost:7201/CoherenceWeb/getSessionValue1.jsp 今回は、戻り値がnullであることを確認します。 これはどういった理由からでしょうか。
この時点では、2つのWebLogic Serverは互いとは完全に独立した状態にあります。 まったく同じアプリケーションを実行していても、互いのアクティブ・セッションをつなぐものは何も存在しません。 ステップ3でWLS_Bに対して作成した接続は、完全に新規のHttpSessionであり、WLS_Bに対してのみ関連付けられています。 このチュートリアルの第1部で、2つのドメインにOracle Coherence*WebのSPIライブラリを追加しましたが、それだけでは不十分なのでしょうか。 Oracle WebLogic Serverで、Oracle WebLogicのネイティブ・セッション・キャッシュの代わりにOracle Coherence*Webのセッション・キャッシュを使用するには、アプリケーションのデプロイメント・ディスクリプタに構成変更を追加する必要があり ます。 ドメインへのライブラリ追加は、このプロセスの一部分に過ぎません。
|
| 4. |
ブラウザ・ウィンドウを終了します。
|
Oracle Coherence*Webを使用するために必要な構成変更には、次の2段階の手順があります。
1番目の手順では、アプリケーションのweblogic.xmlデ プロイメント・ディスクリプタに共有ライブラリ参照を追加します。 weblogic.xmlディ スクリプタには、Oracle WLS固有のアプリケーション向けデプロイメント・ディレクティブが含まれています。 ここで使用する共有ライブラリは、第1部で追加したcoherence-web-spi.warで あり、ドメイン内の共有リソースです。
2番目の手順では、アプリケーションがOracle Coherenceのクラス参照を解決するために必要なcoherence.jarファイルを追加します。 このファイルは、両方のドメインの$DOMAIN_HOME\libフォ ルダにすでにコピーされています。 前述したとおり、coherence.jarファイルを この場所に配置すると、Oracle Coherenceのクラス・ファイルが各サーバーのシステム・クラスパスに追加されるため、アプリケーション・サーバーに対してスコープが設定されま す。 別の方法として、EARのAPP-INF\libフォルダにこのjarファイルを配置すると、Oracle Coherenceのスコープはアプリケーションに対して設定されます。また、WebアプリケーションのWEB-INF\libフォルダに配置すると、 Oracle CoherenceのスコープはそのWebアプリケーションのみになります。 詳しくは、http://download.oracle.com/docs/cd/E14526_01/coh.350/e14536/wslinstall.htm#COHCW147を 参照してください。
| 必要なライブラリのアプリ ケーションへの追加 | ||
|
1. |
weblogic.xmlファ イルに共有ライブラリ参照を追加します。 EclipseのProject Explorerビューで、Oracle Coherence*WebアプリケーションのWebContent/WEB-INFフォ ルダを開きます。 weblogic.xmlファイルを
Sourceビューで開きます。
|
|
2. |
Sourceビュー下部の「Source」タブをクリックし、 次のコードをディスクリプタに追加します(末尾にある</wls:weblogic-web-app>の 上に追加)。 <wls:library-ref>
ファイルを保存します。
|
| 3. |
「Window」→「Preferences」→「WebLogic」 →「Shared Libraries」の順に選択したら、「Add」をクリック します。
|
| 4. |
$COHERENCE_HOME\lib\coherence-web-spi.warファ イルを選択します。 「OK」をクリックします。
|
| 5. |
Preferencesダイアログ ボックスで、再度「OK」 をクリックします。
|
| 6. |
WLS_AドメインとWLS_Bドメインの両方で、$DOMAIN_HOME\libフォルダに$COHERENCE_HOME\lib\coherence.jarファイルをコピーしておく必要があ ります。コピーが完了していない場合、ここでコピーを実行します。
|
ここまでで、チュートリアル用のアプリケーションに対するOracle Coherence*Webの構成の適用が完了したので、次はサーバーにアプリケーションをデプロイしてテストを再実行します。WebLogic Serverのネイティブ・セッション・キャッシュとOracle Coherence*Webのセッション・キャッシュにおける動作の違いを比較してみましょう。
| アプリケーションのデプロイ とテスト | ||
|
1. |
このチュートリアルの第1部で作成した$COHERENCE_HOME\bin\web-cache-server.cmdス
クリプトを実行して、Oracle Coherenceのキャッシュを起動します。
|
|
2. |
いずれのサーバー・インスタンスについても、EclipseのServersビューに表示される現在のステータスが"Republish" であることに注意します。 これは、コードを更新したために、Eclipse内のコードとOracle WebLogic Serverにデプロイされたコードの間で不一致があるためです。
各サーバー上で右クリックして、「Publish」を選択します。
今回は、アプリケーションがデプロイされる間、Oracle WebLogic Serverのコンソール・ウィンドウとOracle Coherenceのキャッシュ・サーバー・ウィンドウの両方にアクティビティが表示されます。 アプリケーションがデプロイされたことで、このアプリケーションに対するOracle Coherence*Webのサポートが有効化されたため、Oracle Coherenceのクラスタが形成されました。
|
| 3. |
再度ブラウザを開き、WLS_A上のサーブレットをテストします。 http://localhost:7001/CoherenceWeb/SessionTest1 結果は当然ながら、前回のテストと同じものになります。 ポート7001で 実行されているWLS_Aによって、ポート番号と現在のタイムスタンプが含まれた文字列が作成され、HttpSessionに追加されます。
|
| 4. |
次に、前回と同様にWLS_A上のJSPをテストします。 http://localhost:7001/CoherenceWeb/getSessionValue1.jsp このテストも、前回のテストとまったく同じ結果になります。 セッション値は、同じサーバー上の同じセッション内で実行されているサーブレットによって追加されているため、この値をWLS_A上のJSPから取得する ことができます。
|
| 5. |
次に、WLS_B上のJSPをテストします。 http://localhost:7201/CoherenceWeb/getSessionValue1.jsp 結果の値はWLS_A上で作成されたものであり、WLS_Aのみに存在したセッションに配置されたものですが、今回はWLS_B上の JSPからもこの値を取得することができます。 これは、Oracle Coherence*Webが機能しているためです。
このシンプルなチュートリアルでは、完全に独立した2つのアプリケーション・サーバーにまったく同じようにアプリケーションをデプロイ し、サーバー間でのセッションの共有を可能にする様子を確認しました。 実際のケースでは、地理的に何千マイルも離れた2つの個別クラスタ間でこれを実現することも可能です。 しかし、このテストで行ったように、同じアプリケーションに対して手動でサーバーを切り替えることは決して一般的ではありません。 実際は、ロードバランサと呼ばれるエンティティを介してアプリケーションが提供されます。ロードバランサについては、このチュートリアルの最後の部分で説 明します。
|
先ほど説明したとおり、独立したサーバー・インスタンス間での切り替えをユーザーが手動で行うことは現実ではあ りえません。 通常は、どのサーバーのユーザー負荷がもっとも少ないかといった基準に基づいて、自動的にユーザーが所定のサーバーにルーティングされます。 また、サーバーに障害が発生した場合は、ユーザーにそれを知られることなく代替サーバーやバックアップ・サーバーにルーティングすることが理想的です。 これを実現するのがロードバランサです。
ユーザーにとっての実際の接続先はロードバランサであり、各サーバーへのルーティングはロードバランサによって 水面下で実施されます。 上記のテストのように、使用されているポート番号がユーザーに表示される場合、ユーザーの接続先はロードバランサのポートになり、実際のサーバーのポート が表示されることはありません。
Oracle Coherenceにはソフトウェアベースのシンプルなロードバランサが同梱されており、簡単な開発テストに使用できます。 ここでは、実際にこのロードバランサを使用して再度アプリケーションのテストを行います。
このトピックでは、Oracle Coherenceに同梱されているシンプルなロードバランサを使用して最後のテストを実施します。このテストを通じて、Oracle Coherence*Webを有効化したアプリケーションが、実環境でどのようにアクセスされるかを説明します。
| ロードバランサの起動と最終テストの 実施 | ||
|
1. |
新しいコマンドライン・ウィンドウを開き、$COHERENCE_HOME\libへ
移動します。
|
|
2. |
ロードバランサを起動するための構文は次のとおりです。 java -jar coherence-loadbalancer.jar <LoadBalancerAddr:PORT> <LBTargetAddr:PORT> <LBTargetAddr:PORT> <LoadBalancerAddr>はロードバランサ自体の IPまたはDNS名であり、続いてコロンとそのポート番号を指定します。 このテストで使用するロードバランサのポート番号は8080です (使用するシステム上の別のアプリケーションによってこのポート番号がすでに使用されている場合、任意の番号を使用して構いませんが、7001と7201は使用しないでくださ い)。 <LBTargetAddr>はロードバランシングされる対象 のエンティティであり、ここではWLS_AおよびWLS_Bになります。 それぞれのポート番号は、このチュートリアルを通じて使用されたポートと一致させる必要があります。具体的には、WLS_Aに は7001を指定し、WLS_Bには7201を指定します。 したがって、実行するコマンドは以下のようになります。 java - jar coherence-loadbalancer.jar localhost:8080 localhost:7001 localhost:7201 コマンドを実行しても応答やフィードバックがない場合がありますが、 このことは問題ありません。
|
| 3. |
Webブラウザを開き、サーブレットをテストします。 今回は7001や7201ではなく、ロードバランサのポート番号(8080) を使用する点に注意してください。 http://localhost:8080/CoherenceWeb/SessionTest1 ロードバランサのコンソールにアクティビティが表示されます。
いずれかのWLSインスタンスが応答したことを示すメッセージがJSPに表示されます。 ブラウザに出力されたメッセージにはポート番号として7001または7201が表示されますが、アドレス・バーには8080が 表示されます。 ロードバランサに接続した後で、リクエストがいずれかのサーバーにルーティングされたことが分かります。
|
| 4. |
ロードバランサのポート番号を使用して、再度JSPに接続します。 http://localhost:8080/CoherenceWeb/getSessionValue1.jsp ロードバランサによってルートが記録されますが、今回は7201が使用されていることに注目します。 これは、Oracle Coherenceのロードバランサがラウンドロビン法に基づいてロードバランシングを行っているためです。つまり、登録されているロードバランス・ター ゲットが順に使用されます。
JSPの出力を確認すると、JSPは7201で実行されているが、取得し た値は7001(WLS_A)で作成されたことが分かります。
このチュートリアルでは、独立した2つのOracle WebLogic Serverインスタンス間でHttpSession情報を共有し、ロードバランサを通じてクライアント・アクセスを提供する例について確認しました。 Oracle WebLogic Serverのインスタンスを200に増やした場合も、すべてのインスタンスで同じアプリケーションを実行してOracle Coherence*Webを有効化すれば、まったく同じような結果が得られるでしょう。 |
| 5. |
Oracle WebLogic Serverドメインからアプリケーションをアンデプロイし、ドメインおよびOracle Coherenceのキャッシュ・サーバー・インスタンスを停止します。
|
このチュートリアルはOracle WebLogic ServerでOracle Coherence*Webを使用する方法について簡単に説明したものですが、実用的な開発環境を稼働させる十分な基盤となります。
このレッスンで学習した内容は次のとおりです。
| Oracle WebLogic Server上で実行されるJava Webアプリケーションが、Oracle Coherence*Webを使用してHttpSessionを共有できるように構成する | ||
Oracle Coherence*Webの詳細については、下記のWebサイトを参照してください。
| Oracle Coherence(OTN) | ||
| Oracle Coherence 3.4xドキュメント | ||
| Oracle Coherence Knowledge Base Dashboard | ||
| Oracle Coherence Incubator | ||
| Oracle Coherence OBE(OTN) | ||
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが
非表示になります。