Author: markt
Date: Thu Jul 14 19:58:48 2016
New Revision: 1752737
URL: http://svn.apache.org/viewvc?rev=1752737&view=rev
Log:
Fix problem with JMX triggered parallel application init reported on users list
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java?rev=1752737&r1=1752736&r2=1752737&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java Thu Jul 14
19:58:48 2016
@@ -521,33 +521,22 @@ public class StandardWrapper extends Con
/**
- * @return <code>true</code> if the servlet class represented by this
- * component implements the <code>SingleThreadModel</code> interface.
+ * Does the servlet class represented by this component implement the
+ * <code>SingleThreadModel</code> interface? This can only be determined
+ * once the class is loaded. Calling this method will not trigger loading
+ * the class since that may cause the application to behave unexpectedly.
+ *
+ * @return {@code null} if the class has not been loaded, otherwise {@code
+ * true} if the servlet does implement {@code SingleThreadModel}
and
+ * {@code false} if it does not.
*/
- public boolean isSingleThreadModel() {
-
- // Short-cuts
- // If singleThreadModel is true, must have already checked this
- // If instance != null, must have already loaded
+ public Boolean isSingleThreadModel() {
+ // If the servlet has been loaded either singleThreadModel will be true
+ // or instance will be non-null
if (singleThreadModel || instance != null) {
- return singleThreadModel;
- }
-
- // The logic to determine this safely is more complex than one might
- // expect. allocate() already has the necessary logic so re-use it.
- // Make sure the Servlet is loaded with the right class loader
- ClassLoader oldCL = null;
- try {
- oldCL = ((Context) getParent()).bind(false, null);
- Servlet s = allocate();
- deallocate(s);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- } finally {
- ((Context) getParent()).unbind(false, oldCL);
+ return Boolean.valueOf(singleThreadModel);
}
- return singleThreadModel;
-
+ return null;
}
Modified: tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml?rev=1752737&r1=1752736&r2=1752737&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/core/mbeans-descriptors.xml Thu Jul
14 19:58:48 2016
@@ -1609,7 +1609,7 @@
<attribute name="singleThreadModel"
description="Does this servlet implement the SingleThreadModel
interface?"
- type="boolean"
+ type="java.lang.Boolean"
is="true"
writeable="false" />
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1752737&r1=1752736&r2=1752737&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jul 14 19:58:48 2016
@@ -51,6 +51,13 @@
<bug>59813</bug>: Ensure that circular relations of the Class-Path
attribute from JAR manifests will be processed correctly. (violetagg)
</fix>
+ <fix>
+ Ensure that reading the <code>singleThreadModel</code> attribute of a
+ <code>StandardWrapper</code> via JMX does not trigger initialisation of
+ the associated servlet. With some frameworks this can trigger an
+ unexpected initialisation thread and if initilisation is not
thread-safe
+ the initialisation can then fail. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]