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 6bb8ad5  Update to Graal 19
6bb8ad5 is described below

commit 6bb8ad5bd3347465de28fbb0225c728a0a623754
Author: remm <r...@apache.org>
AuthorDate: Fri May 10 11:55:16 2019 +0200

    Update to Graal 19
    
    The previous version was 1.0 RC 16, that's progress. Thankfully, there's
    still as many issues as before. Start working around the ones that will
    "never" be fixed using JreCompat (JMX and URL stream handlers). Document
    the new process.
---
 java/org/apache/catalina/startup/Tomcat.java            |  8 +++++++-
 java/org/apache/catalina/webresources/StandardRoot.java |  9 ++++++---
 java/org/apache/tomcat/util/compat/GraalCompat.java     |  4 ++--
 java/org/apache/tomcat/util/compat/JreCompat.java       | 10 ++++++++++
 java/org/apache/tomcat/util/modeler/Registry.java       |  7 ++++++-
 res/tomcat-maven/README.md                              | 14 +++++++-------
 res/tomcat-maven/pom.xml                                |  2 +-
 webapps/docs/changelog.xml                              |  8 ++++++++
 8 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/java/org/apache/catalina/startup/Tomcat.java 
b/java/org/apache/catalina/startup/Tomcat.java
index 2309109..71d923a 100644
--- a/java/org/apache/catalina/startup/Tomcat.java
+++ b/java/org/apache/catalina/startup/Tomcat.java
@@ -1391,6 +1391,12 @@ public class Tomcat {
      * @throws Exception if an error occurs
      */
     public static void main(String[] args) throws Exception {
+        // Process some command line parameters
+        for (int i = 0; i < args.length; i++) {
+            if (args[i].equals("--no-jmx")) {
+                Registry.disableRegistry();
+            }
+        }
         org.apache.catalina.startup.Tomcat tomcat = new 
org.apache.catalina.startup.Tomcat();
         // Create a Catalina instance and let it parse the configuration files
         // It will also set a shutdown hook to stop the Server when needed
@@ -1439,7 +1445,7 @@ public class Tomcat {
             } else if (args[i].equals("--await")) {
                 await = true;
             } else if (args[i].equals("--no-jmx")) {
-                Registry.disableRegistry();
+                // This was already processed before
             } else {
                 throw new 
IllegalArgumentException(sm.getString("tomcat.invalidCommandLine", args[i]));
             }
diff --git a/java/org/apache/catalina/webresources/StandardRoot.java 
b/java/org/apache/catalina/webresources/StandardRoot.java
index ba2bf39..0f5058e 100644
--- a/java/org/apache/catalina/webresources/StandardRoot.java
+++ b/java/org/apache/catalina/webresources/StandardRoot.java
@@ -45,6 +45,7 @@ import org.apache.catalina.util.LifecycleMBeanBase;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.buf.UriUtil;
+import org.apache.tomcat.util.compat.JreCompat;
 import org.apache.tomcat.util.http.RequestUtil;
 import org.apache.tomcat.util.res.StringManager;
 
@@ -694,9 +695,11 @@ public class StandardRoot extends LifecycleMBeanBase 
implements WebResourceRoot
     }
 
     protected void registerURLStreamHandlerFactory() {
-        // Ensure support for jar:war:file:/ URLs will be available (required
-        // for resource JARs in packed WAR files).
-        TomcatURLStreamHandlerFactory.register();
+        if (!JreCompat.isGraalAvailable()) {
+            // Ensure support for jar:war:file:/ URLs will be available 
(required
+            // for resource JARs in packed WAR files).
+            TomcatURLStreamHandlerFactory.register();
+        }
     }
 
     @Override
diff --git a/java/org/apache/tomcat/util/compat/GraalCompat.java 
b/java/org/apache/tomcat/util/compat/GraalCompat.java
index f6636c7..bfa7b02 100644
--- a/java/org/apache/tomcat/util/compat/GraalCompat.java
+++ b/java/org/apache/tomcat/util/compat/GraalCompat.java
@@ -25,10 +25,10 @@ class GraalCompat extends JreCompat {
     static {
         boolean result = false;
         try {
-            Class<?> nativeImageClazz = 
Class.forName("org.graalvm.nativeimage");
+            Class<?> nativeImageClazz = 
Class.forName("org.graalvm.nativeimage.ImageInfo");
             result = (nativeImageClazz.getMethod("inImageCode").invoke(null) 
== Boolean.TRUE);
         } catch (ClassNotFoundException e) {
-            // Must be Java 8
+            // Must be Graal
         } catch (ReflectiveOperationException | IllegalArgumentException e) {
             // Should never happen
         }
diff --git a/java/org/apache/tomcat/util/compat/JreCompat.java 
b/java/org/apache/tomcat/util/compat/JreCompat.java
index f507b11..ffe2223 100644
--- a/java/org/apache/tomcat/util/compat/JreCompat.java
+++ b/java/org/apache/tomcat/util/compat/JreCompat.java
@@ -38,20 +38,25 @@ public class JreCompat {
     private static final int RUNTIME_MAJOR_VERSION = 8;
 
     private static final JreCompat instance;
+    private static final boolean graalAvailable;
     private static final boolean jre9Available;
     private static final StringManager sm = 
StringManager.getManager(JreCompat.class);
 
     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;
             jre9Available = false;
         } else if (Jre9Compat.isSupported()) {
             instance = new Jre9Compat();
+            graalAvailable = false;
             jre9Available = true;
         } else {
             instance = new JreCompat();
+            graalAvailable = false;
             jre9Available = false;
         }
     }
@@ -62,6 +67,11 @@ public class JreCompat {
     }
 
 
+    public static boolean isGraalAvailable() {
+        return graalAvailable;
+    }
+
+
     public static boolean isJre9Available() {
         return jre9Available;
     }
diff --git a/java/org/apache/tomcat/util/modeler/Registry.java 
b/java/org/apache/tomcat/util/modeler/Registry.java
index 0958a92..6ee1393 100644
--- a/java/org/apache/tomcat/util/modeler/Registry.java
+++ b/java/org/apache/tomcat/util/modeler/Registry.java
@@ -38,6 +38,7 @@ import javax.management.ObjectName;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.compat.JreCompat;
 import org.apache.tomcat.util.modeler.modules.ModelerSource;
 import org.apache.tomcat.util.res.StringManager;
 
@@ -134,7 +135,11 @@ public class Registry implements RegistryMBean, 
MBeanRegistration {
      */
     public static synchronized Registry getRegistry(Object key, Object guard) {
         if (registry == null) {
-            registry = new Registry();
+            if (JreCompat.isGraalAvailable()) {
+                disableRegistry();
+            } else {
+                registry = new Registry();
+            }
         }
         if (registry.guard != null && registry.guard != guard) {
             return null;
diff --git a/res/tomcat-maven/README.md b/res/tomcat-maven/README.md
index 095c3fd..3063ac2 100644
--- a/res/tomcat-maven/README.md
+++ b/res/tomcat-maven/README.md
@@ -82,11 +82,11 @@ oc policy add-role-to-user view system:serviceaccount:$(oc 
project -q):default -
 
 Note: Graal support in Tomcat is not functional yet.
 
-Build Graal native-image-configure tool.
+Download Graal native-image and tools.
 ```
-export JAVA_HOME=/path...to/graalvm-ce-1.0.0-rc16
-cd $JAVA_HOME/jre/tools/native-image-configure
-$JAVA_HOME/bin/native-image -H:-ParseRuntimeOptions -jar svm-configure.jar 
-H:Name=native-image-configure
+export JAVA_HOME=/path...to/graalvm-ce-19.0.0
+cd $JAVA_HOME/bin
+./gu install native-image
 ```
 Run Tomcat with the agent in full trace mode.
 ```
@@ -96,9 +96,9 @@ 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/jre/tools/native-image-configure/native-image-configure generate 
--trace-input=./target/trace-file.json --output-dir=./target
-$JAVA_HOME/bin/native-image -H:+ReportUnsupportedElementsAtRuntime 
-H:ConfigurationFileDirectories=./target/ 
-H:ReflectionConfigurationFiles=./tomcat-reflection.json -jar 
target/tomcat-maven-1.0.jar
-./tomcat-maven-1.0 -Dcatalina.base=. 
-Djava.util.logging.config.file=conf/logging.properties 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
+$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
+./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 tomcat-reflection.json.
diff --git a/res/tomcat-maven/pom.xml b/res/tomcat-maven/pom.xml
index 7208413..c6bd79a 100644
--- a/res/tomcat-maven/pom.xml
+++ b/res/tomcat-maven/pom.xml
@@ -29,7 +29,7 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <mainClass>org.apache.catalina.startup.Tomcat</mainClass>
-        <tomcat.version>9.0.19</tomcat.version>
+        <tomcat.version>9.0.21</tomcat.version>
     </properties>
 
     <dependencies>
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index a0d7616..72a7da2 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -50,6 +50,10 @@
       <add>
         <bug>57287</bug>: Add file sorting to DefaultServlet (schultz)
       </add>
+      <fix>
+        Fix <code>--no-jmx</code> flag processing, which was called after
+        registry initialization. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">
@@ -95,6 +99,10 @@
         <bug>63403</bug>: Fix TestHttp2InitialConnection test failures when
         running with a non-English locale. (kkolinko)
       </fix>
+      <fix>
+        Add Graal JreCompat, and use it to disable JMX and URL stream handlers.
+        (remm)
+      </fix>
     </changelog>
   </subsection>
 </section>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to