JAVA Session管理
来源:互联网 发布:淘宝怎么找小二介入 编辑:程序博客网 时间:2024/06/16 10:41
public interface ICallback
{
/**
* 捕获异常
* @param session Session
*/
public void handleTimeout(Session session);
}
public class Session
{
private final String id;
private final int sessionTimeout;
private ICallback callback;
public Object obj1;
/**
* Session构造函数
* @param id String
*/
public Session(final String id, final int sessionTimeout)
{
this.id = id;
this.sessionTimeout = sessionTimeout;
}
public ICallback getCallback()
{
return callback;
}
/**
* setCallback
* @param callback ICallback
*/
public void setCallback(ICallback callback)
{
this.callback = callback;
if (this.callback != null)
{
SessionManager.getInstance().addCallbackToSession(this, callback);
}
}
public String getId()
{
return id;
}
public int getSessionTimeout()
{
return sessionTimeout;
}
/**
* 发送消息
* @param message 消息
* @param channel Channel
* @see [类、类#方法、类#成员]
*/
public ChannelFuture sendMessage(AopMessage message, Channel channel)
{
if (channel != null && channel.isOpen())
{
return channel.write(message);
}
return null;
}
/**
* hashCode
* @return int
*/
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
/**
* equals
* @param obj Object
* @return boolean
*/
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
Session other = (Session)obj;
if (id == null)
{
if (other.id != null)
{
return false;
}
}
else if (!id.equals(other.id))
{
return false;
}
return true;
}
}
public class SessionManager
{
private static final IDebugLogger LOG = LogFactory.getDebugLogger(SessionManager.class);
private static SessionManager ins = new SessionManager();
private final Map<String, Session> sessionMap = new ConcurrentHashMap<String, Session>();
private final Map<String, Timeout> timerMap = new ConcurrentHashMap<String, Timeout>();
private final Timer timer = NettyServer.TIMER;
private static int sessionTime;
public void init()
{
UnModifyConfig unModifyConfig = BUS.getBean("unModifyConfig");
sessionTime = unModifyConfig.getPushSessionTimeOut();
}
public static SessionManager getInstance()
{
return ins;
}
/**
* 创建一个Session
* @param id sessionID
* @return Session
* @see [类、类#方法、类#成员]
*/
public Session createSession(String id)
{
LOG.debug("Begin to create session id = {}", id);
final Session s = new Session(id, 0);
sessionMap.put(id, s);
return s;
}
public Session createSession(String id, int sessionTimeout)
{
LOG.debug("Begin to create session id = {}", id);
final Session s = new Session(id, sessionTimeout);
sessionMap.put(id, s);
return s;
}
/**
* addCallbackToSession
* @param s Session
* @param callback ICallback
*/
public void addCallbackToSession(Session s, ICallback callback)
{
if (callback != null && s != null)
{
if (s.getSessionTimeout() != 0)
{
sessionTime = s.getSessionTimeout();
}
Timeout t = timer.newTimeout(new SessionTimeoutHandler(this, callback, s), sessionTime, TimeUnit.SECONDS);
this.timerMap.put(s.getId(), t);
}
}
/**
* 删除一个Session (如果这个Session在创建的时候指定了callback,这里会删除定时器)
* @param id sessionId
* @return 要删除的session
* @see [类、类#方法、类#成员]
*/
public Object removeSession(String id)
{
LOG.debug("Begin to remove session id = {}", id);
final Session s = sessionMap.remove(id);
final Timeout timeout = timerMap.remove(id);
if (null != timeout)
{
timeout.cancel();
}
if (s != null)
{
return s.obj1;
}
else
{
return null;
}
}
public String getStatInfo()
{
return "SessionManager, sessionMap size:" + sessionMap.size() + ", timerMap size:" + timerMap.size();
}
}
- JAVA Session管理
- java Session管理
- java--会话管理(Cookie Session)
- java开发微信session管理
- java--会话管理(Cookie Session)_2
- java的会话管理:Cookie和Session
- Java Web基础知识之Servlet:Session管理
- java的会话管理:Cookie和Session
- java的会话管理:Cookie和Session
- Session管理
- Session管理
- session管理
- Session管理
- Session 管理
- Session管理
- session管理
- Session管理
- Session管理
- C语言输出格式(详细)
- 父窗口隐藏、最小化时对子窗口(Parent或者Owner关系)的影响
- 利用 Console 来学习、调试JavaScrip
- Java5 多线程(四)--Semaphore实现信号灯
- Java5 多线程(五)--CyclicBarrier同步的工具类
- JAVA Session管理
- 初识SAP WM(转载自Kanter Wang)
- Linux关机命令详解
- arm2440的启动流程
- ./mysql_install_db: /usr/local/mysql5_1a//bin/my_print_defaults: /lib/ld-linux.so.2: bad ELF interpr
- C++格式化输出(举例)
- 题目1058:反序输出
- ORACLE数据库备份与还原命令
- ACM竞赛C++常用头文件