[Coherence] Coherence*Web with WebLogic Server Simple Example and Troubleshooting Overview

このエントリでは、WebLogic Serverのセッションレプリケーションではなく、Coherence*Webを使った簡単なサンプルアプリケーションの基本的な設定方法について取り上げます。今回は、Coherence 3.6.1.x と WebLogic Server 10.3.4 を使っていますが、Coherence 3.5+およびWebLogic ServerのうちCoherence*Web SPIを利用可能なリリースであれば、基本同じ設定になると思います。

簡単のため、WebLogicクラスタ上に配置したWebLogic Serverの管理対象サーバ2インスタンスがCoherence*Webをstorage-disabled-nodeとして実行しているものとします。WebLogic Serverには簡単なテスト用Webアプリケーションがデプロイされていて、セッションデータは2個の storage-enabled キャッシュサーバで構成されているCoherence Clusterに格納されています。
セッションフェールオーバが適切に動作していることを検証するための一連の手順があり、その手順が製品ドキュメント中にありますが、コメントを赤で追記しました。

[訳注]
原文はコメントを赤で追記していますが、ここでは黒のままとしています。

この例ではActiveCacheを使用していません。あくまでもCoherenceの設定およびキャッシュサーバのライフサイクルを管理する方法の例です。ActiveCacheに追加する前に、まずこの例を理解するべきと考えています。ActiveCacheの詳細(動画を含む)は以下のエントリにまとめています。

WebLogic Server 10.3.4 Screencast – Coherence Server Lifecycle Management
http://blogs.oracle.com/jamesbayer/entry/weblogic_server_1034_screencas


Oracle Coherence Oracle Coherence*Webユーザーズ・ガイド リリース3.6.1
2 WebLogic ServerでのCoherence*Webの使用方法 より

2.2.6.2 EARスコープ設定クラスタ・ノードの構成

セッション管理のためにEARスコープ設定クラスタ・ノードでCoherence*Webを使用する手順は次のとおりです。
  1. WebLogic Server管理コンソールまたはコマンドラインを使用して、アプリケーションがデプロイされるすべてのターゲット・サーバーにcoherence.jarファイルおよびcoherence-web-spi.warファイルを共有ライブラリとしてデプロイします。詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「Java EEライブラリのインストール」を参照してください。
(APP-INF/libやWEB-INF/libなどの形で)アプリケーション内に直接埋め込むよりも、アプリケーションのクラスパスでcoherence.jarを含むように共有ライブラリを使用することを推奨します。この方法を使えば、Coherenceにパッチを適用したりアップグレードしたりする場合、coherence.jarという共有ライブラリとアプリケーションを再デプロイすればよいのですが、アプリケーションの中に直接埋め込んでいる場合、組み込んだcoherence.jarを更新した、新しいビルドのアプリケーションが必要になります。これは一般的に望ましくないプロセスです。

(注意)
WebLogic Server 10.3.1の管理コンソールを使用すると、エラーが発生してcoherence.jarをデプロイできないのですが、WLSTコマンドを使うとデプロイできます。
deploy('coherence','/scratch/jbayer/coherence/lib/coherence.jar', libraryModule='true')
この管理コンソールにおけるデプロイメントの問題は、WebLogic Server 10.3.2以後では発生しません。ただし、coherence.jarをデプロイする際にどんなことがエラーになるのか注意しておくべきでしょう。ただし、「これはライブラリのデプロイメントと推定されます」という点をよく読めば、それはエラーではなく警告であって、デプロイを継続することができることがわかります。


あなたがEARを使用していると仮定すれば、サンプルアプリケーションにてCoherenceを参照するライブラリ参照を作成します。WARモジュールがEARファイルの中に入っている場合、weblogic-application.xmlの記述は以下のようになるでしょう。
<weblogic-application ...>
...
<library-ref>
  <library-name>coherence</library-name>
