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

Reply via email to