package org.jboss.web.tomcat.tc5.session;
import java.io.IOException;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletException;
import org.apache.catalina.*;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.util.LifecycleSupport;
import org.apache.catalina.valves.ValveBase;
public class ClusteredSessionValve extends ValveBase implements Lifecycle
{
private static final String info = "ClusteredSessionValve/1.0";
protected SnapshotManager snapshot;
protected LifecycleSupport support = new LifecycleSupport(this);
protected static ThreadLocal requestThreadLocal = new ThreadLocal();
protected static ThreadLocal responseThreadLocal = new ThreadLocal();
public ClusteredSessionValve(SnapshotManager snapshot)
{
super();
this.snapshot = snapshot;
}
public String getInfo()
{
return info;
}
public void invoke(Request request, Response response) throws IOException, ServletException
{
requestThreadLocal.set(request);
responseThreadLocal.set(response);
getNext().invoke(request, response);
HttpSession session = request.getSession(false);
if (session != null && session.getId() != null)
{
snapshot.snapshot(session.getId());
}
requestThreadLocal.set(null);
responseThreadLocal.set(null);
}
public void addLifecycleListener(LifecycleListener listener)
{
support.addLifecycleListener(listener);
}
public void removeLifecycleListener(LifecycleListener listener)
{
support.removeLifecycleListener(listener);
}
public LifecycleListener[] findLifecycleListeners()
{
return support.findLifecycleListeners();
}
public void start() throws LifecycleException
{
snapshot.start();
support.fireLifecycleEvent(START_EVENT, this);
}
public void stop() throws LifecycleException
{
support.fireLifecycleEvent(STOP_EVENT, this);
snapshot.stop();
}
}