</library-ref>
...
</weblogic-application>
余談ですが、EARの内部にカプセル化されていないスタンドアロンのWARファイルを使用している場合は、ライブラリ参照を使用する代わりに、オプションパッケージのアプローチを使用することができます。この場合、以下のようにWARファイルのMETA-INF/MANIFEST.MFにエントリを作成する必要があります。
Manifest-Version: 1.0
Class-Path:
Extension-List: coherencejar
coherencejar-Extension-Name: coherence 
なお、テキストと最終行の末尾に改行がなければ正しく動作しません。ライブラリ参照のメカニズムとは異なり、ライブラリをデプロイ時にディスク上のアーカイブにマージすることはありません。クラスパスにcoherence.jarを配置するJavaオプションパッケージのアプローチを採用しています。

WARモジュールの場合、weblogic.xmlでは次のようなcoherence-web-spi.warのライブラリ参照を使用しています。
<wls:weblogic-web-app>
...
  <wls:library-ref>
    <wls:library-name>coherence-web-spi</wls:library-name>
  </wls:library-ref>
</wls:weblogic-web-app>
この設定により、アプリケーションのWebモジュールとcoherence-web-spi.warの内容をマージしてくれます。

デフォルトの構成設定を上書きしたい場合は、tangosol-coherence-override.xmlファイルを設定する必要があります。設定変更したいものの一つに、Well-Knowm-Addresses (WKA) の利用設定があります。デフォルトのマルチキャストでは多くのネットワーク管理者が許可しないので、ユニキャストに設定を変更します。WebLogic Serverでは異なるCoherenceの設定を使用している複数のWebアプリケーションがあるため、tangosol-coherence-override.xmlファイルを使った方法のほうが、Javaコマンドラインで- Dオプションを使用するよりも簡単です。Javaコマンドラインで-Dオプションを使うと、全てのCoherenceインスタンスで同じ設定になり、複雑な介入をする必要はありません。最新のOracle Enterprise Pack for Eclipse (OEPE) とCoherence toolingを使って、2個のWKAアドレスと、デフォルトで起動するサーバの個数に合わせてポートを自動インクリメントする仕組みように設定した以下の設定ファイルを作成しました。一つはEARファイルのAPP-INF/classes中に配置し、もう一つは$COHERENCE_HOMEに配置しました。ホスト名は適切な名前に書き換えて下さい。最新バージョンのCoherenceでは、DTDではなくXSDを使っていますので、ご注意下さい。
<?xml version="1.0"?>
  <!DOCTYPE coherence SYSTEM "coherence-override.dtd">
  <coherence>
    <cluster-config>
      <unicast-listener>
        <well-known-addresses>
          <socket-address id="2">
            <address>adc2101131.us.oracle.com</address>
            <port>8090</port>
          </socket-address>
          <socket-address id="1">
            <address>adc2101131.us.oracle.com</address>
            <port>8088</port>
          </socket-address>
        </well-known-addresses>
      <address system-property="tangosol.coherence.localhost">adc2101131.us.oracle.com</address>
      <port system-property="tangosol.coherence.localport">8088</port>
      <port-auto-adjust system-property="tangosol.coherence.localport.adjust">true</port-auto-adjust>
    </unicast-listener>
  </cluster-config>
</coherence>
WebLogic Serverにアプリケーションをデプロイする前に、キャッシュサーバをセットアップして起動しておきましょう。簡単のため、$COHERENCE_HOME/ bin/cache-server.shを$COHERENCE_HOME/bin/session-cache-server.shに複製しています。修正した箇所を太字で強調表示しておきました。
#!/bin/sh
# This will start a cache server
# specify the Coherence installation directory

COHERENCE_HOME=.

# specify the JVM heap size
MEMORY=512m

if [ ! -f ${COHERENCE_HOME}/bin/session-cache-server.sh ]; then
echo "session-cache-server.sh: must be run from the Coherence installation directory."
exit
fi

