Author: markt
Date: Thu Oct 27 13:59:41 2016
New Revision: 1766822
URL: http://svn.apache.org/viewvc?rev=1766822&view=rev
Log:
ThreadLocal leak detection is now hitting Java 9 module issues.
Catch the error and provide a useful error message if this happens.
Modified:
tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
tomcat/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java
tomcat/trunk/java/org/apache/tomcat/util/compat/JreCompat.java
Modified: tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties?rev=1766822&r1=1766821&r2=1766822&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties Thu
Oct 27 13:59:41 2016
@@ -13,7 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-webappClassLoader.addExports=When running on Java 9 you need to add
"--add-exports java.rmi/sun.rmi.transport=ALL-UNNAMED" to the JVM command line
arguments to enable RMI Target memory leak detection. Alternatively, you can
suppress this warning by disabling RMI Target memory leak detection.
+webappClassLoader.addExportsRmi=When running on Java 9 you need to add
"--add-exports-private=java.rmi/sun.rmi.transport=ALL-UNNAMED" to the JVM
command line arguments to enable RMI Target memory leak detection.
Alternatively, you can suppress this warning by disabling RMI Target memory
leak detection.
+webappClassLoader.addExportsThreadLocal=When running on Java 9 you need to add
"--add-exports-private=java.base/java.lang=ALL-UNNAMED" to the JVM command line
arguments to enable ThreadLocal memory leak detection. Alternatively, you can
suppress this warning by disabling ThreadLocal memory leak detection.
webappClassLoader.addPermisionNoCanonicalFile=Unable to obtain a canonical
file path from the URL [{0}]
webappClassLoader.addPermisionNoProtocol=The protocol [{0}] in the URL [{1}]
is not supported so no read permission was granted for resources located at
this URL
webappClassLoader.illegalJarPath=Illegal JAR entry detected with name {0}
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1766822&r1=1766821&r2=1766822&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Thu
Oct 27 13:59:41 2016
@@ -1860,10 +1860,17 @@ public abstract class WebappClassLoaderB
}
}
} catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
- log.warn(sm.getString(
- "webappClassLoader.checkThreadLocalsForLeaksFail",
- getContextName()), t);
+ JreCompat jreCompat = JreCompat.getInstance();
+ if (jreCompat.isInstanceOfInaccessibleObjectException(t)) {
+ // Must be running on Java 9 without the necessary command line
+ // options.
+
log.warn(sm.getString("webappClassLoader.addExportsThreadLocal"));
+ } else {
+ ExceptionUtils.handleThrowable(t);
+ log.warn(sm.getString(
+ "webappClassLoader.checkThreadLocalsForLeaksFail",
+ getContextName()), t);
+ }
}
}
@@ -2116,7 +2123,7 @@ public abstract class WebappClassLoaderB
if (jreCompat.isInstanceOfInaccessibleObjectException(e)) {
// Must be running on Java 9 without the necessary command line
// options.
- log.warn(sm.getString("webappClassLoader.addExports"));
+ log.warn(sm.getString("webappClassLoader.addExportsRmi"));
} else {
// Re-throw all other exceptions
throw e;
Modified: tomcat/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java?rev=1766822&r1=1766821&r2=1766822&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/compat/Jre9Compat.java Thu Oct 27
13:59:41 2016
@@ -40,11 +40,11 @@ class Jre9Compat extends JreCompat {
@Override
- public boolean isInstanceOfInaccessibleObjectException(Exception e) {
- if (e == null) {
+ public boolean isInstanceOfInaccessibleObjectException(Throwable t) {
+ if (t == null) {
return false;
}
- return inaccessibleObjectExceptionClazz.isAssignableFrom(e.getClass());
+ return inaccessibleObjectExceptionClazz.isAssignableFrom(t.getClass());
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/compat/JreCompat.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/compat/JreCompat.java?rev=1766822&r1=1766821&r2=1766822&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/compat/JreCompat.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/compat/JreCompat.java Thu Oct 27
13:59:41 2016
@@ -60,12 +60,12 @@ public class JreCompat {
* Test if the provided exception is an instance of
* java.lang.reflect.InaccessibleObjectException.
*
- * @param e The exception to test
+ * @param t The exception to test
*
* @return {@code true} if the exception is an instance of
* InaccessibleObjectException, otherwise {@code false}
*/
- public boolean isInstanceOfInaccessibleObjectException(Exception e) {
+ public boolean isInstanceOfInaccessibleObjectException(Throwable t) {
// Exception does not exist prior to Java 9
return false;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]