3

キャッシュライブラリとして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ファイル内にあるため、すべてのクラスターノードで同じになります。このリリースでは過去にコードがフリーズしたため、アプリケーションコードを変更することはできません。ただし、サーバーの起動設定を微調整して、上記のようにシステムプロパティを設定することはできます。

ご協力ありがとうございました!

4

3 に答える 3

4

システムプロパティの使用-Dehcache.disk.store.dirは引き続き機能します。
また、Hibernate構成でプロパティを設定するのに問題がありました。

于 2012-10-25T13:38:15.710 に答える
1

-Djava.io.tmpdir = / var / tmp / EhCache-$ {SERVER_NAME}を試しましたか?

于 2014-01-17T01:22:19.823 に答える
-2

残念ながら、この動作の理由を特定することはできませんでした。

diskStore回避策として、次の要素にコメントを付けることで、ディスクストアを完全に無効にしました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" />
  -->
  ..

すべてのキャッシュの属性overflowToDiskdiskPersistentを設定します。false

于 2012-09-06T17:45:46.337 に答える