This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push: new aa73fa0 Minor Graal workarounds and robustness aa73fa0 is described below commit aa73fa021267bfee65b0aa79c22057941ef5b210 Author: remm <r...@apache.org> AuthorDate: Fri May 10 13:59:13 2019 +0200 Minor Graal workarounds and robustness It goes up to the webapp start now. Still having problems with CL resources though, among many other items. --- .../apache/catalina/loader/ParallelWebappClassLoader.java | 3 ++- .../org/apache/catalina/loader/WebappClassLoaderBase.java | 10 ++++++---- java/org/apache/catalina/util/CharsetMapper.java | 15 ++++++++++----- java/org/apache/jasper/compiler/Localizer.java | 5 +++-- java/org/apache/naming/StringManager.java | 5 ++++- java/org/apache/tomcat/util/compat/JreCompat.java | 1 - res/tomcat-maven/README.md | 3 ++- 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/java/org/apache/catalina/loader/ParallelWebappClassLoader.java b/java/org/apache/catalina/loader/ParallelWebappClassLoader.java index 2235229..a71d26d 100644 --- a/java/org/apache/catalina/loader/ParallelWebappClassLoader.java +++ b/java/org/apache/catalina/loader/ParallelWebappClassLoader.java @@ -19,13 +19,14 @@ package org.apache.catalina.loader; import org.apache.catalina.LifecycleException; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.util.compat.JreCompat; public class ParallelWebappClassLoader extends WebappClassLoaderBase { private static final Log log = LogFactory.getLog(ParallelWebappClassLoader.class); static { - boolean result = ClassLoader.registerAsParallelCapable(); + boolean result = !JreCompat.isGraalAvailable() && ClassLoader.registerAsParallelCapable(); if (!result) { log.warn(sm.getString("webappClassLoaderParallel.registrationFailed")); } diff --git a/java/org/apache/catalina/loader/WebappClassLoaderBase.java b/java/org/apache/catalina/loader/WebappClassLoaderBase.java index a8a079e..1ee573b 100644 --- a/java/org/apache/catalina/loader/WebappClassLoaderBase.java +++ b/java/org/apache/catalina/loader/WebappClassLoaderBase.java @@ -137,7 +137,9 @@ public abstract class WebappClassLoaderBase extends URLClassLoader private static final String CLASS_FILE_SUFFIX = ".class"; static { - ClassLoader.registerAsParallelCapable(); + if (!JreCompat.isGraalAvailable()) { + ClassLoader.registerAsParallelCapable(); + } JVM_THREAD_GROUP_NAMES.add(JVM_THREAD_GROUP_SYSTEM); JVM_THREAD_GROUP_NAMES.add("RMI Runtime"); } @@ -1215,7 +1217,7 @@ public abstract class WebappClassLoaderBase extends URLClassLoader @Override public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - synchronized (getClassLoadingLock(name)) { + synchronized (JreCompat.isGraalAvailable() ? this : getClassLoadingLock(name)) { if (log.isDebugEnabled()) log.debug("loadClass(" + name + ", " + resolve + ")"); Class<?> clazz = null; @@ -1234,7 +1236,7 @@ public abstract class WebappClassLoaderBase extends URLClassLoader } // (0.1) Check our previously loaded class cache - clazz = findLoadedClass(name); + clazz = JreCompat.isGraalAvailable() ? null : findLoadedClass(name); if (clazz != null) { if (log.isDebugEnabled()) log.debug(" Returning class from cache"); @@ -2323,7 +2325,7 @@ public abstract class WebappClassLoaderBase extends URLClassLoader if (clazz != null) return clazz; - synchronized (getClassLoadingLock(name)) { + synchronized (JreCompat.isGraalAvailable() ? this : getClassLoadingLock(name)) { clazz = entry.loadedClass; if (clazz != null) return clazz; diff --git a/java/org/apache/catalina/util/CharsetMapper.java b/java/org/apache/catalina/util/CharsetMapper.java index 1d6df62..f0efd5a 100644 --- a/java/org/apache/catalina/util/CharsetMapper.java +++ b/java/org/apache/catalina/util/CharsetMapper.java @@ -23,6 +23,7 @@ import java.util.Locale; import java.util.Properties; import org.apache.tomcat.util.ExceptionUtils; +import org.apache.tomcat.util.compat.JreCompat; @@ -69,11 +70,15 @@ public class CharsetMapper { * resource could not be loaded for any reason. */ public CharsetMapper(String name) { - try (InputStream stream = this.getClass().getResourceAsStream(name)) { - map.load(stream); - } catch (Throwable t) { - ExceptionUtils.handleThrowable(t); - throw new IllegalArgumentException(t.toString()); + if (JreCompat.isGraalAvailable()) { + map.put("en", "ISO-8859-1"); + } else { + try (InputStream stream = this.getClass().getResourceAsStream(name)) { + map.load(stream); + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); + throw new IllegalArgumentException(t); + } } } diff --git a/java/org/apache/jasper/compiler/Localizer.java b/java/org/apache/jasper/compiler/Localizer.java index 24a6de2..e22803a 100644 --- a/java/org/apache/jasper/compiler/Localizer.java +++ b/java/org/apache/jasper/compiler/Localizer.java @@ -37,7 +37,6 @@ public class Localizer { bundle = ResourceBundle.getBundle("org.apache.jasper.resources.LocalStrings"); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); - t.printStackTrace(); } } @@ -55,7 +54,9 @@ public class Localizer { public static String getMessage(String errCode) { String errMsg = errCode; try { - errMsg = bundle.getString(errCode); + if (bundle != null) { + errMsg = bundle.getString(errCode); + } } catch (MissingResourceException e) { } return errMsg; diff --git a/java/org/apache/naming/StringManager.java b/java/org/apache/naming/StringManager.java index 5e36c1a..8e9922d 100644 --- a/java/org/apache/naming/StringManager.java +++ b/java/org/apache/naming/StringManager.java @@ -110,7 +110,10 @@ public class StringManager { String str = null; try { - str = bundle.getString(key); + // Avoid NPE if bundle is null and treat it like an MRE + if (bundle != null) { + str = bundle.getString(key); + } } catch(MissingResourceException mre) { //bad: shouldn't mask an exception the following way: // str = "[cannot find message associated with key '" + key + "' due to " + mre + "]"; diff --git a/java/org/apache/tomcat/util/compat/JreCompat.java b/java/org/apache/tomcat/util/compat/JreCompat.java index ffe2223..50dd6e1 100644 --- a/java/org/apache/tomcat/util/compat/JreCompat.java +++ b/java/org/apache/tomcat/util/compat/JreCompat.java @@ -45,7 +45,6 @@ public class JreCompat { static { // This is Tomcat 9 with a minimum Java version of Java 8. // Look for the highest supported JVM first - System.out.println("GraalCompat : " + GraalCompat.isSupported()); if (GraalCompat.isSupported()) { instance = new GraalCompat(); graalAvailable = true; diff --git a/res/tomcat-maven/README.md b/res/tomcat-maven/README.md index 3063ac2..0796b33 100644 --- a/res/tomcat-maven/README.md +++ b/res/tomcat-maven/README.md @@ -85,6 +85,7 @@ Note: Graal support in Tomcat is not functional yet. Download Graal native-image and tools. ``` export JAVA_HOME=/path...to/graalvm-ce-19.0.0 +export TOMCAT_MAVEN=/path...to/tomcat-maven cd $JAVA_HOME/bin ./gu install native-image ``` @@ -97,7 +98,7 @@ Then exercise necessary paths of your service with the Tomcat configuration. Generate the final json using native-image-configuration then use native image using the generated reflection metadata. ``` $JAVA_HOME/bin/native-image-configure generate --trace-input=./target/trace-file.json --output-dir=./target -$JAVA_HOME/bin/native-image --allow-incomplete-classpath -H:+ReportUnsupportedElementsAtRuntime -H:ConfigurationFileDirectories=./target/ -H:ReflectionConfigurationFiles=./tomcat-reflection.json -jar target/tomcat-maven-1.0.jar +$JAVA_HOME/bin/native-image --allow-incomplete-classpath -H:+ReportUnsupportedElementsAtRuntime -H:ConfigurationFileDirectories=$TOMCAT_MAVEN/target/ -H:ReflectionConfigurationFiles=$TOMCAT_MAVEN/tomcat-reflection.json -jar target/tomcat-maven-1.0.jar ./tomcat-maven-1.0 --no-jmx -Dcatalina.base=. -Djava.util.logging.config.file=conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ``` Note: -H:ConfigurationFileDirectories does not appear to work properly, so it could be needed to add the content of reflect-config.json --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org