if [ -f $JAVA_HOME/bin/java ]; then
JAVAEXEC=$JAVA_HOME/bin/java
else
JAVAEXEC=java
fi

JAVA_OPTS="-Xms$MEMORY -Xmx$MEMORY -Dtangosol.coherence.session.localstorage=true -Dtangosol.coherence.cacheconfig=WEB-INF/classes/session-cache-config.xml -Dtangosol.coherence.override=/scratch/jbayer/coherence/tangosol-coherence-override.xml"
$JAVAEXEC -server -showversion $JAVA_OPTS -cp "$COHERENCE_HOME/lib/coherence.jar:$COHERENCE_HOME/lib/coherence-web-spi.war" com.tangosol.net.DefaultCacheServer $1
$COHERENCE_HOMEのsession-cache-server.sh を2インスタンス立ち上げます。
bin/session-cache-server.sh
両インスタンスがクラスタに参加し、出力中のメンバリストを確認して互いが見えていることを確認しましょう。最初のサーバからの出力は以下の通りです。赤で強調している部分は以下のことを示しています。
  • オーバーライドファイルを使用している
  • coherence-web-spi.warから生成されたsession-cache-config.xmlを使用している
  • オーバーライドファイル中で指定したプロトコルを使用している。ここではマルチキャストの代わりにユニキャストのWKA。
  • 分散セッションサービスではストレージが有効になっている
bash-3.2$ bin/session-cache-server.sh

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b51)
Java HotSpot(TM) Server VM (build 17.0-b17, mixed mode)
2011-02-15 23:26:56.374/0.580 Oracle Coherence 3.6.1-DOT-0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/scratch/jbayer/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2011-02-15 23:26:56.379/0.585 Oracle Coherence 3.6.1-DOT-0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/scratch/jbayer/coherence/tangosol-coherence-override.xml"
2011-02-15 23:26:56.386/0.592 Oracle Coherence 3.6.1.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified

Oracle Coherence Version 3.6.1.0 Build 19636
Grid Edition: Development mode
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
2011-02-15 23:26:56.760/0.966 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/scratch/jbayer/coherence/lib/coherence-web-spi.war!/WEB-INF/classes/session-cache-config.xml"
2011-02-15 23:26:57.257/1.463 Oracle Coherence GE 3.6.1.0 <D4> (thread=main, member=n/a): TCMP bound to /10.229.188.238:8088 using SystemSocketProvider
2011-02-15 23:27:27.613/31.819 Oracle Coherence GE 3.6.1.0 <Info> (thread=Cluster, member=n/a): Created a new cluster with Member(Id=1, Timestamp=2011-02-15 23:26:57.261, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:30802, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2) UID=0x0AE5BCEE0000012E2D5D5EED53EE1F98
2011-02-15 23:27:27.616/31.822 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=n/a): Started cluster Name=n/a

WellKnownAddressList(Size=2,
WKA{Address=10.229.188.238, Port=8090}
WKA{Address=10.229.188.238, Port=8088}
)

MasterMemberSet
(
ThisMember=Member(Id=1, Timestamp=2011-02-15 23:26:57.261, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:30802, Role=CoherenceServer)
OldestMember=Member(Id=1, Timestamp=2011-02-15 23:26:57.261, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:30802, Role=CoherenceServer)
ActualMemberSet=MemberSet(Size=1, BitSetCount=2
Member(Id=1, Timestamp=2011-02-15 23:26:57.261, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:30802, Role=CoherenceServer)
)

RecycleMillis=1200000
RecycleSet=MemberSet(Size=0, BitSetCount=0
)
)

