Author: markt
Date: Sat Dec 29 11:28:41 2007
New Revision: 607464

URL: http://svn.apache.org/viewvc?rev=607464&view=rev
Log:
Fix bug 43878. When development mode isn't being used, use a single 
JasperLoader. The main benefit is a reduction in the use of perm gen space when 
there are many JSPs all using the same few tags since the tags are loaded once 
rather than once per JSP.

Modified:
    tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java
    tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java

Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java?rev=607464&r1=607463&r2=607464&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java (original)
+++ tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java Sat Dec 29 
11:28:41 2007
@@ -34,7 +34,6 @@
 import org.apache.jasper.compiler.JspUtil;
 import org.apache.jasper.compiler.Localizer;
 import org.apache.jasper.compiler.ServletWriter;
-import org.apache.jasper.servlet.JasperLoader;
 import org.apache.jasper.servlet.JspServletWrapper;
 
 /**
@@ -176,11 +175,7 @@
 
     public ClassLoader getJspLoader() {
         if( jspLoader == null ) {
-            jspLoader = new JasperLoader
-            (new URL[] {baseUrl},
-                    getClassLoader(),
-                    rctxt.getPermissionCollection(),
-                    rctxt.getCodeSource());
+            jspLoader = rctxt.getJspLoader(baseUrl, getClassLoader());
         }
         return jspLoader;
     }

Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=607464&r1=607463&r2=607464&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Sat Dec 
29 11:28:41 2007
@@ -38,6 +38,7 @@
 import org.apache.jasper.Options;
 import org.apache.jasper.runtime.JspFactoryImpl;
 import org.apache.jasper.security.SecurityClassLoad;
+import org.apache.jasper.servlet.JasperLoader;
 import org.apache.jasper.servlet.JspServletWrapper;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -155,6 +156,7 @@
     private ServletContext context;
     private Options options;
     private URLClassLoader parentClassLoader;
+    private JasperLoader jspLoader;
     private PermissionCollection permissionCollection;
     private CodeSource codeSource;                    
     private String classpath;
@@ -314,6 +316,29 @@
      */
     public String getClassPath() {
         return classpath;
+    }
+
+
+    /**
+     * Obtain the classloader to use when loading JSP resources. In development
+     * mode, each JSP has a separate classloader to enable easy re-loading of
+     * modified JSPs. If not in development mode, a single loader is used to
+     * reduce perm gen usage when many JSPs all use the same handful of tags.
+     */
+    public URLClassLoader getJspLoader(URL baseUrl, ClassLoader parent) {
+        if (jspLoader == null) {
+            if (options.getDevelopment()) {
+                jspLoader = new JasperLoader
+                (new URL[] {baseUrl},
+                        parent,
+                        permissionCollection,
+                        codeSource);
+            } else {
+                jspLoader = new JasperLoader(new URL[] {baseUrl},
+                    parent, permissionCollection, codeSource);
+            }
+        }
+        return jspLoader;
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to