package org.ops4j.pax.web.service.jetty.ehcache;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.SessionHandler;
import org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper;
import org.ops4j.pax.web.service.jetty.spi.SessionHandlerBuilder;
import org.ops4j.pax.web.service.spi.model.Model;
/**
* @author <a href="mailto:sgonzalez@atricore.org">Sebastian Gonzalez Oyuela</a>
* @version $Id$
*/
public class EHCacheSessionHandlerBuilder implements SessionHandlerBuilder {
private static final Log LOG = LogFactory.getLog( EHCacheSessionHandlerBuilder.class );
private CacheManager cacheManager;
private Cache sessionsCache;
private String cacheName;
public EHCacheSessionHandlerBuilder() {
LOG.debug("Using EHCache Session Handler builder ...");
cacheName = "idbus-http-sessions";
}
protected void doStart() {
if (!cacheManager.cacheExists(cacheName)) {
org.mortbay.log.Log.info("Adding new Sessions EHCache cache " + cacheName);
cacheManager.addCache(cacheName);
}
this.sessionsCache = cacheManager.getCache(cacheName);
}
protected void doStop() {
if (sessionsCache != null) {
cacheManager.removeCache(sessionsCache.getName());
sessionsCache = null;
}
}
public SessionHandler build(Server server, Model model) {
LOG.debug("Creating EHCache Session Manager");
// Only one cache for all apps:
if (org.mortbay.log.Log.isDebugEnabled())
org.mortbay.log.Log.debug("Building EHCache SessionHandler w/cache " + cacheName);
// Sessin Id Manager
EHCacheSessionIdManager sessionIdManager = new EHCacheSessionIdManager(server, sessionsCache);
String workerName = model.getContextModel().getSessionWorkerName();
if (workerName != null && !workerName.equals("") && !workerName.equals("null")) {
sessionIdManager.setWorkerName(workerName);
} else {
sessionIdManager.setWorkerName(null);
}
if (LOG.isDebugEnabled())
LOG.debug("Using EHCache Session ID Manager for worker : " +
workerName);
// Session Manager
EHCacheSessionManager sm = new EHCacheSessionManager(server, model, sessionsCache);
sm.setIdManager(sessionIdManager);
//Session Handler
return new EHCacheSessionHandler(sm);
}
public CacheManager getCacheManager() {
return cacheManager;
}
public void setCacheManager(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
public String getCacheName() {
return cacheName;
}
public void setCacheName(String cacheName) {
this.cacheName = cacheName;
}
}