TcpRing{Connections=[]}
IpMonitor{AddressListSize=0}
2011-02-15 23:27:27.665/31.871 Oracle Coherence GE 3.6.1.0 <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1
2011-02-15 23:27:27.828/32.034 Oracle Coherence GE 3.6.1.0 <D5> (thread=ReplicatedCache:ReplicatedSessionsMisc, member=1): Service ReplicatedSessionsMisc joined the cluster with senior service member 1
2011-02-15 23:27:28.074/32.280 Oracle Coherence GE 3.6.1.0 <D5> (thread=DistributedCache:DistributedSessions, member=1): Service DistributedSessions joined the cluster with senior service member 1
2011-02-15 23:27:28.105/32.311 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=1):
Services
(
ClusterService{Name=Cluster, State=(SERVICE_STARTED, STATE_JOINED), Id=0, Version=3.6, OldestMemberId=1}
InvocationService{Name=Management, State=(SERVICE_STARTED), Id=1, Version=3.1, OldestMemberId=1}
ReplicatedCache{Name=ReplicatedSessionsMisc, State=(SERVICE_STARTED), Id=2, Version=3.0, OldestMemberId=1}
PartitionedCache{Name=DistributedSessions, State=(SERVICE_STARTED), LocalStorage=enabled, PartitionCount=257, BackupCount=1, AssignedPartitions=257, BackupPartitions=0}
)
Started DefaultCacheServer...
2個目のキャッシュサーバからの出力がこちらです。両サーバがクラスタメンバであることを確認して下さい。確認のための情報を強調表示しました。特に、以前のクラスタと同一の設定値を使用していること、今回はメンバIDが2であること、最後に、このノードは、メンバ1にパーティションを尋ねていることに注目して下さい。
bash-3.2$ bin/session-cache-server.sh

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b51)
Java HotSpot(TM) Server VM (build 17.0-b17, mixed mode)

2011-02-15 23:34:51.856/0.251 Oracle Coherence 3.6.1.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/scratch/jbayer/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2011-02-15 23:34:51.861/0.256 Oracle Coherence 3.6.1.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/scratch/jbayer/coherence/tangosol-coherence-override.xml"
2011-02-15 23:34:51.866/0.261 Oracle Coherence 3.6.1.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified

Oracle Coherence Version 3.6.1.0 Build 19636
Grid Edition: Development mode
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

2011-02-15 23:34:52.147/0.542 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/scratch/jbayer/coherence/lib/coherence-web-spi.war!/WEB-INF/classes/session-cache-config.xml"
2011-02-15 23:34:52.500/0.895 Oracle Coherence GE 3.6.1.0 <D4> (thread=main, member=n/a): TCMP bound to /10.229.188.238:8090 using SystemSocketProvider
2011-02-15 23:35:16.251/24.646 Oracle Coherence GE 3.6.1.0 <Info> (thread=Cluster, member=n/a): This Member(Id=2, Timestamp=2011-02-15 23:35:16.04, Address=10.229.188.238:8090, MachineId=21486, Location=machine:jbayer-vm,process:31080, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2) joined cluster with senior Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2)
2011-02-15 23:35:16.270/24.665 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with senior member 1
2011-02-15 23:35:16.270/24.665 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1
2011-02-15 23:35:16.270/24.665 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service ReplicatedSessionsMisc with senior member 1
2011-02-15 23:35:16.270/24.665 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service DistributedSessions with senior member 1
2011-02-15 23:35:16.273/24.668 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=n/a): Started cluster Name=n/a

WellKnownAddressList(Size=2,
WKA{Address=10.229.188.238, Port=8088}
WKA{Address=10.229.188.238, Port=8090}
)

MasterMemberSet
(
ThisMember=Member(Id=2, Timestamp=2011-02-15 23:35:16.04, Address=10.229.188.238:8090, MachineId=21486, Location=machine:jbayer-vm,process:31080, Role=CoherenceServer)
OldestMember=Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer)
ActualMemberSet=MemberSet(Size=2, BitSetCount=2
Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer)
Member(Id=2, Timestamp=2011-02-15 23:35:16.04, Address=10.229.188.238:8090, MachineId=21486, Location=machine:jbayer-vm,process:31080, Role=CoherenceServer)
)

