Apache Shiro EhCache初始化异常:另一个未命名的CacheManager已经存在于同一个VM中

时间:2012-06-21 13:49:00

标签: apache ehcache shiro

我正在尝试将EhCache配置为在启用Apache Shiro的Web服务中处理授权缓存。目前我收到以下异常:

  

org.apache.shiro.cache.CacheException:net.sf.ehcache.CacheException:另一个未命名的CacheManager已存在于同一个VM中。请为配置中的每个CacheManager提供唯一的名称,或执行以下操作之一:
  1.使用CacheManager.create()静态工厂方法之一重用相同名称的相同CacheManager,或者根据需要创建一个   2.在创建具有相同名称的新缓存之前关闭先前的cacheManager。

我的shiro.ini看起来像:
    [主要]
    ...
    cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager     cacheManager.cacheManagerConfigFile = classpath: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强制执行单例配置?

提前谢谢!

1 个答案:

答案 0 :(得分: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