Author: remm Date: Tue Jul 25 07:19:32 2006 New Revision: 425399 URL: http://svn.apache.org/viewvc?rev=425399&view=rev Log: - Experiment with using concurrent maps in places which may be concurrently accessed.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/ManagerBase.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardManager.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=425399&r1=425398&r2=425399&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java Tue Jul 25 07:19:32 2006 @@ -1,5 +1,5 @@ /* - * Copyright 1999,2004 The Apache Software Foundation. + * Copyright 1999,2004-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,9 +24,10 @@ import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; -import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import javax.naming.Binding; import javax.naming.NamingException; @@ -87,13 +88,13 @@ /** * The context attributes for this context. */ - private HashMap attributes = new HashMap(); + private Map attributes = new ConcurrentHashMap(); /** * List of read only attributes for this context. */ - private HashMap readOnlyAttributes = new HashMap(); + private Map readOnlyAttributes = new ConcurrentHashMap(); /** @@ -118,7 +119,7 @@ /** * The merged context initialization parameters for this Context. */ - private HashMap parameters = null; + private Map parameters = null; /** @@ -172,9 +173,7 @@ */ public Object getAttribute(String name) { - synchronized (attributes) { - return (attributes.get(name)); - } + return (attributes.get(name)); } @@ -185,9 +184,7 @@ */ public Enumeration getAttributeNames() { - synchronized (attributes) { - return new Enumerator(attributes.keySet(), true); - } + return new Enumerator(attributes.keySet(), true); } @@ -258,9 +255,8 @@ public String getInitParameter(final String name) { mergeParameters(); - synchronized (parameters) { - return ((String) parameters.get(name)); - } + return ((String) parameters.get(name)); + } @@ -271,9 +267,7 @@ public Enumeration getInitParameterNames() { mergeParameters(); - synchronized (parameters) { - return (new Enumerator(parameters.keySet())); - } + return (new Enumerator(parameters.keySet())); } @@ -688,17 +682,15 @@ boolean found = false; // Remove the specified attribute - synchronized (attributes) { - // Check for read only attribute - if (readOnlyAttributes.containsKey(name)) - return; - found = attributes.containsKey(name); - if (found) { - value = attributes.get(name); - attributes.remove(name); - } else { - return; - } + // Check for read only attribute + if (readOnlyAttributes.containsKey(name)) + return; + found = attributes.containsKey(name); + if (found) { + value = attributes.get(name); + attributes.remove(name); + } else { + return; } // Notify interested application event listeners @@ -754,15 +746,13 @@ boolean replaced = false; // Add or replace the specified attribute - synchronized (attributes) { - // Check for read only attribute - if (readOnlyAttributes.containsKey(name)) - return; - oldValue = attributes.get(name); - if (oldValue != null) - replaced = true; - attributes.put(name, value); - } + // Check for read only attribute + if (readOnlyAttributes.containsKey(name)) + return; + oldValue = attributes.get(name); + if (oldValue != null) + replaced = true; + attributes.put(name, value); // Notify interested application event listeners Object listeners[] = context.getApplicationEventListeners(); @@ -822,11 +812,9 @@ // Create list of attributes to be removed ArrayList list = new ArrayList(); - synchronized (attributes) { - Iterator iter = attributes.keySet().iterator(); - while (iter.hasNext()) { - list.add(iter.next()); - } + Iterator iter = attributes.keySet().iterator(); + while (iter.hasNext()) { + list.add(iter.next()); } // Remove application originated attributes @@ -855,10 +843,8 @@ */ void setAttributeReadOnly(String name) { - synchronized (attributes) { - if (attributes.containsKey(name)) - readOnlyAttributes.put(name, name); - } + if (attributes.containsKey(name)) + readOnlyAttributes.put(name, name); } @@ -915,7 +901,7 @@ if (parameters != null) return; - HashMap results = new HashMap(); + Map results = new ConcurrentHashMap(); String names[] = context.findParameters(); for (int i = 0; i < names.length; i++) results.put(names[i], context.findParameter(names[i])); Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/ManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=425399&r1=425398&r2=425399&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/ManagerBase.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/ManagerBase.java Tue Jul 25 07:19:32 2006 @@ -1,5 +1,5 @@ /* - * Copyright 1999,2004 The Apache Software Foundation. + * Copyright 1999,2004-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,9 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; import javax.management.MBeanRegistration; import javax.management.MBeanServer; @@ -171,7 +173,7 @@ * The set of currently active Sessions for this Manager, keyed by * session identifier. */ - protected HashMap sessions = new HashMap(); + protected Map sessions = new ConcurrentHashMap(); // Number of sessions created by this manager protected int sessionCounter=0; @@ -731,11 +733,10 @@ */ public void add(Session session) { - synchronized (sessions) { - sessions.put(session.getIdInternal(), session); - if( sessions.size() > maxActive ) { - maxActive=sessions.size(); - } + sessions.put(session.getIdInternal(), session); + int size = sessions.size(); + if( size > maxActive ) { + maxActive = size; } } @@ -854,10 +855,7 @@ if (id == null) return (null); - synchronized (sessions) { - Session session = (Session) sessions.get(id); - return (session); - } + return (Session) sessions.get(id); } @@ -885,9 +883,7 @@ */ public void remove(Session session) { - synchronized (sessions) { - sessions.remove(session.getIdInternal()); - } + sessions.remove(session.getIdInternal()); } @@ -1134,8 +1130,8 @@ */ public String listSessionIds() { StringBuffer sb=new StringBuffer(); - Iterator keys=sessions.keySet().iterator(); - while( keys.hasNext() ) { + Iterator keys = sessions.keySet().iterator(); + while (keys.hasNext()) { sb.append(keys.next()).append(" "); } return sb.toString(); @@ -1150,7 +1146,7 @@ * @return The attribute value, if found, null otherwise */ public String getSessionAttribute( String sessionId, String key ) { - Session s=(Session)sessions.get(sessionId); + Session s = (Session) sessions.get(sessionId); if( s==null ) { if(log.isInfoEnabled()) log.info("Session not found " + sessionId); Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardManager.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardManager.java?rev=425399&r1=425398&r2=425399&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardManager.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardManager.java Tue Jul 25 07:19:32 2006 @@ -1,5 +1,5 @@ /* - * Copyright 1999,2004 The Apache Software Foundation. + * Copyright 1999,2004-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java?rev=425399&r1=425398&r2=425399&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java Tue Jul 25 07:19:32 2006 @@ -1,5 +1,5 @@ /* - * Copyright 1999,2004 The Apache Software Foundation. + * Copyright 1999,2004-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import javax.servlet.ServletContext; @@ -122,7 +123,7 @@ /** * The collection of user data attributes associated with this Session. */ - protected Map attributes = new Hashtable(); + protected Map attributes = new ConcurrentHashMap(); /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]