RecycleMillis=1200000
RecycleSet=MemberSet(Size=0, BitSetCount=0
)
)

TcpRing{Connections=[1]}
IpMonitor{AddressListSize=0}
2011-02-15 23:35:16.321/24.716 Oracle Coherence GE 3.6.1.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1
2011-02-15 23:35:16.429/24.825 Oracle Coherence GE 3.6.1.0 <D5> (thread=ReplicatedCache:ReplicatedSessionsMisc, member=2): Service ReplicatedSessionsMisc joined the cluster with senior service member 1
2011-02-15 23:35:16.618/25.013 Oracle Coherence GE 3.6.1.0 <D5> (thread=DistributedCache:DistributedSessions, member=2): Service DistributedSessions joined the cluster with senior service member 1
2011-02-15 23:35:16.648/25.043 Oracle Coherence GE 3.6.1.0 <Info> (thread=main, member=2):

Services
(
ClusterService{Name=Cluster, State=(SERVICE_STARTED, STATE_JOINED), Id=0, Version=3.6, OldestMemberId=1}
InvocationService{Name=Management, State=(SERVICE_STARTED), Id=1, Version=3.1, OldestMemberId=1}
ReplicatedCache{Name=ReplicatedSessionsMisc, State=(SERVICE_STARTED), Id=2, Version=3.0, OldestMemberId=1}
PartitionedCache{Name=DistributedSessions, State=(SERVICE_STARTED), LocalStorage=enabled, PartitionCount=257, BackupCount=1, AssignedPartitions=0, BackupPartitions=0}
)

