remm 2003/12/10 15:00:36 Modified: catalina/src/share/org/apache/catalina/session PersistentManagerBase.java StandardManager.java mbeans-descriptors.xml Log: - Cleanups in the managers. (but I didn't test it) - Thanks to Amy for looking in PersistentManager. - Add JMX declaration for PersistentManager. Was it really not there ? - Copy over the useful stats from StandardManager. Revision Changes Path 1.14 +90 -31 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java Index: PersistentManagerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- PersistentManagerBase.java 14 Nov 2003 10:30:29 -0000 1.13 +++ PersistentManagerBase.java 10 Dec 2003 23:00:36 -0000 1.14 @@ -103,7 +103,8 @@ private static Log log = LogFactory.getLog(PersistentManagerBase.class); // ---------------------------------------------------- Security Classes - private class PrivilegedStoreClear + + private class PrivilegedStoreClear implements PrivilegedExceptionAction { PrivilegedStoreClear() { @@ -115,7 +116,7 @@ } } - private class PrivilegedStoreRemove + private class PrivilegedStoreRemove implements PrivilegedExceptionAction { private String id; @@ -168,7 +169,8 @@ public Object run() throws Exception{ return store.keys(); } - } + } + // ----------------------------------------------------- Instance Variables @@ -187,39 +189,39 @@ /** * The maximum number of active Sessions allowed, or -1 for no limit. */ - private int maxActiveSessions = -1; + protected int maxActiveSessions = -1; /** * The descriptive name of this Manager implementation (for logging). */ - protected static String name = "PersistentManagerBase"; + private static String name = "PersistentManagerBase"; /** * Has this component been started yet? */ - private boolean started = false; + protected boolean started = false; /** * Store object which will manage the Session store. */ - private Store store = null; + protected Store store = null; /** * Whether to save and reload sessions when the Manager <code>unload</code> * and <code>load</code> methods are called. */ - private boolean saveOnRestart = true; + protected boolean saveOnRestart = true; /** * How long a session must be idle before it should be backed up. * -1 means sessions won't be backed up. */ - private int maxIdleBackup = -1; + protected int maxIdleBackup = -1; /** @@ -227,30 +229,57 @@ * This overrides maxActiveSessions, to prevent thrashing if there are lots * of active sessions. Setting to -1 means it's ignored. */ - private int minIdleSwap = -1; + protected int minIdleSwap = -1; /** * The maximum time a session may be idle before it should be swapped * to file just on general principle. Setting this to -1 means sessions * should not be forced out. */ - private int maxIdleSwap = -1; + protected int maxIdleSwap = -1; + + + /** + * Number of session creations that failed due to maxActiveSessions. + */ + protected int rejectedSessions = 0; + + + /** + * Number of sessions that expired. + */ + protected int expiredSessions = 0; + + + /** + * Processing time during session expiration and passivation. + */ + protected long processingTime = 0; // ------------------------------------------------------------- Properties -/** + + /** * Perform the background processes for this Manager */ public void backgroundProcess() { + + long timeNow = System.currentTimeMillis(); + this.processExpires(); this.processPersistenceChecks(); if ((this.getStore() != null) && (this.getStore() instanceof StoreBase)) { ((StoreBase) this.getStore()).processExpires(); } + + long timeEnd = System.currentTimeMillis(); + processingTime += ( timeEnd - timeNow ); + } + /** * Indicates how many seconds old a session can get, after its last * use in a request, before it should be backed up to the store. -1 @@ -440,6 +469,42 @@ } + /** + * Number of session creations that failed due to maxActiveSessions. + * + * @return + */ + public int getRejectedSessions() { + return rejectedSessions; + } + + + + public void setRejectedSessions(int rejectedSessions) { + this.rejectedSessions = rejectedSessions; + } + + /** Number of sessions that expired. + * + * @return + */ + public int getExpiredSessions() { + return expiredSessions; + } + + public void setExpiredSessions(int expiredSessions) { + this.expiredSessions = expiredSessions; + } + + public long getProcessingTime() { + return processingTime; + } + + public void setProcessingTime(long processingTime) { + this.processingTime = processingTime; + } + + /** * Return the descriptive short name of this Manager implementation. */ @@ -565,20 +630,12 @@ */ public void processExpires() { - if (!started) - return; - - long timeNow = System.currentTimeMillis(); Session sessions[] = findSessions(); for (int i = 0; i < sessions.length; i++) { StandardSession session = (StandardSession) sessions[i]; if (!session.isValid()) { - try { - session.expire(); - } catch (Throwable t) { - ; - } + expiredSessions++; } } @@ -592,9 +649,9 @@ */ public void processPersistenceChecks() { - processMaxIdleSwaps(); - processMaxActiveSwaps(); - processMaxIdleBackups(); + processMaxIdleSwaps(); + processMaxActiveSwaps(); + processMaxIdleBackups(); } @@ -611,9 +668,11 @@ public Session createSession() { if ((maxActiveSessions >= 0) && - (sessions.size() >= maxActiveSessions)) + (sessions.size() >= maxActiveSessions)) { + rejectedSessions++; throw new IllegalStateException (sm.getString("standardManager.createSession.ise")); + } return (super.createSession()); @@ -730,7 +789,7 @@ * * @param is Session's id to be removed */ - private void removeSession(String id){ + protected void removeSession(String id){ try { if (System.getSecurityManager() != null){ try{ @@ -1048,7 +1107,7 @@ } - // -------------------------------------------------------- Private Methods + // ------------------------------------------------------ Protected Methods /** 1.17 +21 -8 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java Index: StandardManager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- StandardManager.java 5 Dec 2003 09:28:55 -0000 1.16 +++ StandardManager.java 10 Dec 2003 23:00:36 -0000 1.17 @@ -183,9 +183,22 @@ protected boolean started = false; - int rejectedSessions=0; - int expiredSessions=0; - long processingTime=0; + /** + * Number of session creations that failed due to maxActiveSessions. + */ + protected int rejectedSessions = 0; + + + /** + * Number of sessions that expired. + */ + protected int expiredSessions = 0; + + + /** + * Processing time during session expiration. + */ + protected long processingTime = 0; // ------------------------------------------------------------- Properties @@ -338,7 +351,7 @@ public Session createSession() { if ((maxActiveSessions >= 0) && - (sessions.size() >= maxActiveSessions)) { + (sessions.size() >= maxActiveSessions)) { rejectedSessions++; throw new IllegalStateException (sm.getString("standardManager.createSession.ise")); 1.3 +138 -0 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/mbeans-descriptors.xml Index: mbeans-descriptors.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/mbeans-descriptors.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- mbeans-descriptors.xml 27 May 2003 23:15:06 -0000 1.2 +++ mbeans-descriptors.xml 10 Dec 2003 23:00:36 -0000 1.3 @@ -129,4 +129,142 @@ </mbean> + <mbean name="PersistentManager" + description="Persistent Manager" + domain="Catalina" + group="Manager" + type="org.apache.catalina.session.PersistentManager"> + + <attribute name="algorithm" + description="The message digest algorithm to be used when generating + session identifiers" + type="java.lang.String"/> + + <attribute name="randomFile" + description="File source of random - /dev/urandom or a pipe" + type="java.lang.String"/> + + <attribute name="className" + description="Fully qualified class name of the managed object" + type="java.lang.String" + writeable="false"/> + + <attribute name="debug" + description="The debugging detail level for this component" + type="int"/> + + <attribute name="distributable" + description="The distributable flag for Sessions created by this + Manager" + type="boolean"/> + + <attribute name="entropy" + description="A String initialization parameter used to increase the + entropy of the initialization of our random number + generator" + type="java.lang.String"/> + + <attribute name="managedResource" + description="The managed resource this MBean is associated with" + type="java.lang.Object"/> + + <attribute name="maxActiveSessions" + description="The maximum number of active Sessions allowed, or -1 + for no limit" + type="int"/> + + <attribute name="maxInactiveInterval" + description="The default maximum inactive interval for Sessions + created by this Manager" + type="int"/> + + <attribute name="name" + description="The descriptive name of this Manager implementation + (for logging)" + type="java.lang.String" + writeable="false"/> + + <attribute name="pathname" + description="Path name of the disk file in which active sessions" + type="java.lang.String"/> + + <attribute name="activeSessions" + description="Number of active sessions at this moment" + type="int" + writeable="false"/> + + <attribute name="sessionCounter" + description="Total number of sessions created by this manager" + type="int" /> + + <attribute name="maxActive" + description="Maximum number of active sessions so far" + type="int" /> + + <attribute name="maxIdleBackup" + description="How long a session must be idle before it should be backed up" + type="int" /> + + <attribute name="minIdleSwap" + description="Minimum time a session must be idle before it is swapped to disk" + type="int" /> + + <attribute name="maxIdleSwap" + description="The maximum time a session may be idle before it should be swapped to file just on general principle" + type="int" /> + + <attribute name="rejectedSessions" + description="Number of sessions we rejected due to maxActive beeing reached" + type="int" /> + + <attribute name="expiredSessions" + description="Number of sessions that expired ( doesn't include explicit invalidations )" + type="int" /> + + <attribute name="processingTime" + description="Time spent doing housekeeping and expiration" + type="long" /> + + <attribute name="duplicates" + description="Number of duplicated session ids generated" + type="int" /> + + <operation name="listSessionIds" + description="Return the list of active session ids" + impact="ACTION" + returnType="java.lang.String"> + </operation> + + <operation name="getSessionAttribute" + description="Return a session attribute" + impact="ACTION" + returnType="java.lang.String"> + <parameter name="sessionId" + description="Id of the session" + type="java.lang.String"/> + <parameter name="key" + description="key of the attribute" + type="java.lang.String"/> + </operation> + + <operation name="expireSession" + description="Expire a session" + impact="ACTION" + returnType="void"> + <parameter name="sessionId" + description="Id of the session" + type="java.lang.String"/> + </operation> + + <operation name="getLastAccessedTime" + description="Get the last access time" + impact="ACTION" + returnType="java.lang.String"> + <parameter name="sessionId" + description="Id of the session" + type="java.lang.String"/> + </operation> + + </mbean> + </mbeans-descriptors>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]