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 2021/10/07 09:25:13 UTC

[tomcat] 02/03: Different solution for isThreadSafe=false

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 434cef97eedab06676f6454075ceb36637695bdd
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Oct 6 13:53:50 2021 +0100

    Different solution for isThreadSafe=false
---
 java/org/apache/jasper/compiler/Generator.java          | 17 ++++++++++++-----
 .../org/apache/jasper/resources/LocalStrings.properties |  1 +
 webapps/docs/changelog.xml                              |  7 +++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java
index 2872e01..7688b20 100644
--- a/java/org/apache/jasper/compiler/Generator.java
+++ b/java/org/apache/jasper/compiler/Generator.java
@@ -56,6 +56,8 @@ import org.apache.jasper.TrimSpacesOption;
 import org.apache.jasper.compiler.Node.ChildInfoBase;
 import org.apache.jasper.compiler.Node.NamedAttribute;
 import org.apache.jasper.runtime.JspRuntimeLibrary;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
 import org.xml.sax.Attributes;
 
 /**
@@ -81,6 +83,8 @@ import org.xml.sax.Attributes;
 
 class Generator {
 
+    private final Log log = LogFactory.getLog(Generator.class); // must not be static
+
     private static final Class<?>[] OBJECT_CLASS = { Object.class };
 
     private static final Pattern PRE_TAG_PATTERN = Pattern.compile("(?s).*(<pre>|</pre>).*");
@@ -740,10 +744,6 @@ class Generator {
         out.printin("    implements org.apache.jasper.runtime.JspSourceDependent,");
         out.println();
         out.printin("                 org.apache.jasper.runtime.JspSourceImports");
-        if (!pageInfo.isThreadSafe()) {
-            out.println(",");
-            out.printin("                 jakarta.servlet.SingleThreadModel");
-        }
         out.println(",");
         out.printin("                 org.apache.jasper.runtime.JspSourceDirectives");
         out.println(" {");
@@ -762,7 +762,14 @@ class Generator {
         genPreambleMethods();
 
         // Now the service method
-        out.printin("public void ");
+        if (pageInfo.isThreadSafe()) {
+            out.printin("public void ");
+        } else {
+            // This is unlikely to perform well.
+            out.printin("public synchronized void ");
+            // As required by JSP 3.1, log a warning
+            log.warn(Localizer.getMessage("jsp.warning.isThreadSafe", ctxt.getJspFile()));
+        }
         out.print(serviceMethodName);
         out.println("(final jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)");
         out.pushIndent();
diff --git a/java/org/apache/jasper/resources/LocalStrings.properties b/java/org/apache/jasper/resources/LocalStrings.properties
index 3a0f990..7677f03 100644
--- a/java/org/apache/jasper/resources/LocalStrings.properties
+++ b/java/org/apache/jasper/resources/LocalStrings.properties
@@ -289,6 +289,7 @@ jsp.warning.enablePooling=Warning: Invalid value for the initParam enablePooling
 jsp.warning.engineOptionsClass=Failed to load engine options class [{0}]
 jsp.warning.fork=Warning: Invalid value for the initParam fork. Will use the default value of "true"
 jsp.warning.genchararray=Warning: Invalid value for the initParam genStringAsCharArray. Will use the default value of "false"
+jsp.warning.isThreadSafe=Warning: The "isThreadSafe" page directive attribute used in [{0}] has been deprecated and will be removed in version 4.0 of the JSP specification
 jsp.warning.jspIdleTimeout=Warning: Invalid value for the initParam jspIdleTimeout. Will use the default value of "-1"
 jsp.warning.keepgen=Warning: Invalid value for the initParam keepgenerated. Will use the default value of "false"
 jsp.warning.loadSmap=Unable to load SMAP data for class [{0}]
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 8759d10..e0a9205 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -122,6 +122,13 @@
         to align Tomcat with recent updates in the Jakarta EL specification
         project. (markt)
       </update>
+      <fix>
+        Implement an alternative solution to support the JSP page directive
+        attribute <code>isThreadSafe</code> now that the
+        <code>SingleThreadModel</code> interface has been removed from the
+        Servlet API. The new approach synchronizes the <code>service()</code>
+        method.
+      </fix>
     </changelog>
   </subsection>
   <subsection name="WebSocket">

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org