You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2016/01/08 12:25:40 UTC
svn commit: r1723695 -
/turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java
Author: tv
Date: Fri Jan 8 11:25:40 2016
New Revision: 1723695
URL: http://svn.apache.org/viewvc?rev=1723695&view=rev
Log:
Replace Hashtable with ConcurrentMap
Modified:
turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java
Modified: turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java?rev=1723695&r1=1723694&r2=1723695&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/services/session/TurbineSessionService.java Fri Jan 8 11:25:40 2016
@@ -23,9 +23,9 @@ package org.apache.turbine.services.sess
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
import javax.servlet.http.HttpSession;
import org.apache.turbine.om.security.User;
@@ -36,7 +36,7 @@ import org.apache.turbine.services.Turbi
* sessions of the current context. The session objects that are
* cached by this service are obtained through a listener, which must
* be configured via your web application's <code>web.xml</code>
- * deployement descriptor as follows:
+ * deployment descriptor as follows:
*
* <blockquote><code><pre>
* <listener>
@@ -58,21 +58,17 @@ public class TurbineSessionService
implements SessionService
{
/** Map of active sessions */
- private Map<String, HttpSession> activeSessions;
+ private ConcurrentMap<String, HttpSession> activeSessions;
/**
* Gets a list of the active sessions.
*
* @return A copy of the list of <code>HttpSession</code> objects.
*/
+ @Override
public Collection<HttpSession> getActiveSessions()
{
- // Sync externally to allow ArrayList's ctor to iterate
- // activeSessions' values in a thread-safe fashion.
- synchronized (activeSessions)
- {
- return new ArrayList<HttpSession>(activeSessions.values());
- }
+ return new ArrayList<HttpSession>(activeSessions.values());
}
/**
@@ -81,6 +77,7 @@ public class TurbineSessionService
*
* @param session Session to add
*/
+ @Override
public void addSession(HttpSession session)
{
activeSessions.put(session.getId(), session);
@@ -92,6 +89,7 @@ public class TurbineSessionService
*
* @param session Session to remove
*/
+ @Override
public void removeSession(HttpSession session)
{
activeSessions.remove(session.getId());
@@ -108,6 +106,7 @@ public class TurbineSessionService
* @return true if the user is logged in on one of the
* active sessions.
*/
+ @Override
public boolean isUserLoggedIn(User user)
{
return getActiveUsers().contains(user);
@@ -120,21 +119,19 @@ public class TurbineSessionService
*
* @return A set of {@link org.apache.turbine.om.security.User} objects.
*/
+ @Override
public Collection<User> getActiveUsers()
{
Collection<User> users;
- synchronized (activeSessions)
+ // Pre-allocate a list which won't need expansion more
+ // than once.
+ users = new ArrayList<User>((int) (activeSessions.size() * 0.7));
+ for (HttpSession session : activeSessions.values())
{
- // Pre-allocate a list which won't need expansion more
- // than once.
- users = new ArrayList<User>((int) (activeSessions.size() * 0.7));
- for (Iterator<HttpSession> i = activeSessions.values().iterator(); i.hasNext();)
+ User u = getUserFromSession(session);
+ if (u != null && u.hasLoggedIn())
{
- User u = getUserFromSession(i.next());
- if (u != null && u.hasLoggedIn())
- {
- users.add(u);
- }
+ users.add(u);
}
}
@@ -147,6 +144,7 @@ public class TurbineSessionService
* @param session The session from which to extract a user.
* @return The Turbine User object.
*/
+ @Override
public User getUserFromSession(HttpSession session)
{
// Not sure of other containers, but Tomcat 5.0.28 sometimes returns
@@ -168,6 +166,7 @@ public class TurbineSessionService
* @param sessionId The unique session identifier.
* @return The session keyed by the specified identifier.
*/
+ @Override
public HttpSession getSession(String sessionId)
{
return this.activeSessions.get(sessionId);
@@ -180,19 +179,16 @@ public class TurbineSessionService
* @param user the user
* @return Collection of HtttSession objects
*/
+ @Override
public Collection<HttpSession> getSessionsForUser(User user)
{
Collection<HttpSession> sessions = new ArrayList<HttpSession>();
- synchronized (activeSessions)
+ for (HttpSession session : activeSessions.values())
{
- for (Iterator<HttpSession> i = activeSessions.values().iterator(); i.hasNext();)
+ User u = this.getUserFromSession(session);
+ if (user.equals(u))
{
- HttpSession session = i.next();
- User u = this.getUserFromSession(session);
- if (user.equals(u))
- {
- sessions.add(session);
- }
+ sessions.add(session);
}
}
@@ -200,7 +196,7 @@ public class TurbineSessionService
}
- // ---- Service initilization ------------------------------------------
+ // ---- Service initialization ------------------------------------------
/**
* Initializes the service
@@ -208,7 +204,7 @@ public class TurbineSessionService
@Override
public void init()
{
- this.activeSessions = new Hashtable<String, HttpSession>();
+ this.activeSessions = new ConcurrentHashMap<String, HttpSession>();
setInit(true);
}