5

Apache Shiro 対応の Web サービスで認証キャッシュを処理するように EhCache を構成しようとしています。現在、次の例外が発生しています。

org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: 名前のない別の CacheManager が同じ VM に既に存在します。config で各 CacheManager に一意の名前を指定するか、次のいずれかを実行してください。

  1. CacheManager.create() 静的ファクトリ メソッドの 1 つを使用して、同じ CacheManager を同じ名前で再利用するか、必要に応じて作成します
  2. 同じ名前で新しい cacheManager を作成する前に、以前の cacheManager をシャットダウンします。

私の shiro.ini は次のようになります。

[main]   
...    
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager 
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml  
securityManager.cacheManager = $cacheManager 

この StackOverflow の投稿から、Spring を使用している人々は CacheManager を強制的にシングルトンにすることでこの問題を回避したようです:同じ VM (ehCache 2.5) に名前のない別の CacheManager が既に存在します

Spring の初期化を使用しない回避策を知っている人はいますか (私は dropwizard フレームワーク内で作業しており、Spring をプルする必要はありません)。shiro.ini からシングルトン構成を強制する方法はありますか?

前もって感謝します!

4

1 に答える 1

3

EhCacheManagerを拡張するカスタムクラスを作成し、コンストラクターでcacheManagerを設定します。これ(net.sf.ehcache.CacheManager.create())を使用すると、既存のキャッシュマネージャーを再利用できます。

package lekkie.omotayo

public class MyShiroCacheManager extends EhCacheManager
{

    public CacheManager()
    {
        setCacheManager(net.sf.ehcache.CacheManager.create());
    }
}

次に、これを行うことができます:

cacheManager = lekkie.omotayo.MyShiroCacheManager
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml
securityManager.cacheManager = $cacheManager
于 2013-02-07T14:05:29.347 に答える