キャッシュライブラリとしてEhCache2.4.2を使用し、Sun JVM1.6.0_x64ビットを使用するSolaris上のWebLogicServer10.3.4でSpring3.0.5Webアプリケーションを実行しています。WLSは、2つのノードを持つクラスターとしてセットアップされ、両方とも同じ物理マシン上で実行され、標準
startManagedWebLogic.sh
スクリプトを介して開始されます(NodeManager /管理コンソールを使用しない)。
ここではehcache.xml
、ディスクストアパスを次のように設定しました。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!-- Location of persistent caches on disk -->
<diskStore path="ehcache.disk.store.dir" />
..
EhCacheの2.4シリーズのドキュメントによると、 この設定により、ディスクストアパスを指定するためにJVMシステムプロパティを設定できます。
システムプロパティはstartManagedWebLogic.sh
、標準JAVA_OPTIONS
要素を使用して設定されます。
JAVA_OPTIONS="-Dehcache.disk.store.dir=/var/tmp/EhCache-${SERVER_NAME} <other stuff>"
export JAVA_OPTIONS
これらのオプションの前に同じスクリプトでSERVER_NAME
定義されています。
クラスタノードの起動中に、プロパティが正しく設定されていることを確認できます(読みやすくするためにラップされています)。
/usr/jdk/jdk1.6.0_21/bin/java -d64 -server -Xms4096m -Xmx4096m
-XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelOldGC
-verbose:gc -XX:+PrintGCTimeStamps -Dweblogic.Name=Node2 [..]
-Dehcache.disk.store.dir=/var/tmp/EhCache-Node2 [..]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
weblogic.Server
ただし、アプリケーションを使用すると、プレースホルダーが正しく置き換えられていないことがわかります。したがって、実際のパス設定の代わりにプレースホルダー名を使用しています。
2012-08-22 11:52:59,426 DEBUG [net.sf.ehcache.CacheManager] - [Creating new CacheManager with default config]
2012-08-22 11:52:59,429 DEBUG [net.sf.ehcache.CacheManager] - [Configuring ehcache from classpath.]
..
2012-08-22 11:52:59,458 DEBUG [net.sf.ehcache.config.DiskStoreConfiguration] - [Disk Store Path: ehcache.disk.store.dir]
..
2012-08-22 11:52:59,586 DEBUG [net.sf.ehcache.store.DiskStore] - [IOException reading index. Creating new index. ]
2012-08-22 11:52:59,587 DEBUG [net.sf.ehcache.store.DiskStore] - [Index file ehcache.disk.store.dir/bookmarksCountForUserCache.index deleted.]
2012-08-22 11:52:59,588 DEBUG [net.sf.ehcache.store.DiskStore] - [Index file ehcache.disk.store.dir/bookmarksCountForUserCache.index created successfully]
2012-08-22 11:52:59,588 DEBUG [net.sf.ehcache.store.DiskStore] - [Index file dirty or empty. Deleting data file bookmarksCountForUserCache.data]
2012-08-22 11:52:59,597 DEBUG [net.sf.ehcache.store.MemoryStore] - [Initialized net.sf.ehcache.store.LruMemoryStore for bookmarksCountForUserCache]
2012-08-22 11:52:59,600 DEBUG [net.sf.ehcache.store.LruMemoryStore] - [bookmarksCountForUserCache Cache: Using SpoolingLinkedHashMap implementation]
2012-08-22 11:52:59,601 DEBUG [net.sf.ehcache.Cache] - [Initialised cache: bookmarksCountForUserCache]
WLSドメイン内のファイルシステムでは、新しいフォルダー
ehcache.disk.store.dir
が作成されていることがわかります。そのため、パスは相対パスとして解釈されます。
プレーンな文字列を使用する代わりにehcache.disk.store.dir
、標準パターンを使用してみ${ehcache.disk.store.dir}
ましたが、これは、で作成されるフォルダー名のみを変更しました${..}
。
システムプロパティとすべてのノードに同じEhCache構成を使用して、ノードごとのディスクストアパスを指定する方法はありますか?
ehcache.xml
デプロイされた.warファイル内にあるため、すべてのクラスターノードで同じになります。このリリースでは過去にコードがフリーズしたため、アプリケーションコードを変更することはできません。ただし、サーバーの起動設定を微調整して、上記のようにシステムプロパティを設定することはできます。
ご協力ありがとうございました!