diff --git a/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java b/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java index 074c9ce879..fa5f42643e 100644 --- a/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java +++ b/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java @@ -36,7 +36,9 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.cache.Cache; import org.hibernate.cache.CacheException; import org.hibernate.cache.CacheProvider; +import org.hibernate.cache.EhCache; import org.hibernate.cache.EhCacheProvider; +import org.hibernate.cache.Timestamper; import org.springframework.beans.factory.FactoryBean; import org.springframework.util.ResourceUtils; @@ -74,6 +76,8 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv /** keep track of the singleton status to avoid work */ private static boolean initialized; + /** the CacheManager */ + private static CacheManager cacheManager; /** used to ensure that the existing Hibernate logic is maintained */ private static EhCacheProvider hibernateEhCacheProvider = new EhCacheProvider(); @@ -101,13 +105,17 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv try { URL configUrl = ResourceUtils.getURL(CUSTOM_CONFIGURATION_FILE); - CacheManager.create(configUrl); + InternalEhCacheManagerFactoryBean.cacheManager = new CacheManager(configUrl); } catch (FileNotFoundException e) { // try the alfresco default URL configUrl = ResourceUtils.getURL(DEFAULT_CONFIGURATION_FILE); - CacheManager.create(configUrl); // this file MUST be present + if (configUrl == null) + { + throw new AlfrescoRuntimeException("Missing default cache config: " + DEFAULT_CONFIGURATION_FILE); + } + InternalEhCacheManagerFactoryBean.cacheManager = new CacheManager(configUrl); defaultLocation = true; } // done @@ -131,17 +139,32 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv */ public static CacheManager getInstance() { - initCacheManager(); - return CacheManager.getInstance(); + if (!InternalEhCacheManagerFactoryBean.initialized) + { + InternalEhCacheManagerFactoryBean.initCacheManager(); + } + return InternalEhCacheManagerFactoryBean.cacheManager; } - /** - * @see #hibernateEhCacheProvider - */ public Cache buildCache(String regionName, Properties properties) throws CacheException { - initCacheManager(); - return hibernateEhCacheProvider.buildCache(regionName, properties); + CacheManager manager = InternalEhCacheManagerFactoryBean.getInstance(); + try + { + net.sf.ehcache.Cache cache = manager.getCache(regionName); + if (cache == null) + { + logger.info("Using default cache configuration: " + regionName); + manager.addCache(regionName); + cache = manager.getCache(regionName); + logger.debug("Started EHCache region: " + regionName); + } + return new EhCache(cache); + } + catch (net.sf.ehcache.CacheException e) + { + throw new CacheException(e); + } } /** @@ -149,7 +172,7 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv */ public boolean isMinimalPutsEnabledByDefault() { - return hibernateEhCacheProvider.isMinimalPutsEnabledByDefault(); + return false; } /** @@ -157,27 +180,23 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv */ public long nextTimestamp() { - return hibernateEhCacheProvider.nextTimestamp(); + return Timestamper.next(); } /** * @see #initCacheManager() - * @see #hibernateEhCacheProvider */ public void start(Properties properties) throws CacheException { - initCacheManager(); - hibernateEhCacheProvider.start(properties); + InternalEhCacheManagerFactoryBean.initCacheManager(); } /** * @see #initCacheManager() - * @see #hibernateEhCacheProvider */ public void stop() { - initCacheManager(); - hibernateEhCacheProvider.stop(); + InternalEhCacheManagerFactoryBean.getInstance().shutdown(); } /** @@ -187,8 +206,7 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean, CacheProv */ public Object getObject() throws Exception { - initCacheManager(); - return CacheManager.getInstance(); + return InternalEhCacheManagerFactoryBean.getInstance(); } /** diff --git a/source/test-resources/jbpmresources/hibernate.cfg.xml b/source/test-resources/jbpmresources/hibernate.cfg.xml index c92f1d3786..2066e575a9 100644 --- a/source/test-resources/jbpmresources/hibernate.cfg.xml +++ b/source/test-resources/jbpmresources/hibernate.cfg.xml @@ -8,6 +8,8 @@ + org.alfresco.repo.cache.InternalEhCacheManagerFactoryBean + true org.hibernate.dialect.HSQLDialect org.hsqldb.jdbcDriver jdbc:hsqldb:mem:.;sql.enforce_strict_size=true