OSDN Git Service

0e7a26c355d8722cb04ab67772b0b8f6c464926b
[luz/luz.git] / src / com / lavans / luz2 / http / session / SessionServiceLocal.java
1 /* $Id: SessionServiceLocal.java 94 2008-12-18 11:07:17Z dobashi $\r
2  * 作成日: 2006/01/20 14:29:33\r
3  *\r
4  */\r
5 package com.lavans.luz2.http.session;\r
6 \r
7 import java.util.Collections;\r
8 import java.util.Enumeration;\r
9 import java.util.HashMap;\r
10 import java.util.Map;\r
11 \r
12 import javax.servlet.http.HttpSession;\r
13 \r
14 import org.apache.commons.logging.Log;\r
15 import org.apache.commons.logging.LogFactory;\r
16 \r
17 /**\r
18  * SessionServiceApクラス。\r
19  *\r
20  * This is generated by lamen.\r
21  */\r
22 public class SessionServiceLocal{\r
23         /** ロガー。debug用 */\r
24         private static Log logger = LogFactory.getLog(SessionServiceLocal.class.getName());\r
25 \r
26         /** singleton実体 */\r
27         private static SessionServiceLocal instance = null;\r
28 \r
29         /** セッションを格納するMap */\r
30         private Map<String, HttpSession> sessionMap = Collections.synchronizedMap(new HashMap<String, HttpSession>());\r
31 \r
32         /**\r
33          * コンストラクタ。\r
34          * Singletonのため呼び出し不可。\r
35          */\r
36         protected SessionServiceLocal(){\r
37 \r
38         }\r
39 \r
40         /**\r
41          * インスタンス取得メソッド。\r
42          * @return\r
43          */\r
44         public static SessionServiceLocal getInstance(){\r
45                 if(instance==null){\r
46                         instance = new SessionServiceLocal();\r
47                 }\r
48                 return instance;\r
49         }\r
50 \r
51         /**\r
52          * getSession\r
53          * リモートからの取得用。\r
54          * 要求されたsessionIdが存在しないならnullを返す。\r
55          */\r
56         @SuppressWarnings("unchecked")\r
57         public Map<String, Object> getRemoteSessionAttribute(String sessionId){\r
58                 logger.debug("SessionServiceLocal#getRemoteSessionAttribute("+ sessionId +")");\r
59                 HttpSession session = sessionMap.remove(sessionId);\r
60                 // 要求されたsessionIdが存在しないならnullを返す。\r
61                 if(session == null){\r
62                         //logger.log("is not exist:"+ sessionId);\r
63                         return null;\r
64                 }\r
65 \r
66                 try{\r
67                         Enumeration<String> attrNames = session.getAttributeNames();\r
68                         // 属性の取得\r
69                         Map<String, Object> attr = Collections.synchronizedMap(new HashMap<String, Object>());\r
70                         while(attrNames.hasMoreElements()){\r
71                                 String attrName = attrNames.nextElement();\r
72                                 attr.put(attrName, session.getAttribute(attrName));\r
73                         }\r
74                         return attr;\r
75                 }catch (Exception e) {\r
76                         // sessionが無効な場合はgetAttributeNames()に失敗する。\r
77                         return null;\r
78                 }\r
79 \r
80         }\r
81 \r
82         /**\r
83          * セッションをこのサービスに登録する。\r
84          * @param session\r
85          */\r
86         public void setSession(HttpSession session){\r
87                 logger.debug("set session:"+ session.getId());\r
88                 sessionMap.put(session.getId(), session);\r
89         }\r
90 \r
91         /**\r
92          *\r
93          * @param session\r
94          * @return\r
95          */\r
96         public boolean exists(String  sessionId){\r
97                 return sessionMap.containsKey(sessionId);\r
98         }\r
99 \r
100         /**\r
101          * invalidate\r
102          */\r
103         public Boolean invalidate(String sessionId){\r
104                 HttpSession session = sessionMap.get(sessionId);\r
105                 if(session==null){\r
106 //                      logger.log(logLevel,"invalid sessionId invalidate():"+ sessionId);\r
107                         return Boolean.FALSE;\r
108                 }\r
109                 session.invalidate();\r
110                 logger.debug("remove:"+ sessionId);\r
111                 sessionMap.remove(sessionId);\r
112                 return Boolean.TRUE;\r
113         }\r
114 \r
115 }\r
116 \r