Started DefaultCacheServer...
2011-02-15 23:35:16.657/25.052 Oracle Coherence GE 3.6.1.0 <D4> (thread=DistributedCache:DistributedSessions, member=2): Asking member 1 for 128 primary partitions
クラスタがうまく構成されたなら、WebLogic Serverにアプリケーションをデプロイできます。CWebTestApp.earをデプロイしましょう(earファイル中のAPP-INF/classes/tangosol-coherence-override.xmlに正しい値を指定していることを前提としています)。アクティブ化して、クラスタに結合するかどうか確認しましょう。WebLogic Clusterを構成する2つの管理対象サーバのうちの1つのサーバからの出力は以下のようになりました。出力結果は異なる可能性があります。
<Feb 16, 2011 12:12:02 AM PST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
<Feb 16, 2011 12:13:09 AM PST> <Warning> <Munger> <BEA-2156203> <A version attribute was not found in element application in the deployment descriptor in /scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/stage/CWebTestApp/CWebTestApp.ear/META-INF/application.xml. A version attribute is required, but this version of the Weblogic Server will assume that the JEE5 is used. Future versions of the Weblogic Server will reject descriptors that do not specify the JEE version.>
<Feb 16, 2011 12:13:09 AM PST> <Warning> <Munger> <BEA-2156203> <A version attribute was not found in element application in the deployment descriptor in /scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/tmp/_WL_user/CWebTestApp/sapbbg/META-INF/application.xml. A version attribute is required, but this version of the Weblogic Server will assume that the JEE5 is used. Future versions of the Weblogic Server will reject descriptors that do not specify the JEE version.>
2011-02-16 00:13:10.175/115.554 Oracle Coherence 3.6.1.0 <Info> (thread=[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational configuration from "zip:/scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/stage/coherence/3.6.1.0-AT-3.6.1.0/coherence.jar!/tangosol-coherence.xml"
2011-02-16 00:13:10.190/115.568 Oracle Coherence 3.6.1.0 <Info> (thread=[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational overrides from "zip:/scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/stage/coherence/3.6.1.0-AT-3.6.1.0/coherence.jar!/tangosol-coherence-override-dev.xml"
2011-02-16 00:13:10.191/115.569 Oracle Coherence 3.6.1.0 <Info> (thread=[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational overrides from "file:/scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/tmp/_WL_user/CWebTestApp/sapbbg/APP-INF/classes/tangosol-coherence-override.xml"
2011-02-16 00:13:10.197/115.575 Oracle Coherence 3.6.1.0 <D5> (thread=[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified

Oracle Coherence Version 3.6.1.0 Build 19636
Grid Edition: Development mode
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

2011-02-16 00:13:10.391/115.769 Oracle Coherence GE 3.6.1.0 <Info> (thread=[STANDBY] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded cache configuration from "file:/scratch/jbayer/wls1034/user_projects/domains/base_domain/servers/ManagedServer_2/tmp/_WL_user/coherence-web-spi/4yxuqd/WEB-INF/classes/session-cache-config.xml"
<Feb 16, 2011 12:13:10 AM PST> <Warning> <WorkManager> <BEA-002919> <Unable to find a WorkManager with name wm/CoherenceWorkManager. Dispatch policy wm/CoherenceWorkManager will map to the default WorkManager for the application CWebTestApp>
2011-02-16 00:13:10.681/116.059 Oracle Coherence GE 3.6.1.0 <D5> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a):
Clustered Session Cache Name=session-storage
Local Session Cache Name=local-session-storage
Local Session Attribute Cache Name=local-attribute-storage
Death Certificate Cache Name=session-death-certificates
SessionDistributionController Class Name=
AttributeScopeController Class Name=com.tangosol.coherence.servlet.AbstractHttpSessionCollection$ApplicationScopeController
Maximum Session Inactive Seconds=3600
Session ID Character Length=52
Session Locking Enforced=false
Member Session Locking Enforced=false
Application Session Locking Enforced=false
Thread Session Locking Enforced=false
Session Get Lock Timeout=300
Suspect Attribute Detection=false
Strict "Servlet Specification" Exception Handling=true
Sticky Session Ownership=false
Sticky Session Ownership Service Name=SessionOwnership
Assume Session Locality for Reaping=false
Parallel Session Reaping=true
Allow Local Attributes=false
Use Default Session ID Decoding=true
Use Default Session ID Encoding=false
Session Expiry Filter Factory=
2011-02-16 00:13:11.256/116.634 Oracle Coherence GE 3.6.1.0 <Warning> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): PreferredUnicastUdpSocket failed to set receive buffer size to 1428 packets (1.99MB); actual size is 25%, 357 packets (512KB). Consult your OS documentation regarding increasing the maximum socket buffer size. Proceeding with the actual value may cause sub-optimal performance.
2011-02-16 00:13:11.257/116.635 Oracle Coherence GE 3.6.1.0 <D4> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): TCMP bound to /10.229.188.238:8094 using SystemSocketProvider
2011-02-16 00:13:11.595/116.973 Oracle Coherence GE 3.6.1.0 <Info> (thread=Cluster, member=n/a): Failed to satisfy the variance: allowed=16, actual=45
2011-02-16 00:13:11.596/116.974 Oracle Coherence GE 3.6.1.0 <Info> (thread=Cluster, member=n/a): Increasing allowable variance to 19
2011-02-16 00:13:11.944/117.322 Oracle Coherence GE 3.6.1.0 <Info> (thread=Cluster, member=n/a): This Member(Id=10, Timestamp=2011-02-16 00:13:11.72, Address=10.229.188.238:8094, MachineId=21486, Location=machine:jbayer-vm,process:32763, Role=WeblogicServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2) joined cluster with senior Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2)
2011-02-16 00:13:11.997/117.375 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member(Id=2, Timestamp=2011-02-15 23:35:16.04, Address=10.229.188.238:8090, MachineId=21486, Location=machine:jbayer-vm,process:31080, Role=CoherenceServer) joined Cluster with senior member 1
2011-02-16 00:13:11.999/117.377 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member(Id=9, Timestamp=2011-02-16 00:13:11.687, Address=10.229.188.238:8092, MachineId=21486, Location=machine:jbayer-vm,process:32676, Role=WeblogicServer) joined Cluster with senior member 1
2011-02-16 00:13:12.044/117.422 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with senior member 1
2011-02-16 00:13:12.045/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service ReplicatedSessionsMisc with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service DistributedSessions with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 2 joined Service Cluster with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 2 joined Service Management with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 2 joined Service ReplicatedSessionsMisc with senior member 1
2011-02-16 00:13:12.046/117.424 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=n/a): Member 2 joined Service DistributedSessions with senior member 1
2011-02-16 00:13:12.087/117.465 Oracle Coherence GE 3.6.1.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Started cluster Name=n/a

WellKnownAddressList(Size=2,
WKA{Address=10.229.188.238, Port=8088}
WKA{Address=10.229.188.238, Port=8090}
)

MasterMemberSet
(
ThisMember=Member(Id=10, Timestamp=2011-02-16 00:13:11.72, Address=10.229.188.238:8094, MachineId=21486, Location=machine:jbayer-vm,process:32763, Role=WeblogicServer)
OldestMember=Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer)
ActualMemberSet=MemberSet(Size=4, BitSetCount=2
Member(Id=1, Timestamp=2011-02-15 23:34:45.487, Address=10.229.188.238:8088, MachineId=21486, Location=machine:jbayer-vm,process:31060, Role=CoherenceServer)
Member(Id=2, Timestamp=2011-02-15 23:35:16.04, Address=10.229.188.238:8090, MachineId=21486, Location=machine:jbayer-vm,process:31080, Role=CoherenceServer)
Member(Id=9, Timestamp=2011-02-16 00:13:11.687, Address=10.229.188.238:8092, MachineId=21486, Location=machine:jbayer-vm,process:32676, Role=WeblogicServer)
Member(Id=10, Timestamp=2011-02-16 00:13:11.72, Address=10.229.188.238:8094, MachineId=21486, Location=machine:jbayer-vm,process:32763, Role=WeblogicServer)
)

RecycleMillis=1200000
RecycleSet=MemberSet(Size=0, BitSetCount=0
)
)

TcpRing{Connections=[9]}
IpMonitor{AddressListSize=0}
2011-02-16 00:13:12.199/117.577 Oracle Coherence GE 3.6.1.0 <D5> (thread=Invocation:Management, member=10): Service Management joined the cluster with senior service member 1
2011-02-16 00:13:12.234/117.612 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=10): Member 9 joined Service Management with senior member 1
2011-02-16 00:13:12.478/117.856 Oracle Coherence GE 3.6.1.0 <D5> (thread=DistributedCache:DistributedSessions, member=10): Service DistributedSessions joined the cluster with senior service member 1
2011-02-16 00:13:12.560/117.938 Oracle Coherence GE 3.6.1.0 <D5> (thread=Cluster, member=10): Member 9 joined Service DistributedSessions with senior member 1
2011-02-16 00:13:12.618/117.996 Oracle Coherence GE 3.6.1.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=10): Configured session model "SplitHttpSessionCollection":
Clustered Session Cache Name=session-storage
Local Session Cache Name=local-session-storage
Local Session Attribute Cache Name=local-attribute-storage
Death Certificate Cache Name=session-death-certificates
SessionDistributionController Class Name=
AttributeScopeController Class Name=com.tangosol.coherence.servlet.AbstractHttpSessionCollection$ApplicationScopeController
Maximum Session Inactive Seconds=3600
Session ID Character Length=52
Session Locking Enforced=false
Member Session Locking Enforced=false
Application Session Locking Enforced=false
Thread Session Locking Enforced=false
Session Get Lock Timeout=300
Suspect Attribute Detection=false
Strict "Servlet Specification" Exception Handling=true
Sticky Session Ownership=false
Sticky Session Ownership Service Name=SessionOwnership
Assume Session Locality for Reaping=false
Parallel Session Reaping=true
Allow Local Attributes=false
Use Default Session ID Decoding=true
Use Default Session ID Encoding=false
Session Expiry Filter Factory=
2011-02-16 00:13:12.723/118.101 Oracle Coherence GE 3.6.1.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=10): Registering HttpSessionManager(ServetContext=ServletContextWrapper (2.5)
SessionHelper!=null
MajorVersion=2
MinorVersion=5
Clustered=false
ServletContext (wrapped)=weblogic.servlet.internal.session.CoherenceWebServletContextWrapper@1bc1ecee
AttributeMap=null
Oracle Coherence 3.6.1.0) using object name "type=HttpSessionManager,nodeId=10,appId=CWebTestAppcounter"

