Author: markt Date: Thu Jan 26 22:58:35 2017 New Revision: 1780488 URL: http://svn.apache.org/viewvc?rev=1780488&view=rev Log: Refactor generated code so tags require less code
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java tomcat/trunk/java/org/apache/jasper/runtime/JspRuntimeLibrary.java tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1780488&r1=1780487&r2=1780488&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Thu Jan 26 22:58:35 2017 @@ -2614,21 +2614,18 @@ class Generator { } // Ensure clean-up takes place + // Use JspRuntimeLibrary to minimise code in _jspService() out.popIndent(); out.printil("} finally {"); out.pushIndent(); + out.printin("org.apache.jasper.runtime.JspRuntimeLibrary.releaseTag("); + out.print(tagHandlerVar); + out.print(", _jsp_getInstanceManager(), "); if (isPoolingEnabled && !(n.implementsJspIdConsumer())) { - out.printin("if (!"); out.print(tagHandlerVar); - out.println("_reused) {"); - out.pushIndent(); - } - out.printin(tagHandlerVar); - out.println(".release();"); - writeDestroyInstance(tagHandlerVar); - if (isPoolingEnabled && !(n.implementsJspIdConsumer())) { - out.popIndent(); - out.printil("}"); + out.println("_reused);"); + } else { + out.println("false);"); } out.popIndent(); out.printil("}"); Modified: tomcat/trunk/java/org/apache/jasper/runtime/JspRuntimeLibrary.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/JspRuntimeLibrary.java?rev=1780488&r1=1780487&r2=1780488&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/runtime/JspRuntimeLibrary.java (original) +++ tomcat/trunk/java/org/apache/jasper/runtime/JspRuntimeLibrary.java Thu Jan 26 22:58:35 2017 @@ -32,9 +32,13 @@ import javax.servlet.http.HttpServletReq import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyContent; +import javax.servlet.jsp.tagext.Tag; import org.apache.jasper.JasperException; import org.apache.jasper.compiler.Localizer; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.InstanceManager; /** * Bunch of util methods that are used by code generated for useBean, @@ -50,6 +54,8 @@ import org.apache.jasper.compiler.Locali */ public class JspRuntimeLibrary { + private static final Log log = LogFactory.getLog(JspRuntimeLibrary.class); + /** * Returns the value of the javax.servlet.error.exception request * attribute value, if present, otherwise the value of the @@ -963,4 +969,31 @@ public class JspRuntimeLibrary { return false; } + + public static void releaseTag(Tag tag, InstanceManager instanceManager, boolean reused) { + // Caller ensures pool is non-null if reuse is true + if (!reused) { + releaseTag(tag, instanceManager); + } + } + + + protected static void releaseTag(Tag tag, InstanceManager instanceManager) { + try { + tag.release(); + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); + log.warn("Error processing release on tag instance of " + + tag.getClass().getName(), t); + } + try { + instanceManager.destroyInstance(tag); + } catch (Exception e) { + Throwable t = ExceptionUtils.unwrapInvocationTargetException(e); + ExceptionUtils.handleThrowable(t); + log.warn("Error processing preDestroy on tag instance of " + + tag.getClass().getName(), t); + } + + } } Modified: tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java?rev=1780488&r1=1780487&r2=1780488&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java (original) +++ tomcat/trunk/java/org/apache/jasper/runtime/TagHandlerPool.java Thu Jan 26 22:58:35 2017 @@ -22,8 +22,6 @@ import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import org.apache.jasper.Constants; -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; import org.apache.tomcat.InstanceManager; /** @@ -38,8 +36,6 @@ public class TagHandlerPool { public static final String OPTION_TAGPOOL = "tagpoolClassName"; public static final String OPTION_MAXSIZE = "tagpoolMaxSize"; - private static final Log log = LogFactory.getLog(TagHandlerPool.class); - // index of next available tag handler private int current; protected InstanceManager instanceManager = null; @@ -143,7 +139,7 @@ public class TagHandlerPool { } } // There is no need for other threads to wait for us to release - doRelease(handler); + JspRuntimeLibrary.releaseTag(handler, instanceManager); } /** @@ -152,26 +148,7 @@ public class TagHandlerPool { */ public synchronized void release() { for (int i = current; i >= 0; i--) { - doRelease(handlers[i]); - } - } - - - private void doRelease(Tag handler) { - try { - handler.release(); - } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - log.warn("Error processing release on tag instance of " - + handler.getClass().getName(), t); - } - try { - instanceManager.destroyInstance(handler); - } catch (Exception e) { - Throwable t = ExceptionUtils.unwrapInvocationTargetException(e); - ExceptionUtils.handleThrowable(t); - log.warn("Error processing preDestroy on tag instance of " - + handler.getClass().getName(), t); + JspRuntimeLibrary.releaseTag(handlers[i], instanceManager); } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1780488&r1=1780487&r2=1780488&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Thu Jan 26 22:58:35 2017 @@ -88,6 +88,14 @@ </fix> </changelog> </subsection> + <subsection name="Jasper"> + <changelog> + <fix> + Refactor code generated for JSPs to reduce the size of the code required + for tags. (markt) + </fix> + </changelog> + </subsection> <subsection name="Cluster"> <changelog> <add> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org