question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

spring-boot-starter-actuator + data-jpa with GraalVM native-image NotCompliantMBeanException

See original GitHub issue

New 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:closed
  • Created 10 months ago
  • Comments:13 (10 by maintainers)

github_iconTop GitHub Comments

4reactions
wilkinsonacommented, Nov 16, 2022

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.

3reactions
derkoecommented, Nov 16, 2022

Thx Andy - you are amazing!! My app now builds with the given hints: https://github.com/derkoe/spring-boot-native-test/pull/3

Read more comments on GitHub >

github_iconTop 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 >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found