2012-06-21 6 views
5

Estoy intentando configurar EhCache para manejar el almacenamiento en memoria caché de autorización en mi servicio web habilitado para Apache Shiro. Actualmente estoy recibiendo el siguiente excepción:Excepción de inicialización de Apache Shiro EhCache: ya existe otro CacheManager sin nombre en la misma máquina virtual

org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: Otro CacheManager sin nombre ya existe en la misma máquina virtual. Proporcione nombres únicos para cada CacheManager en la configuración o haga uno de los siguientes:
1. Utilice uno de los métodos de fábrica estáticos de CacheManager.create() para reutilizar el mismo CacheManager con el mismo nombre o cree uno si es necesario
2. Cierre el antes de cacheManager antes de crear uno nuevo con el mismo nombre.

Mi shiro.ini parece:
[principal]
...
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager cacheManager.cacheManagerConfigFile = ruta de clases: ehcache.xml
securityManager.cacheManager = $ cacheManager

De esta publicación de StackOverflow parece que las personas que usan Spring han solucionado este problema al forzar que CacheManager sea un singleton: Another unnamed CacheManager already exists in the same VM (ehCache 2.5).

¿Alguien está al tanto de las soluciones temporales que no usan la inicialización de Spring (estoy trabajando dentro del framework dropwizard y no tengo que tirar en Spring)? ¿Hay alguna forma de aplicar la configuración singleton desde shiro.ini?

¡Gracias de antemano!

Respuesta

2

Cree una clase personalizada que amplíe EhCacheManager y configure su cacheManager en el constructor. Esto (net.sf.ehcache.CacheManager.create()) le permite reutilizar un cachemanager ya existente.

package lekkie.omotayo 

public class MyShiroCacheManager extends EhCacheManager 
{ 

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

A continuación, puede hacer esto:

cacheManager = lekkie.omotayo.MyShiroCacheManager 
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml 
securityManager.cacheManager = $cacheManager 
Cuestiones relacionadas