import java.util.Hashtable;\r
import java.util.Iterator;\r
import java.util.Map;\r
+import java.util.concurrent.atomic.AtomicInteger;\r
\r
import javax.servlet.ServletContext;\r
import javax.servlet.http.HttpSession;\r
implements HttpSession, Session, Serializable {\r
\r
\r
+ protected static final boolean ACTIVITY_CHECK = \r
+ Boolean.valueOf(System.getProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK", "false")).booleanValue();\r
+\r
+\r
// ----------------------------------------------------------- Constructors\r
\r
\r
/**\r
* The access count for this session.\r
*/\r
- protected transient int accessCount = 0;\r
-\r
+ protected transient AtomicInteger accessCount = null;\r
\r
+ \r
// ----------------------------------------------------- Session Properties\r
\r
\r
return false;\r
}\r
\r
- if (accessCount > 0) {\r
+ if (ACTIVITY_CHECK && accessCount.get() > 0) {\r
return true;\r
}\r
\r
\r
this.lastAccessedTime = this.thisAccessedTime;\r
this.thisAccessedTime = System.currentTimeMillis();\r
- accessCount++;\r
+ \r
+ if (ACTIVITY_CHECK) {\r
+ accessCount.incrementAndGet();\r
+ }\r
\r
}\r
\r
public void endAccess() {\r
\r
isNew = false;\r
- accessCount--;\r
+\r
+ if (ACTIVITY_CHECK) {\r
+ accessCount.decrementAndGet();\r
+ }\r
\r
}\r
\r
}\r
}\r
}\r
- accessCount = 0;\r
+ accessCount = null;\r
setValid(false);\r
\r
/*\r
*/\r
public void activate() {\r
\r
+ // Initialize access count\r
+ if (ACTIVITY_CHECK) {\r
+ accessCount = new AtomicInteger();\r
+ }\r
+ \r
// Notify interested session event listeners\r
fireSessionEvent(Session.SESSION_ACTIVATED_EVENT, null);\r
\r
id = null;\r
lastAccessedTime = 0L;\r
maxInactiveInterval = -1;\r
- accessCount = 0;\r
+ accessCount = null;\r
notes.clear();\r
setPrincipal(null);\r
isNew = false;\r