X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcom%2Flavans%2Fluz2%2Fhttp%2Fsession%2FSessionServiceLocal.java;fp=src%2Fcom%2Flavans%2Fluz2%2Fhttp%2Fsession%2FSessionServiceLocal.java;h=0e7a26c355d8722cb04ab67772b0b8f6c464926b;hb=5e18b32db954186a828104701d95727a951227a1;hp=0000000000000000000000000000000000000000;hpb=e413409174833100e209c84a01fb77d0c0e16431;p=luz%2Fluz.git diff --git a/src/com/lavans/luz2/http/session/SessionServiceLocal.java b/src/com/lavans/luz2/http/session/SessionServiceLocal.java new file mode 100644 index 0000000..0e7a26c --- /dev/null +++ b/src/com/lavans/luz2/http/session/SessionServiceLocal.java @@ -0,0 +1,116 @@ +/* $Id: SessionServiceLocal.java 94 2008-12-18 11:07:17Z dobashi $ + * 作成日: 2006/01/20 14:29:33 + * + */ +package com.lavans.luz2.http.session; + +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * SessionServiceApクラス。 + * + * This is generated by lamen. + */ +public class SessionServiceLocal{ + /** ロガー。debug用 */ + private static Log logger = LogFactory.getLog(SessionServiceLocal.class.getName()); + + /** singleton実体 */ + private static SessionServiceLocal instance = null; + + /** セッションを格納するMap */ + private Map sessionMap = Collections.synchronizedMap(new HashMap()); + + /** + * コンストラクタ。 + * Singletonのため呼び出し不可。 + */ + protected SessionServiceLocal(){ + + } + + /** + * インスタンス取得メソッド。 + * @return + */ + public static SessionServiceLocal getInstance(){ + if(instance==null){ + instance = new SessionServiceLocal(); + } + return instance; + } + + /** + * getSession + * リモートからの取得用。 + * 要求されたsessionIdが存在しないならnullを返す。 + */ + @SuppressWarnings("unchecked") + public Map getRemoteSessionAttribute(String sessionId){ + logger.debug("SessionServiceLocal#getRemoteSessionAttribute("+ sessionId +")"); + HttpSession session = sessionMap.remove(sessionId); + // 要求されたsessionIdが存在しないならnullを返す。 + if(session == null){ + //logger.log("is not exist:"+ sessionId); + return null; + } + + try{ + Enumeration attrNames = session.getAttributeNames(); + // 属性の取得 + Map attr = Collections.synchronizedMap(new HashMap()); + while(attrNames.hasMoreElements()){ + String attrName = attrNames.nextElement(); + attr.put(attrName, session.getAttribute(attrName)); + } + return attr; + }catch (Exception e) { + // sessionが無効な場合はgetAttributeNames()に失敗する。 + return null; + } + + } + + /** + * セッションをこのサービスに登録する。 + * @param session + */ + public void setSession(HttpSession session){ + logger.debug("set session:"+ session.getId()); + sessionMap.put(session.getId(), session); + } + + /** + * + * @param session + * @return + */ + public boolean exists(String sessionId){ + return sessionMap.containsKey(sessionId); + } + + /** + * invalidate + */ + public Boolean invalidate(String sessionId){ + HttpSession session = sessionMap.get(sessionId); + if(session==null){ +// logger.log(logLevel,"invalid sessionId invalidate():"+ sessionId); + return Boolean.FALSE; + } + session.invalidate(); + logger.debug("remove:"+ sessionId); + sessionMap.remove(sessionId); + return Boolean.TRUE; + } + +} +