You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/01/26 22:58:36 UTC

svn commit: r1780488 - in /tomcat/trunk: java/org/apache/jasper/compiler/Generator.java java/org/apache/jasper/runtime/JspRuntimeLibrary.java java/org/apache/jasper/runtime/TagHandlerPool.java webapps/docs/changelog.xml

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org