/*
* Created on Oct 29, 2004
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*
* Copyright @2007 the original author or authors.
*/
package org.springmodules.cache.provider.ehcache;
import net.sf.ehcache.constructs.blocking.CacheEntryFactory;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springmodules.cache.CachingModel;
import org.springmodules.util.Objects;
/**
* Configuration options needed to store, retrieve and remove objects from
* EHCache.
*
* @author Omar Irbouh
* @author Alex Ruiz
*/
public class EhCacheCachingModel implements CachingModel {
private static final long serialVersionUID = 3762529035888112945L;
private String cacheName;
private boolean blocking;
private CacheEntryFactory cacheEntryFactory;
/**
* Constructor.
*/
public EhCacheCachingModel() {
}
/**
* Constructor.
*
* @param cacheName the name of the EHCache cache to use
*/
public EhCacheCachingModel(String cacheName) {
setCacheName(cacheName);
}
/**
* Sets the name of the EHCache cache to use.
*
* @param newCacheName the new name of the EHCache cache
*/
public final void setCacheName(String newCacheName) {
cacheName = newCacheName;
}
/**
* @return the name of the EHCache cache to use
*/
public final String getCacheName() {
return cacheName;
}
/**
* Set whether to use a blocking cache that lets read attempts block
* until the requested element is created.
* <p>If you intend to build a self-populating blocking cache,
* consider specifying a {@link #setCacheEntryFactory CacheEntryFactory}.
*
* @see net.sf.ehcache.constructs.blocking.BlockingCache
* @see #setCacheEntryFactory
* @see org.springframework.cache.ehcache.EhCacheFactoryBean#setBlocking(boolean)
*/
public void setBlocking(boolean blocking) {
this.blocking = blocking;
}
public boolean isBlocking() {
return blocking;
}
/**
* Set an EHCache {@link net.sf.ehcache.constructs.blocking.CacheEntryFactory}
* to use for a self-populating cache. If such a factory is specified,
* the cache will be decorated with EHCache's
* {@link net.sf.ehcache.constructs.blocking.SelfPopulatingCache}.
* <p>The specified factory can be of type
* {@link net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory},
* which will lead to the use of an
* {@link net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache}.
* <p>Note: Any such self-populating cache is automatically a blocking cache.
*
* @see net.sf.ehcache.constructs.blocking.SelfPopulatingCache
* @see net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache
* @see net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory
* @see org.springframework.cache.ehcache.EhCacheFactoryBean#setCacheEntryFactory(net.sf.ehcache.constructs.blocking.CacheEntryFactory)
*/
public void setCacheEntryFactory(CacheEntryFactory cacheEntryFactory) {
this.cacheEntryFactory = cacheEntryFactory;
}
public CacheEntryFactory getCacheEntryFactory() {
return cacheEntryFactory;
}
/**
* @see Object#equals(Object)
*/
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof EhCacheCachingModel)) {
return false;
}
EhCacheCachingModel cachingModel = (EhCacheCachingModel) obj;
if (!ObjectUtils.nullSafeEquals(cacheName, cachingModel.cacheName)) {
return false;
}
return true;
}
/**
* @see Object#hashCode()
*/
public int hashCode() {
int multiplier = 31;
int hash = 7;
hash = multiplier * hash + (Objects.nullSafeHashCode(cacheName));
return hash;
}
/**
* @see Object#toString()
*/
public String toString() {
return Objects.identityToString(this)
.append("[cacheName=")
.append(StringUtils.quote(cacheName))
.append(", blocking=")
.append(blocking)
.append(", cacheEntryFactory=")
.append((cacheEntryFactory != null)? cacheEntryFactory.getClass().getName() : null)
.append("]")
.toString();
}
}