では、カウンタコンテキストパスのindex.jspを呼び出してみましょう。両方の管理対象サーバが同一ホスト上に存在する場合、ブラウザが同じCookieを送信します(Cookie送信時には、ポートの違いはブラウザが無視します)ので、同一セッションであれば、1カウントアップされていることを確認できるはずです。両管理対象サーバが異なるIPアドレスもしくはホスト上で動作している場合には、ロードバランサが必要です。詳細は後ほど。


Coherenceが実際にセッション保持に使用されていることを確認するには、すべてのWebLogic Serverを停止してみて下さい(Coherenceのセッションキャッシュサーバを止めてはいけません!)。ブラウザの更新ボタンを押すと、両サーバが停止していることがわかります。ブラウザセッションはオープンしたままにしておきます。


それでは、WebLogic Serverの管理対象サーバを再起動しましょう。ブラウザが開いているので、セッション参照は、ブラウザのクッキーに引き続き存在しています。WebLogic Serverを再起動してページを更新すると、カウントが中断したところから再開されているはずです。最初からカウントしていないことを確認して下さい。


ApacheやCoherenceに含まれる簡単な類のロードバランサを試してみましょう。今回は、Coherenceに含まれる簡単なロードバランサを使用し、ポート8080/tcp から、各管理対象サーバ(8001/tcpと8002/tcp)に振り分けるようにします。
java -cp coherence.jar com.tangosol.net.LoadBalancer adc2101131:8080 adc2101131:8001 adc2101131:8002
これで、8080/tcpのロードバランサに直接アクセスできるはずです。同一ブラウザセッションを使って、Cookieがまだ有効であることを確認します。


