package org.exist.soap; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import org.exist.security.User; public class SessionManager { private static long TIMEOUT = 3600000; private static SessionManager instance = null; public static final SessionManager getInstance() { if (instance == null) instance = new SessionManager(); return instance; } public static long getTimeout() { return TIMEOUT; } public static void setTimeout(long timeout) { TIMEOUT = timeout; } Map sessions = new TreeMap(); public synchronized String createSession(User user) { Session session = new Session(user); String id = String.valueOf(session.hashCode()); sessions.put(id, session); return id; } public synchronized Session getSession(String id) { if(id == null) return null; Session session = (Session)sessions.get(id); if(session != null) session.updateLastAccessTime(); return session; } public synchronized void disconnect(String id) { sessions.remove(id); } private void checkResultSets() { for (Iterator i = sessions.values().iterator(); i.hasNext();) { Session session = (Session)i.next(); if(System.currentTimeMillis() - session.getLastAccessTime() > TIMEOUT) i.remove(); } } }