NullPointerException: org.wildfly.extension.microprofile.metrics.MetricCollector
timonzw Sep 25, 2019 9:46 AMUsed WildFly: 17.0.1.Final
1. Steps to reproduce: Start WildFly
2. Deploy simple WAR with an Entity (in my case"MyEntity"), a web.xml and persistence.xml.
3. Access metrics using *hostname*:9990/metrics
Used dependencies:
<dependency> <groupId>org.wildfly</groupId> <artifactId>wildfly-parent</artifactId> <version>17.0.1.Final</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency>
Error log:
11:29:02,376 ERROR [org.jboss.as.controller.management-operation] (management I/O-1) WFLYCTL0013: Operation ("read-attribute") failed - address: ([ ("deployment" => "test-0.0.1-SNAPSHOT.war"), ("subsystem" => "jpa"), ("hibernate-persistence-unit" => "test-0.0.1-SNAPSHOT.war#my-persistence-unit"), ("entity-cache" => "test.MyEntity") ]): java.lang.NullPointerException at org.hibernate@5.3.10.Final//org.hibernate.stat.internal.StatisticsImpl.lambda$getCacheRegionStatistics$6(StatisticsImpl.java:633) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at org.hibernate@5.3.10.Final//org.hibernate.stat.internal.StatisticsImpl.getCacheRegionStatistics(StatisticsImpl.java:625) at org.hibernate@5.3.10.Final//org.hibernate.stat.internal.StatisticsImpl.getSecondLevelCacheStatistics(StatisticsImpl.java:646) at org.hibernate@5.3.10.Final//org.hibernate.stat.internal.StatisticsImpl.getSecondLevelCacheStatistics(StatisticsImpl.java:32) at org.hibernate.jipijapa-hibernate5-3@17.0.1.Final//org.jboss.as.jpa.hibernate5.management.HibernateEntityCacheStatistics.getStatistics(HibernateEntityCacheStatistics.java:94) at org.hibernate.jipijapa-hibernate5-3@17.0.1.Final//org.jboss.as.jpa.hibernate5.management.HibernateEntityCacheStatistics$2.invoke(HibernateEntityCacheStatistics.java:110) at org.hibernate.jipijapa-hibernate5-3@17.0.1.Final//org.jboss.as.jpa.hibernate5.management.HibernateAbstractStatistics.getValue(HibernateAbstractStatistics.java:99) at org.jboss.as.jpa@17.0.1.Final//org.jboss.as.jpa.management.ManagementResourceDefinition$1.handle(ManagementResourceDefinition.java:130) at org.jboss.as.jpa@17.0.1.Final//org.jboss.as.jpa.management.ManagementResourceDefinition$AbstractMetricsHandler.executeRuntimeStep(ManagementResourceDefinition.java:268) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AbstractRuntimeOnlyHandler$1.execute(AbstractRuntimeOnlyHandler.java:59) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:999) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:743) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:467) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1412) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:423) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerImpl.lambda$execute$1(ModelControllerImpl.java:243) at org.wildfly.security.elytron-private@1.9.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:289) at org.wildfly.security.elytron-private@1.9.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:255) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:243) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerClientFactoryImpl$LocalClient.executeInModelControllerCl(ModelControllerClientFactoryImpl.java:259) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerClientFactoryImpl$LocalClient.access$300(ModelControllerClientFactoryImpl.java:114) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerClientFactoryImpl$LocalClient$1.run(ModelControllerClientFactoryImpl.java:152) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerClientFactoryImpl$LocalClient$1.run(ModelControllerClientFactoryImpl.java:147) at org.wildfly.security.elytron-private@1.9.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:289) at org.wildfly.security.elytron-private@1.9.1.Final//org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:255) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:198) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:175) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.ModelControllerClientFactoryImpl$LocalClient.executeOperation(ModelControllerClientFactoryImpl.java:147) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.LocalModelControllerClient.execute(LocalModelControllerClient.java:54) at org.jboss.as.controller@9.0.2.Final//org.jboss.as.controller.LocalModelControllerClient.execute(LocalModelControllerClient.java:39) at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.MetricCollector.lambda$collectResourceMetrics0$0(MetricCollector.java:140) at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.PrometheusCollector.collect(PrometheusCollector.java:50) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.findNextElement(CollectorRegistry.java:183) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.(CollectorRegistry.java:147) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.(CollectorRegistry.java:168) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry.metricFamilySamples(CollectorRegistry.java:130) at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.MetricsContextService$1.handleRequest(MetricsContextService.java:100) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.security.RealmReadinessHandler.handleRequest(RealmReadinessHandler.java:51) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.security.ServerErrorReadinessHandler.handleRequest(ServerErrorReadinessHandler.java:35) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.ChannelUpgradeHandler.handleRequest(ChannelUpgradeHandler.java:211) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.cache.CacheHandler.handleRequest(CacheHandler.java:92) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.error.SimpleErrorPageHandler.handleRequest(SimpleErrorPageHandler.java:78) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.CanonicalPathHandler.handleRequest(CanonicalPathHandler.java:49) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.ManagementHttpRequestHandler.handleRequest(ManagementHttpRequestHandler.java:57) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.cors.CorsHttpHandler.handleRequest(CorsHttpHandler.java:75) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.ManagementHttpServer$UpgradeFixHandler.handleRequest(ManagementHttpServer.java:664) at io.undertow.core@2.0.21.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:364) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:255) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:59) at org.jboss.xnio@3.7.2.Final//org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) at org.jboss.xnio@3.7.2.Final//org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66) at org.jboss.xnio.nio@3.7.2.Final//org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89) at org.jboss.xnio.nio@3.7.2.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:591) 11:29:02,381 ERROR [io.undertow.request] (management I/O-1) UT005071: Undertow request failed HttpServerExchange{ GET /metrics}: java.lang.IllegalStateException: WFLYMETRICS0003: Unable to read attribute second-level-cache-hit-count on [ ("subsystem" => "jpa"), ("hibernate-persistence-unit" => "test-0.0.1-SNAPSHOT.war#my-persistence-unit"), ("entity-cache" => "test.MyEntity") ]: "WFLYCTL0158: Operation handler failed: java.lang.NullPointerException". at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.MetricCollector.lambda$collectResourceMetrics0$0(MetricCollector.java:143) at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.PrometheusCollector.collect(PrometheusCollector.java:50) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.findNextElement(CollectorRegistry.java:183) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.(CollectorRegistry.java:147) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.(CollectorRegistry.java:168) at io.prometheus.simpleclient//io.prometheus.client.CollectorRegistry.metricFamilySamples(CollectorRegistry.java:130) at org.wildfly.extension.microprofile.metrics-smallrye@17.0.1.Final//org.wildfly.extension.microprofile.metrics.MetricsContextService$1.handleRequest(MetricsContextService.java:100) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.security.RealmReadinessHandler.handleRequest(RealmReadinessHandler.java:51) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.security.ServerErrorReadinessHandler.handleRequest(ServerErrorReadinessHandler.java:35) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.ChannelUpgradeHandler.handleRequest(ChannelUpgradeHandler.java:211) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.cache.CacheHandler.handleRequest(CacheHandler.java:92) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.error.SimpleErrorPageHandler.handleRequest(SimpleErrorPageHandler.java:78) at io.undertow.core@2.0.21.Final//io.undertow.server.handlers.CanonicalPathHandler.handleRequest(CanonicalPathHandler.java:49) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.ManagementHttpRequestHandler.handleRequest(ManagementHttpRequestHandler.java:57) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.cors.CorsHttpHandler.handleRequest(CorsHttpHandler.java:75) at org.jboss.as.domain-http-interface@9.0.2.Final//org.jboss.as.domain.http.server.ManagementHttpServer$UpgradeFixHandler.handleRequest(ManagementHttpServer.java:664) at io.undertow.core@2.0.21.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:364) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEventWithNoRunningRequest(HttpReadListener.java:255) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:136) at io.undertow.core@2.0.21.Final//io.undertow.server.protocol.http.HttpReadListener.handleEvent(HttpReadListener.java:59) at org.jboss.xnio@3.7.2.Final//org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92) at org.jboss.xnio@3.7.2.Final//org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66) at org.jboss.xnio.nio@3.7.2.Final//org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89) at org.jboss.xnio.nio@3.7.2.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:591)
Is there a way to solve this problem without activating the hibernate query cache? Respectively is this property required to resolve metrics?
Using the following persistence.xml no error is thrown:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.2" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="my-persistence-unit"> <properties> <property name="hibernate.cache.use_query_cache" value="true" /> </properties> </persistence-unit> </persistence>
Hint: The error is also reproducible with WildFly 18.0.0.Beta1, which uses Hibernate 5.3.11.Final.