From 297a7dec6e4d9e1e414beda5624fde9d038ca1cb Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 29 Aug 2006 10:27:38 +0000 Subject: [PATCH] Support for EHCache 1.2.2 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3623 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/cache-context.xml | 2 +- config/alfresco/ehcache-default.xml | 87 ++++++------------- .../alfresco/repo/cache/EhCacheAdapter.java | 10 +-- .../repo/cache/EhCacheManagerFactoryBean.java | 84 ++++++++++++++++++ .../repo/cache/TransactionalCache.java | 12 +-- 5 files changed, 114 insertions(+), 81 deletions(-) create mode 100644 source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java diff --git a/config/alfresco/cache-context.xml b/config/alfresco/cache-context.xml index a65d4ff7e1..a24976a99e 100644 --- a/config/alfresco/cache-context.xml +++ b/config/alfresco/cache-context.xml @@ -13,7 +13,7 @@ - + classpath:alfresco/ehcache-transactional.xml diff --git a/config/alfresco/ehcache-default.xml b/config/alfresco/ehcache-default.xml index d041028986..570dc0076b 100644 --- a/config/alfresco/ehcache-default.xml +++ b/config/alfresco/ehcache-default.xml @@ -1,162 +1,127 @@ + + + > + + + /> + /> + /> + /> + /> + /> + /> + /> \ No newline at end of file diff --git a/source/java/org/alfresco/repo/cache/EhCacheAdapter.java b/source/java/org/alfresco/repo/cache/EhCacheAdapter.java index 95fdb60f6c..5f2c37b9bf 100644 --- a/source/java/org/alfresco/repo/cache/EhCacheAdapter.java +++ b/source/java/org/alfresco/repo/cache/EhCacheAdapter.java @@ -16,7 +16,6 @@ */ package org.alfresco.repo.cache; -import java.io.IOException; import java.io.Serializable; import net.sf.ehcache.Cache; @@ -100,13 +99,6 @@ public class EhCacheAdapter public void clear() { - try - { - cache.removeAll(); - } - catch (IOException e) - { - throw new AlfrescoRuntimeException("Failed to clear cache", e); - } + cache.removeAll(); } } diff --git a/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java b/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java new file mode 100644 index 0000000000..f3dc89a82a --- /dev/null +++ b/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ +package org.alfresco.repo.cache; + +import java.io.IOException; + +import net.sf.ehcache.CacheException; +import net.sf.ehcache.CacheManager; + +import org.alfresco.util.PropertyCheck; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.io.Resource; + +/** + * This is virtually a copy of the Springframework version, with the exception + * that it uses the newer constructors for the EHCacheManager + * instances. + * + * @author Derek Hulley + */ +public class EhCacheManagerFactoryBean implements FactoryBean, InitializingBean, DisposableBean +{ + protected final Log logger = LogFactory.getLog(EhCacheManagerFactoryBean.class); + + private Resource configLocation; + private CacheManager cacheManager; + + /** + * + * @param configLocation a resource location using the file: or classpath: prefix + */ + public void setConfigLocation(Resource configLocation) + { + this.configLocation = configLocation; + } + + public void afterPropertiesSet() throws IOException, CacheException + { + PropertyCheck.mandatory(this, "configLocation", configLocation); + + logger.info("Initializing EHCache CacheManager"); + this.cacheManager = new CacheManager(this.configLocation.getURL()); + } + + public Object getObject() + { + return this.cacheManager; + } + + public Class getObjectType() + { + return (this.cacheManager != null ? this.cacheManager.getClass() : CacheManager.class); + } + + public boolean isSingleton() + { + return true; + } + + public void destroy() + { + logger.info("Shutting down EHCache CacheManager"); + this.cacheManager.shutdown(); + } +} diff --git a/source/java/org/alfresco/repo/cache/TransactionalCache.java b/source/java/org/alfresco/repo/cache/TransactionalCache.java index 3348d3f097..f2080be2b4 100644 --- a/source/java/org/alfresco/repo/cache/TransactionalCache.java +++ b/source/java/org/alfresco/repo/cache/TransactionalCache.java @@ -16,7 +16,6 @@ */ package org.alfresco.repo.cache; -import java.io.IOException; import java.io.Serializable; import java.util.List; @@ -438,15 +437,8 @@ public class TransactionalCache // and also serves to ensure that the shared cache will be ignored // for the remainder of the transaction txnData.isClearOn = true; - try - { - txnData.updatedItemsCache.removeAll(); - txnData.removedItemsCache.removeAll(); - } - catch (IOException e) - { - throw new AlfrescoRuntimeException("Failed to clear caches", e); - } + txnData.updatedItemsCache.removeAll(); + txnData.removedItemsCache.removeAll(); } else // no transaction {