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