You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hu...@apache.org on 2017/12/21 14:07:21 UTC

svn commit: r1818927 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/loader/WebappClassLoaderBase.java java/org/apache/catalina/loader/WebappLoader.java java/org/apache/catalina/loader/mbeans-descriptors.xml webapps/docs/changelog.xml

Author: huxing
Date: Thu Dec 21 14:07:20 2017
New Revision: 1818927

URL: http://svn.apache.org/viewvc?rev=1818927&view=rev
Log:
Support configure the interval to keep all jars open if no jar is accessed.

Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1818927&r1=1818926&r2=1818927&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Thu Dec 21 14:07:20 2017
@@ -371,6 +371,10 @@ public abstract class WebappClassLoaderB
      */
     protected long lastJarAccessed = 0L;
 
+    /**
+     * The interval in milliseconds that we can keep jar files open.
+     */
+    protected int jarOpenInterval = 90000;
 
     /**
      * The list of local repositories, in the order they should be searched
@@ -656,6 +660,20 @@ public abstract class WebappClassLoaderB
 
     }
 
+    /**
+     * Set the interval to keep all jar files open
+     * @param jarOpenInterval the interval in milliseconds to keep jar files open
+     */
+    public void setJarOpenInterval(int jarOpenInterval) {
+        this.jarOpenInterval = jarOpenInterval;
+    }
+
+    /**
+     * Return the interval to keep all jar files open if no jar is accessed
+     */
+    public int getJarOpenInterval() {
+        return jarOpenInterval;
+    }
 
     /**
      * @return Returns the antiJARLocking.
@@ -987,6 +1005,7 @@ public abstract class WebappClassLoaderB
         base.contextName = this.contextName;
         base.hasExternalRepositories = this.hasExternalRepositories;
         base.searchExternalFirst = this.searchExternalFirst;
+        base.jarOpenInterval = this.jarOpenInterval;
     }
 
 
@@ -2174,10 +2193,10 @@ public abstract class WebappClassLoaderB
      * JAR resources.
      */
     public void closeJARs(boolean force) {
-        if (jarFiles.length > 0) {
+        if (jarFiles.length > 0 && (force || jarOpenInterval > 0)) {
                 synchronized (jarFiles) {
-                    if (force || (System.currentTimeMillis()
-                                  > (lastJarAccessed + 90000))) {
+                    if (force || (jarOpenInterval > 0 && System.currentTimeMillis()
+                            > (lastJarAccessed + jarOpenInterval))) {
                         for (int i = 0; i < jarFiles.length; i++) {
                             try {
                                 if (jarFiles[i] != null) {

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1818927&r1=1818926&r2=1818927&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java Thu Dec 21 14:07:20 2017
@@ -137,6 +137,10 @@ public class WebappLoader extends Lifecy
      */
     private boolean delegate = false;
 
+    /**
+     * The interval in milliseconds to keep all jar files open if no jar is accessed
+     */
+    private int jarOpenInterval = 90000;
 
     /**
      * The descriptive information about this Loader implementation.
@@ -282,6 +286,21 @@ public class WebappLoader extends Lifecy
 
     }
 
+    /**
+     * The interval to keep all jar files open if no jar is accessed
+     *
+     * @param jarOpenInterval The new interval
+     */
+    public void setJarOpenInterval(int jarOpenInterval) {
+        this.jarOpenInterval = jarOpenInterval;
+    }
+
+    /**
+     * Return the interval to keep all jar files open if no jar is accessed
+     */
+    public int getJarOpenInterval() {
+        return jarOpenInterval;
+    }
 
     /**
      * Return descriptive information about this Loader implementation and
@@ -580,6 +599,7 @@ public class WebappLoader extends Lifecy
         try {
 
             classLoader = createClassLoader();
+            classLoader.setJarOpenInterval(this.jarOpenInterval);
             classLoader.setResources(container.getResources());
             classLoader.setDelegate(this.delegate);
             classLoader.setSearchExternalFirst(searchExternalFirst);

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml?rev=1818927&r1=1818926&r2=1818927&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml Thu Dec 21 14:07:20 2017
@@ -169,6 +169,10 @@
              writeable="false" 
                  type="java.lang.String"/>
 
+    <attribute   name="jarOpenInterval"
+                 description="The interval in milliseconds to keep all jar files open if no jar is accessed"
+                 type="int"/>
+
   </mbean>
 
   <mbean         name="ParallelWebappClassLoader"
@@ -213,6 +217,10 @@
              writeable="false" 
                  type="java.lang.String"/>
 
+    <attribute   name="jarOpenInterval"
+                 description="The interval in milliseconds to keep all jar files open if no jar is accessed"
+                 type="int"/>
+
   </mbean>
 
 </mbeans-descriptors>

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1818927&r1=1818926&r2=1818927&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Dec 21 14:07:20 2017
@@ -71,6 +71,11 @@
         running under a <code>SecurityManager</code> is an asynchronous Servlet.
         (markt)
       </fix>
+      <add>
+        <bug>61810</bug>: Support configure the interval to keep all jars open
+        if no jar is accessed, a non-positive interval indicates
+        keeping jars always open. (huxing)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Web applications">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org