/**
*
*/
package eu.scape_project.planning.application;
import java.util.Enumeration;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.jboss.weld.context.api.ContextualInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.scape_project.planning.manager.PlanManager;
/**
* Listener to clean up session when timed out.
*
* @author Michael Kraxner
*
*/
public class SessionTimeoutListener implements HttpSessionListener {
private static final Logger LOGGER = LoggerFactory.getLogger(SessionTimeoutListener.class);
/* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
*/
@Override
public void sessionCreated(HttpSessionEvent event) {
LOGGER.info("created session {}", event.getSession().getId());
}
/**
* Is called before the session is destroyed.
*
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
*/
@SuppressWarnings("rawtypes")
@Override
public void sessionDestroyed(HttpSessionEvent event) {
LOGGER.info("ending session {}", event.getSession().getId());
Enumeration<String> names = event.getSession().getAttributeNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
Object attribute = event.getSession().getAttribute(name);
if (attribute instanceof ContextualInstance) {
ContextualInstance s = (ContextualInstance)attribute;
if (s.getInstance() instanceof PlanManager){
// unlock all plans opened and locked in this session
PlanManager planManager = (PlanManager) s.getInstance();
planManager.unlockSessionPlans();
}
}
}
}
}