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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]