spring-boot-starter-actuator + data-jpa with GraalVM native-image NotCompliantMBeanException
See original GitHub issueNew Spring Boot 3.0.0-RC2 application with spring-boot-starter-actuator results in the following error:
2022-11-15T15:38:18.962+01:00 ERROR 95910 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalArgumentException: javax.management.NotCompliantMBeanException: com.sun.management.GarbageCollectorMXBean: Method com.sun.management.GarbageCollectorMXBean.getLastGcInfo has parameter or return type that cannot be translated into an open type
at java.management@17.0.5/javax.management.StandardMBean.<init>(StandardMBean.java:271) ~[spring-boot-native-test:na]
at java.management@17.0.5/javax.management.StandardEmitterMBean.<init>(StandardEmitterMBean.java:148) ~[spring-boot-native-test:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.management.ManagementSupport.addMXBean(ManagementSupport.java:299) ~[na:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.management.ManagementSupport.getPlatformMBeanServer(ManagementSupport.java:285) ~[na:na]
at java.management@17.0.5/java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:45) ~[na:na]
at io.micrometer.core.instrument.binder.tomcat.TomcatMetrics.getMBeanServer(TomcatMetrics.java:98) ~[na:na]
at io.micrometer.core.instrument.binder.tomcat.TomcatMetrics.<init>(TomcatMetrics.java:72) ~[na:na]
at org.springframework.boot.actuate.metrics.web.tomcat.TomcatMetricsBinder.onApplicationEvent(TomcatMetricsBinder.java:63) ~[spring-boot-native-test:3.0.0-RC2]
at org.springframework.boot.actuate.metrics.web.tomcat.TomcatMetricsBinder.onApplicationEvent(TomcatMetricsBinder.java:42) ~[spring-boot-native-test:3.0.0-RC2]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[na:na]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[na:na]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[na:na]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:413) ~[spring-boot-native-test:6.0.0-RC4]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:370) ~[spring-boot-native-test:6.0.0-RC4]
at org.springframework.boot.context.event.EventPublishingRunListener.started(EventPublishingRunListener.java:103) ~[spring-boot-native-test:3.0.0-RC2]
at org.springframework.boot.SpringApplicationRunListeners.lambda$started$5(SpringApplicationRunListeners.java:76) ~[na:na]
at java.base@17.0.5/java.lang.Iterable.forEach(Iterable.java:75) ~[spring-boot-native-test:na]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) ~[na:na]
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) ~[na:na]
at org.springframework.boot.SpringApplicationRunListeners.started(SpringApplicationRunListeners.java:76) ~[na:na]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) ~[spring-boot-native-test:3.0.0-RC2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-native-test:3.0.0-RC2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-native-test:3.0.0-RC2]
at bootnative.SpringBootNativeTestApplication.main(SpringBootNativeTestApplication.java:12) ~[spring-boot-native-test:na]
Caused by: javax.management.NotCompliantMBeanException: com.sun.management.GarbageCollectorMXBean: Method com.sun.management.GarbageCollectorMXBean.getLastGcInfo has parameter or return type that cannot be translated into an open type
at java.management@17.0.5/com.sun.jmx.mbeanserver.Introspector.throwException(Introspector.java:468) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanAnalyzer.<init>(MBeanAnalyzer.java:120) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanAnalyzer.analyzer(MBeanAnalyzer.java:102) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MXBeanIntrospector.getAnalyzer(MXBeanIntrospector.java:74) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanIntrospector.getPerInterface(MBeanIntrospector.java:192) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanSupport.<init>(MBeanSupport.java:138) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MXBeanSupport.<init>(MXBeanSupport.java:66) ~[na:na]
at java.management@17.0.5/javax.management.StandardMBean.construct(StandardMBean.java:175) ~[spring-boot-native-test:na]
at java.management@17.0.5/javax.management.StandardMBean.<init>(StandardMBean.java:269) ~[spring-boot-native-test:na]
... 23 common frames omitted
Caused by: java.lang.IllegalArgumentException: Method com.sun.management.GarbageCollectorMXBean.getLastGcInfo has parameter or return type that cannot be translated into an open type
at java.management@17.0.5/com.sun.jmx.mbeanserver.ConvertingMethod.from(ConvertingMethod.java:46) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MXBeanIntrospector.mFrom(MXBeanIntrospector.java:84) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MXBeanIntrospector.mFrom(MXBeanIntrospector.java:54) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanAnalyzer.initMaps(MBeanAnalyzer.java:137) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.MBeanAnalyzer.<init>(MBeanAnalyzer.java:118) ~[spring-boot-native-test:na]
... 30 common frames omitted
Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: com.sun.management.GcInfo
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.openDataException(DefaultMXBeanMappingFactory.java:1539) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:261) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.ConvertingMethod.<init>(ConvertingMethod.java:212) ~[spring-boot-native-test:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.ConvertingMethod.from(ConvertingMethod.java:41) ~[spring-boot-native-test:na]
... 34 common frames omitted
Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: java.util.Map<java.lang.String, java.lang.management.MemoryUsage>
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.openDataException(DefaultMXBeanMappingFactory.java:1539) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:261) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeCompositeMapping(DefaultMXBeanMappingFactory.java:475) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeMapping(DefaultMXBeanMappingFactory.java:294) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:259) ~[na:na]
... 36 common frames omitted
Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: java.lang.management.MemoryUsage
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.openDataException(DefaultMXBeanMappingFactory.java:1539) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:261) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeTabularMapping(DefaultMXBeanMappingFactory.java:364) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeParameterizedTypeMapping(DefaultMXBeanMappingFactory.java:406) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeMapping(DefaultMXBeanMappingFactory.java:297) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:259) ~[na:na]
... 39 common frames omitted
Caused by: javax.management.openmbean.OpenDataException: Can't map java.lang.management.MemoryUsage to an open data type
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeCompositeMapping(DefaultMXBeanMappingFactory.java:462) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeMapping(DefaultMXBeanMappingFactory.java:294) ~[na:na]
at java.management@17.0.5/com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:259) ~[na:na]
... 43 common frames omitted
Issue Analytics
- State:
- Created 10 months ago
- Comments:13 (10 by maintainers)
Top Results From Across the Web
[GR-38414] Report statistics about gc and memory pools #4510
If I look at prometheus as reported by micrometer, here are the metrics I am missing in GraalVM: # HELP jvm_info_total JVM version...
Read more >GraalVM Native Image failing on Springdoc dependency
I am trying to create a sample application using spring boot and GraalVM Native Image, however as soon as I add the dependency...
Read more >Spring Tips: Spring and GraalVM (pt. 2)
In the video, I demonstrated how to get a Spring Data JPA (with Hibernate) and Apache Tomcat working. I also demonstrated how to...
Read more >Native Spring Boot Applications with GraalVM (Part 2) - Medium
Firstly, we start with opening a sample java application and then build it into a native executable. There are 2 different ways of...
Read more >试用Spring Native Beta版 - 老K的Java博客
Building a native image with graalvm ce rc11 & rc12, I occasionally see the following error; Error: Image building with exit status 137...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
I think I understand this now.
The reachability metadata for Hibernate contains some entries that are sufficient to cause the various failures discussed above. The failures will occur as soon as
ManagementFactory.getPlatformMBeanServer()
is called, even as the first statement in the application’s main method. This explains why the problem goes away when the Hibernate dependency is removed.A dependency on Hibernate Validator also fixes the problem as its has reflection hints that, through sheer coincidence, complement Hibernate’s. This explains why the problem is not see in PetClinic – it depends on both Hibernate and Hibernate Validator.
We’re going to fix this by contributing some improvements to the reachability metadata. Specifically, the MBean-related entries should be removed from the metadata for hibernate-core. I have built the supplied reproducer with a locally updated copy of the metadata repository and it fixes the problem.
We may also contribute a change to the metadata for Hibernate Validator to remove its MBean-related entries. They appear to be benign, but we do not believe they belong there as Hibernate Validator doesn’t make any use of MBeans as far as we know.
Thx Andy - you are amazing!! My app now builds with the given hints: https://github.com/derkoe/spring-boot-native-test/pull/3