さらに、簡単なロードバランサの出力から、両方の管理対象サーバに振り分けていることがわかります。これにより、単純なCoherenceのロードバランサが固定されていないことがわかります。以下はロードバランサの出力例です。
routing to 10.229.188.238:8002

routing to 10.229.188.238:8001
これで、一方のWebLogic管理対象サーバを停止することができるはずです。ブラウザを更新しても、正しい結果を得ることができるはずです。何度かブラウザを更新すると、ロードバランサの出力には以下のようなメッセージが現れるはずです。このメッセージは停止したサーバに接続しようとして失敗したことを示しています。
*** could not connect to 10.229.188.238:8002; java.net.ConnectException: Connection refused
では、もう一方の管理対象サーバを停止します。プロキシアドレスを使用してブラウザの更新ボタンを押すと、ブラウザからの接続が失敗するはずです。次に、最初に停止した管理対象サーバを起動すると、セッションが回復するはずです。

これで、WebLogic ServerとCoherence*Webの例の説明は終了です。詳細は、Coherence*Webのドキュメントを読むことをお勧めします。CoherenceのJMXのレポート機能を有効にし、JConsoleのようなツールを使ってCoherence*WebのMBeanを調べることをお勧めします。


原文はこちら。
http://blogs.oracle.com/jamesbayer/entry/coherence_web_with_weblogic_server

0 件のコメント:

コメントを投稿