Author: jboynes Date: Mon Aug 12 01:21:38 2013 New Revision: 1513025 URL: http://svn.apache.org/r1513025 Log: Have JspC initialize its ClassLoader before the ServletContext. This avoids the need to re-initialize the ClassLoader for every JSP being pre-compiled. It also allows the ServletContext to be used before starting a compilation run, e.g. to scan for TLDs
Modified: tomcat/trunk/java/org/apache/jasper/JspC.java tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java tomcat/trunk/test/org/apache/jasper/servlet/TestJspCServletContext.java Modified: tomcat/trunk/java/org/apache/jasper/JspC.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1513025&r1=1513024&r2=1513025&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/JspC.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspC.java Mon Aug 12 01:21:38 2013 @@ -151,7 +151,7 @@ public class JspC extends Task implement } protected String classPath = null; - protected URLClassLoader loader = null; + protected ClassLoader loader = null; protected boolean trimSpaces = false; protected boolean genStringAsCharArray = false; protected boolean xpoweredBy; @@ -1154,9 +1154,6 @@ public class JspC extends Task implement } originalClassLoader = Thread.currentThread().getContextClassLoader(); - if( loader==null ) { - initClassLoader( clctxt ); - } Thread.currentThread().setContextClassLoader(loader); clctxt.setClassLoader(loader); @@ -1288,8 +1285,11 @@ public class JspC extends Task implement Localizer.getMessage("jsp.error.jspc.uriroot_not_dir")); } + if (loader == null) { + loader = initClassLoader(); + } if (context == null) { - initServletContext(); + initServletContext(loader); } // No explicit pages, we'll process all .jsp in the webapp @@ -1412,12 +1412,13 @@ public class JspC extends Task implement } } - protected void initServletContext() throws IOException, JasperException { + protected void initServletContext(ClassLoader classLoader) + throws IOException, JasperException { // TODO: should we use the Ant Project's log? PrintWriter log = new PrintWriter(System.out); URL resourceBase = new File(uriRoot).getCanonicalFile().toURI().toURL(); - context = new JspCServletContext(log, resourceBase); + context = new JspCServletContext(log, resourceBase, classLoader); tldLocationsCache = TldLocationsCache.getInstance(context); rctxt = new JspRuntimeContext(context, this); jspConfig = new JspConfig(context); @@ -1428,11 +1429,9 @@ public class JspC extends Task implement * Initializes the classloader as/if needed for the given * compilation context. * - * @param clctxt The compilation context * @throws IOException If an error occurs */ - protected void initClassLoader(JspCompilationContext clctxt) - throws IOException { + protected ClassLoader initClassLoader() throws IOException { classPath = getClassPath(); @@ -1502,14 +1501,10 @@ public class JspC extends Task implement } } - // What is this ?? - urls.add(new File( - clctxt.getRealPath("/")).getCanonicalFile().toURI().toURL()); - URL urlsA[]=new URL[urls.size()]; urls.toArray(urlsA); loader = new URLClassLoader(urlsA, this.getClass().getClassLoader()); - context.setClassLoader(loader); + return loader; } /** Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java?rev=1513025&r1=1513024&r2=1513025&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java Mon Aug 12 01:21:38 2013 @@ -98,7 +98,7 @@ public class JspCServletContext implemen /** * Web application class loader. */ - private ClassLoader loader; + private final ClassLoader loader; // ----------------------------------------------------------- Constructors @@ -110,12 +110,13 @@ public class JspCServletContext implemen * @param aResourceBaseURL Resource base URL * @throws JasperException */ - public JspCServletContext(PrintWriter aLogWriter, URL aResourceBaseURL) - throws JasperException { + public JspCServletContext(PrintWriter aLogWriter, URL aResourceBaseURL, ClassLoader classLoader) + throws JasperException { myAttributes = new HashMap<>(); myLogWriter = aLogWriter; myResourceBaseURL = aResourceBaseURL; + this.loader = classLoader; this.webXml = buildMergedWebXml(); jspConfigDescriptor = webXml.getJspConfigDescriptor(); @@ -643,11 +644,6 @@ public class JspCServletContext implemen } - public void setClassLoader(ClassLoader loader) { - this.loader = loader; - } - - @Override public int getEffectiveMajorVersion() { return webXml.getMajorVersion(); Modified: tomcat/trunk/test/org/apache/jasper/servlet/TestJspCServletContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/servlet/TestJspCServletContext.java?rev=1513025&r1=1513024&r2=1513025&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/jasper/servlet/TestJspCServletContext.java (original) +++ tomcat/trunk/test/org/apache/jasper/servlet/TestJspCServletContext.java Mon Aug 12 01:21:38 2013 @@ -32,7 +32,7 @@ public class TestJspCServletContext { public void testWebapp() throws Exception { File appDir = new File("test/webapp"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(3, context.getEffectiveMajorVersion()); Assert.assertEquals(1, context.getEffectiveMinorVersion()); JspConfigDescriptor jspConfigDescriptor = @@ -63,7 +63,7 @@ public class TestJspCServletContext { public void testWebapp_2_2() throws Exception { File appDir = new File("test/webapp-2.2"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(2, context.getEffectiveMajorVersion()); Assert.assertEquals(2, context.getEffectiveMinorVersion()); } @@ -72,7 +72,7 @@ public class TestJspCServletContext { public void testWebapp_2_3() throws Exception { File appDir = new File("test/webapp-2.3"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(2, context.getEffectiveMajorVersion()); Assert.assertEquals(3, context.getEffectiveMinorVersion()); } @@ -81,7 +81,7 @@ public class TestJspCServletContext { public void testWebapp_2_4() throws Exception { File appDir = new File("test/webapp-2.4"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(2, context.getEffectiveMajorVersion()); Assert.assertEquals(4, context.getEffectiveMinorVersion()); } @@ -90,7 +90,7 @@ public class TestJspCServletContext { public void testWebapp_2_5() throws Exception { File appDir = new File("test/webapp-2.5"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(2, context.getEffectiveMajorVersion()); Assert.assertEquals(5, context.getEffectiveMinorVersion()); } @@ -99,7 +99,7 @@ public class TestJspCServletContext { public void testWebapp_3_0() throws Exception { File appDir = new File("test/webapp-3.0"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(3, context.getEffectiveMajorVersion()); Assert.assertEquals(0, context.getEffectiveMinorVersion()); } @@ -108,7 +108,7 @@ public class TestJspCServletContext { public void testWebapp_3_1() throws Exception { File appDir = new File("test/webapp-3.1"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(3, context.getEffectiveMajorVersion()); Assert.assertEquals(1, context.getEffectiveMinorVersion()); } @@ -117,7 +117,7 @@ public class TestJspCServletContext { public void testWebresources() throws Exception { File appDir = new File("test/webresources/dir1"); JspCServletContext context = - new JspCServletContext(null, appDir.toURI().toURL()); + new JspCServletContext(null, appDir.toURI().toURL(), null); Assert.assertEquals(3, context.getEffectiveMajorVersion()); Assert.assertEquals(1, context.getEffectiveMinorVersion()); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org