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
This commit is contained in:
Derek Hulley
2006-08-29 10:27:38 +00:00
parent 6fb05fa7ab
commit 297a7dec6e
5 changed files with 114 additions and 81 deletions

View File

@@ -13,7 +13,7 @@
<!-- EH Cache Manager to produce in-transaction EH Caches --> <!-- EH Cache Manager to produce in-transaction EH Caches -->
<!-- ==================================================== --> <!-- ==================================================== -->
<bean name="transactionalEHCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" > <bean name="transactionalEHCacheManager" class="org.alfresco.repo.cache.EhCacheManagerFactoryBean" >
<property name="configLocation"> <property name="configLocation">
<value>classpath:alfresco/ehcache-transactional.xml</value> <value>classpath:alfresco/ehcache-transactional.xml</value>
</property> </property>

View File

@@ -1,162 +1,127 @@
<?xml version='1.0' encoding='UTF-8'?>
<ehcache> <ehcache>
<!-- defaults --> <!-- defaults -->
<diskStore <diskStore
path="java.io.tmpdir"/> path="java.io.tmpdir"/>
<!--
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
multicastGroupPort=4446"/>
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
-->
<defaultCache <defaultCache
maxElementsInMemory="5000" maxElementsInMemory="5000"
eternal="true" eternal="true"
timeToIdleSeconds="0" timeToIdleSeconds="0"
timeToLiveSeconds="0" timeToLiveSeconds="0"
overflowToDisk="false" overflowToDisk="false"
/> >
<!--
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=false,
replicateUpdates=true, replicateUpdatesViaCopy=false,
replicateRemovals=true"/>
-->
</defaultCache>
<!-- Hibernate usage --> <!-- Hibernate usage -->
<cache <cache
name="org.hibernate.cache.StandardQueryCache" name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="50" maxElementsInMemory="50"
eternal="true" />
timeToLiveSeconds="0"
overflowToDisk="false"/>
<!-- approx 0.4MB memory required --> <!-- approx 0.4MB memory required -->
<cache <cache
name="org.hibernate.cache.UpdateTimestampsCache" name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="2000" maxElementsInMemory="2000"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 40MB memory required --> <!-- approx 40MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeImpl" name="org.alfresco.repo.domain.hibernate.NodeImpl"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 0.1 MB memory required --> <!-- approx 0.1 MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.QNameEntityImpl" name="org.alfresco.repo.domain.hibernate.QNameEntityImpl"
maxElementsInMemory="100" maxElementsInMemory="100"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 40MB memory required --> <!-- approx 40MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeStatusImpl" name="org.alfresco.repo.domain.hibernate.NodeStatusImpl"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 15MB memory required --> <!-- approx 15MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeImpl.aspects" name="org.alfresco.repo.domain.hibernate.NodeImpl.aspects"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 10MB memory required --> <!-- approx 10MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeImpl.properties" name="org.alfresco.repo.domain.hibernate.NodeImpl.properties"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 10MB memory required --> <!-- approx 10MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeImpl.parentAssocs" name="org.alfresco.repo.domain.hibernate.NodeImpl.parentAssocs"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 250MB memory required --> <!-- approx 250MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.ChildAssocImpl" name="org.alfresco.repo.domain.hibernate.ChildAssocImpl"
maxElementsInMemory="200000" maxElementsInMemory="200000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- general use node associations are not common --> <!-- general use node associations are not common -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.NodeAssocImpl" name="org.alfresco.repo.domain.hibernate.NodeAssocImpl"
maxElementsInMemory="1000" maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- low numbers of objects expected --> <!-- low numbers of objects expected -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.StoreImpl" name="org.alfresco.repo.domain.hibernate.StoreImpl"
maxElementsInMemory="100" maxElementsInMemory="100"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- version counters --> <!-- version counters -->
<!-- approx 0.4MB memory required --> <!-- approx 0.4MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.VersionCountImpl" name="org.alfresco.repo.domain.hibernate.VersionCountImpl"
maxElementsInMemory="100" maxElementsInMemory="100"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/> />
<!-- approx 0.1MB memory required --> <!-- approx 0.1MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.AppliedPatchImpl" name="org.alfresco.repo.domain.hibernate.AppliedPatchImpl"
maxElementsInMemory="100" maxElementsInMemory="100"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="60" timeToLiveSeconds="60"
overflowToDisk="false"
/> />
<!-- Permission related caches --> <!-- Permission related caches -->
<!-- approx 1MB memory required --> <!-- approx 1MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl" name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"
maxElementsInMemory="1000" maxElementsInMemory="1000"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 1MB memory required --> <!-- approx 1MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl.entries" name="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl.entries"
maxElementsInMemory="1000" maxElementsInMemory="1000"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 5MB memory required --> <!-- approx 5MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbAccessControlEntryImpl" name="org.alfresco.repo.domain.hibernate.DbAccessControlEntryImpl"
maxElementsInMemory="5000" maxElementsInMemory="5000"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 1MB memory required --> <!-- approx 1MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbPermissionImpl" name="org.alfresco.repo.domain.hibernate.DbPermissionImpl"
maxElementsInMemory="500" maxElementsInMemory="500"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 10MB memory required --> <!-- approx 10MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl" name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl"
maxElementsInMemory="10000" maxElementsInMemory="10000"
eternal="true" />
overflowToDisk="false"/>
<!-- approx 5MB memory required --> <!-- approx 5MB memory required -->
<cache <cache
name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl.externalKeys" name="org.alfresco.repo.domain.hibernate.DbAuthorityImpl.externalKeys"
maxElementsInMemory="5000" maxElementsInMemory="5000"
eternal="true" />
overflowToDisk="false"/>
</ehcache> </ehcache>

View File

@@ -16,7 +16,6 @@
*/ */
package org.alfresco.repo.cache; package org.alfresco.repo.cache;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import net.sf.ehcache.Cache; import net.sf.ehcache.Cache;
@@ -99,14 +98,7 @@ public class EhCacheAdapter<K extends Serializable, V extends Serializable>
} }
public void clear() public void clear()
{
try
{ {
cache.removeAll(); cache.removeAll();
} }
catch (IOException e)
{
throw new AlfrescoRuntimeException("Failed to clear cache", e);
}
}
} }

View File

@@ -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 <code>EHCacheManager</code>
* 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 <b>file:</b> or <b>classpath:</b> 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();
}
}

View File

@@ -16,7 +16,6 @@
*/ */
package org.alfresco.repo.cache; package org.alfresco.repo.cache;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@@ -438,16 +437,9 @@ public class TransactionalCache<K extends Serializable, V extends Serializable>
// and also serves to ensure that the shared cache will be ignored // and also serves to ensure that the shared cache will be ignored
// for the remainder of the transaction // for the remainder of the transaction
txnData.isClearOn = true; txnData.isClearOn = true;
try
{
txnData.updatedItemsCache.removeAll(); txnData.updatedItemsCache.removeAll();
txnData.removedItemsCache.removeAll(); txnData.removedItemsCache.removeAll();
} }
catch (IOException e)
{
throw new AlfrescoRuntimeException("Failed to clear caches", e);
}
}
else // no transaction else // no transaction
{ {
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())