Fix ManagerServlet.exipreSession throws Exceptions as iterate longer session lists...
authorpero <pero@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Jan 2008 21:34:33 +0000 (21:34 +0000)
committerpero <pero@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Jan 2008 21:34:33 +0000 (21:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@612988 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/manager/LocalStrings.properties
java/org/apache/catalina/manager/ManagerServlet.java
webapps/docs/changelog.xml

index d643e0e..85594f9 100644 (file)
@@ -73,6 +73,7 @@ managerServlet.noContext=FAIL - No context exists for path {0}
 managerServlet.noDirectory=FAIL - Non-directory document base for path {0}
 managerServlet.noDocBase=FAIL - Cannot undeploy document base for path {0}
 managerServlet.noGlobal=FAIL - No global JNDI resources are available
+managerServlet.noManager=FAIL - No manager exists for path {0}
 managerServlet.noReload=FAIL - Reload not supported on WAR deployed at path {0}
 managerServlet.noRename=FAIL - Cannot deploy uploaded WAR for path {0}
 managerServlet.noRole=FAIL - User does not possess role {0}
index 86c9767..0d2c403 100644 (file)
@@ -47,6 +47,7 @@ import org.apache.catalina.Engine;
 import org.apache.catalina.Globals;
 import org.apache.catalina.Host;
 import org.apache.catalina.Lifecycle;
+import org.apache.catalina.Manager;
 import org.apache.catalina.Role;
 import org.apache.catalina.Server;
 import org.apache.catalina.ServerFactory;
@@ -1115,8 +1116,14 @@ public class ManagerServlet
                                             RequestUtil.filter(displayPath)));
                 return;
             }
+            Manager manager = context.getManager() ;
+            if(manager == null) {
+                writer.println(sm.getString("managerServlet.noManager",
+                        RequestUtil.filter(displayPath)));
+                return;               
+            }
             int maxCount = 60;
-            int maxInactiveInterval = context.getManager().getMaxInactiveInterval()/60;
+            int maxInactiveInterval = manager.getMaxInactiveInterval()/60;
             int histoInterval = maxInactiveInterval / maxCount;
             if ( histoInterval * maxCount < maxInactiveInterval ) 
                 histoInterval++;
@@ -1127,13 +1134,13 @@ public class ManagerServlet
             writer.println(sm.getString("managerServlet.sessions", displayPath));
             writer.println(sm.getString("managerServlet.sessiondefaultmax",
                                 "" + maxInactiveInterval));
-            Session [] sessions = context.getManager().findSessions();
+            Session [] sessions = manager.findSessions();
             int [] timeout = new int[maxCount];
             int notimeout = 0;
             int expired = 0;
             long now = System.currentTimeMillis();
             for (int i = 0; i < sessions.length; i++) {
-                int time = (int)((now-sessions[i].getLastAccessedTime())/1000);
+                int time = (int)((now-sessions[i].getLastAccessedTimeInternal())/1000);
                 if (idle >= 0 && time >= idle*60) {
                     sessions[i].expire();
                     idle++;
index e3384c3..05833fb 100644 (file)
@@ -46,6 +46,9 @@
   </subsection>
   <subsection name="Catalina">
     <changelog>
+      <fix>
+        Fix ManagerServlet.exipreSession throws Exceptions as iterate longer session lists at production servers (pero)
+      </fix>
       <add>
         Add ManagerBase session getLastAccessedTimestamp and getCreationTimestamp for better
         remote JMX access. (pero)