]
James Perkins commented on LOGMGR-218:
--------------------------------------
Please note this was reopened as there is an issue with embedded WildFly and the way this
worked. 2.1.6.Final is the only release with the original fix which in most cases
won't be an issue. 2.1.7.Final will be released with the updated fix for WildFly. The
other branches that have no release against them will also get the new fix.
JBoss Logmanager is incompatibile with -Xbootclasspath and JDK 11
-----------------------------------------------------------------
Key: LOGMGR-218
URL:
https://issues.jboss.org/browse/LOGMGR-218
Project: JBoss Log Manager
Issue Type: Bug
Reporter: Brian Stansberry
Assignee: James Perkins
Priority: Critical
Fix For: 2.1.6.Final, 2.1.7.Final, 2.2.0.Final, 3.0.0.Final
The current logmanager implementation is incompatible with use with the -Xbootclasspath/a
option on JDK 11. The is because it is a multi-release jar which is incompatible with
-Xbootclasspath/a. This is problematic because to allow Java Agents to work with JBoss
Modules based applications (i.e. WildFly and derivatives) often it is necessary to include
logmanager in -Xbootclasspath/a .
Here's me starting WildFly with a -Xbootclasspath/a setting and JDK 11:
{code}
$ build/target/wildfly-core-7.0.0.CR2-SNAPSHOT/bin/standalone.sh
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME:
/Users/bstansberry/dev/wildfly/wildfly-core/build/target/wildfly-core-7.0.0.CR2-SNAPSHOT
JAVA: /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager
-Djava.awt.headless=true
-Xbootclasspath/a:/Users/bstansberry/dev/wildfly/wildfly-core/dist/target/wildfly-core-7.0.0.CR2-SNAPSHOT/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.5.Final.jar
-Djava.util.logging.manager=org.jboss.logmanager.LogManager
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED --add-modules=java.se
=========================================================================
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jboss.logmanager.LogLevelInitTask to
constructor java.util.logging.Level$KnownLevel(java.util.logging.Level)
WARNING: Please consider reporting this to the maintainers of
org.jboss.logmanager.LogLevelInitTask
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective
access operations
WARNING: All illegal access operations will be denied in a future release
java.lang.IllegalStateException: The LogManager was not properly installed (you must set
the "java.util.logging.manager" system property to
"org.jboss.logmanager.LogManager")
at org.jboss.logmanager.Logger.getLogger(Logger.java:57)
at org.jboss.as.server@7.0.0.CR2-SNAPSHOT//org.jboss.as.server.Main.main(Main.java:89)
at org.jboss.modules.Module.run(Module.java:352)
at org.jboss.modules.Module.run(Module.java:320)
at org.jboss.modules.Main.main(Main.java:593)
{code}
Right now jboss-logmanager is a multi-release jar. But, per the MR jar spec
(
https://openjdk.java.net/jeps/238) that is incompatible with -Xbootclasspath:
{quote}
Multi-release jars and the boot loader
Multi-release JARs are not supported by the boot loader (for example, when a
multi-release JAR file is declared with the -Xbootclasspath/a option). Such support would
complicate the boot loader implementation for what is considered a rare use-case.
{quote}
At this point I've identified two java agents that are commonly used with WildFly
derived apps that cannot be installed in a JDK 11 environment: Hawkular and the Prometheus
jmx-exporter. The former I could perhaps work around (i.e. don't install it with JDK
11) as it's use is deprecated. But being able to use of jmx-exporter is quite
important.