/******************************************************************************
* Sony Online Entertainment
* Application Engineering
*
* Unpublished work Copyright 2005 Sony Online Entertainment Inc.
* All rights reserved.
* Created on Oct 11, 2005
******************************************************************************/
package net.jforum.cache;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import net.jforum.util.preferences.SystemGlobals;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.apache.log4j.Logger;
/**
* The rest of the application seems to make some invalid assumptions about how
* things are cached. Those assumptions might be benign, but it is hard to tell
* without deep testing. Until this is finishe the JBossCacheEngine should be
* configured in a local mode.
*
* Created on Oct 11, 2005
*
* @author Jake Fear
* @version $Id: EhCacheEngine.java,v 1.1 2005/10/14 00:15:54 rafaelsteil Exp $
*/
public class EhCacheEngine implements CacheEngine {
private static final Logger log = Logger.getLogger(EhCacheEngine.class);
private CacheManager manager;
public void init() {
try {
manager = CacheManager.create(SystemGlobals.getValue("ehcache.cache.properties"));
} catch (CacheException ce) {
log.error("EhCache could not be initialized", ce);
throw new RuntimeException(ce);
}
}
public void stop() {
manager.shutdown();
}
public void add(String key, Object value) {
if (log.isDebugEnabled()) {
log.debug("Caching " + value + " with key " + key);
}
add(DUMMY_FQN, key, value);
}
public void add(String fullyQualifiedName, String key, Object value) {
if (!manager.cacheExists(fullyQualifiedName)) {
try {
manager.addCache(fullyQualifiedName);
} catch (CacheException ce) {
log.error(ce, ce);
throw new RuntimeException(ce);
}
}
Cache cache = manager.getCache(fullyQualifiedName);
Element element = new Element(key, (Serializable)value);
cache.put(element);
}
public Object get(String fullyQualifiedName, String key) {
try {
if (!manager.cacheExists(fullyQualifiedName)) {
manager.addCache(fullyQualifiedName);
return null;
}
Cache cache = manager.getCache(fullyQualifiedName);
Element element = cache.get(key);
if (element != null) {
return element.getValue();
}
return null;
} catch (CacheException ce) {
log.error("EhCache could not be shutdown", ce);
throw new RuntimeException(ce);
}
}
public Object get(String fullyQualifiedName) {
if (!manager.cacheExists(fullyQualifiedName)) {
try {
manager.addCache(fullyQualifiedName);
} catch (CacheException ce) {
log.error("EhCache could not be shutdown", ce);
throw new RuntimeException(ce);
}
}
Cache cache = manager.getCache(fullyQualifiedName);
return cache;
}
public Collection getValues(String fullyQualifiedName) {
try {
if (!manager.cacheExists(fullyQualifiedName)) {
manager.addCache(fullyQualifiedName);
return new ArrayList();
}
Cache cache = manager.getCache(fullyQualifiedName);
List values = new ArrayList(cache.getSize());
List keys = cache.getKeys();
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
values.add(cache.get((Serializable)iter.next()));
}
return values;
} catch (CacheException ce) {
log.error("EhCache could not be shutdown", ce);
throw new RuntimeException(ce);
}
}
public void remove(String fullyQualifiedName, String key) {
Cache cache = manager.getCache(fullyQualifiedName);
if (cache != null) {
cache.remove(key);
}
}
public void remove(String fullyQualifiedName) {
if (manager.cacheExists(fullyQualifiedName)) {
manager.removeCache(fullyQualifiedName);
}
}
}