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