2012-06-21 36 views
5

我試圖將EhCache配置爲在啓用Apache Shiro的Web服務中處理授權緩存。目前,我收到以下例外情況:Apache Shiro EhCache初始化異常:另一個未命名的CacheManager已經存在於同一個虛擬機中

org.apache.shiro.cache.CacheException:net.sf.ehcache.CacheException:另一個未命名的CacheManager已存在於同一VM中。請爲配置中的每個CacheManager提供唯一的名稱,或執行以下操作之一:
1.使用其中一個CacheManager.create()靜態工廠方法重用相同名稱的CacheManager,或者根據需要創建一個
2.關閉在創建具有相同名稱的新的cacheManager之前更早的cacheManager。

我shiro.ini樣子:
[主]
...
的CacheManager = org.apache.shiro.cache.ehcache.EhCacheManager cacheManager.cacheManagerConfigFile =類路徑:ehcache.xml中
securityManager.cacheManager = $ cacheManager

從這個StackOverflow文章看來,使用Spring的人通過強制CacheManager成爲單例來解決這個問題:Another unnamed CacheManager already exists in the same VM (ehCache 2.5)

是否有人知道不使用Spring初始化的解決方法(我正在使用dropwizard框架工作,並且不需要在Spring中進行)?有沒有從shiro.ini強制單身配置的方式?

預先感謝您!

回答

2

創建一個擴展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 
相關問題