76 lines
2.1 KiB
Java
76 lines
2.1 KiB
Java
package org.gcube.application.framework.core.session;
|
|
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.Set;
|
|
|
|
|
|
public class SessionManager {
|
|
|
|
protected static Thread thread = new CleanSessionThread();
|
|
protected static SessionManager sessionManager = new SessionManager();
|
|
protected HashMap<String, D4ScienceSession> sessions;
|
|
|
|
protected SessionManager() {
|
|
sessions = new HashMap<String, D4ScienceSession>();
|
|
thread.setDaemon(true);
|
|
thread.start();
|
|
}
|
|
|
|
public static SessionManager getInstance() {
|
|
return sessionManager;
|
|
}
|
|
|
|
public D4ScienceSession getD4ScienceSession(String externalSessionID, String username)
|
|
{
|
|
D4ScienceSession session = sessions.get(externalSessionID + "_" + username);
|
|
if(session == null || !session.isValid() || !session.getUsername().equals(username))
|
|
{
|
|
session = new D4ScienceSession(externalSessionID, username);
|
|
sessions.put(externalSessionID + "_" + username, session);
|
|
}
|
|
return session;
|
|
}
|
|
|
|
@Override
|
|
protected void finalize() throws Throwable {
|
|
thread.interrupt();
|
|
System.out.println(new Date(System.currentTimeMillis()) + " clean thread was interrupted");
|
|
thread.join();
|
|
System.out.println(new Date(System.currentTimeMillis()) + " clean thread was joint");
|
|
super.finalize();
|
|
}
|
|
|
|
|
|
protected static class CleanSessionThread extends Thread
|
|
{
|
|
public void run()
|
|
{
|
|
while(true)
|
|
{
|
|
try {
|
|
Thread.sleep(600000);
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
System.out.println(new Date(System.currentTimeMillis()) + " clean thread was interrupted (in clean thread)");
|
|
break;
|
|
}
|
|
//TODO: cleanup invalid sessions: add locks...
|
|
Set<String> keys = sessionManager.sessions.keySet();
|
|
Iterator<String> iter = keys.iterator();
|
|
while(iter.hasNext())
|
|
{
|
|
String extSessionID = iter.next();
|
|
if(!sessionManager.sessions.get(extSessionID).isValid())
|
|
{
|
|
sessionManager.sessions.remove(extSessionID);
|
|
}
|
|
}
|
|
}
|
|
System.out.println(new Date(System.currentTimeMillis()) + " clean thread was terminated");
|
|
}
|
|
|
|
}
|
|
}
|