Bug Report: Gmbal registration failed java.lang.IllegalStateException: Cannot modify frozen instance for com.sun.gjc.monitoring.JdbcStatsProvider/FISH-7299
Brief Summary
Enable JDBC monitoring configuration, enable AMX service, ping two Connection pool, and report an error in the background when pinging the second Connection pool。
Expected Outcome
No error message when pinging the second Connection pool
Current Outcome
server.log with the following message:
2023-04-03T09:25:07.389+0800] [Payara 5.2022.5] [SERVER] [NCLS-MNTG-00205] [javax.enterprise.monitoring] [tid: _ThreadID=210 _ThreadName=admin-thread-pool::admin-listener(4)] [timeMillis: 1680485107389] [levelValue: 1000] [[ Gmbal registration failed java.lang.IllegalStateException: Cannot modify frozen instance for com.sun.gjc.monitoring.JdbcStatsProvider at org.glassfish.gmbal.typelib.DeclarationFactory$EvaluatedClassDeclarationImpl.checkFrozen(DeclarationFactory.java:324) at org.glassfish.gmbal.typelib.DeclarationFactory$EvaluatedClassDeclarationImpl.inheritance(DeclarationFactory.java:334) at org.glassfish.gmbal.typelib.TypeEvaluator$TypeEvaluationVisitor.processClass(TypeEvaluator.java:699) at org.glassfish.gmbal.typelib.TypeEvaluator$TypeEvaluationVisitor.getCorrectDeclaration(TypeEvaluator.java:668) at org.glassfish.gmbal.typelib.TypeEvaluator$TypeEvaluationVisitor.visitClassDeclaration(TypeEvaluator.java:445) at org.glassfish.gmbal.typelib.TypeEvaluator$TypeEvaluationVisitor.evaluateType(TypeEvaluator.java:391) at org.glassfish.gmbal.typelib.TypeEvaluator.getEvaluatedType(TypeEvaluator.java:285) at org.glassfish.gmbal.impl.ManagedObjectManagerImpl.isManagedObject(ManagedObjectManagerImpl.java:599) at org.glassfish.admin.monitor.StatsProviderManagerDelegateImpl.registerGmbal(StatsProviderManagerDelegateImpl.java:750) at org.glassfish.admin.monitor.StatsProviderManagerDelegateImpl.enableStatsProvider(StatsProviderManagerDelegateImpl.java:441) at org.glassfish.admin.monitor.StatsProviderManagerDelegateImpl.tryToRegister(StatsProviderManagerDelegateImpl.java:185) at org.glassfish.admin.monitor.StatsProviderManagerDelegateImpl.register(StatsProviderManagerDelegateImpl.java:144) at org.glassfish.external.probe.provider.StatsProviderManager.registerStatsProvider(StatsProviderManager.java:91) at org.glassfish.external.probe.provider.StatsProviderManager.register(StatsProviderManager.java:66) at org.glassfish.external.probe.provider.StatsProviderManager.register(StatsProviderManager.java:57) at com.sun.gjc.spi.ManagedConnectionFactoryImpl.mcfCreated(ManagedConnectionFactoryImpl.java:1504) at com.sun.enterprise.resource.pool.PoolManagerImpl.createEmptyConnectionPool(PoolManagerImpl.java:132) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.createAndAddPool(ConnectorConnectionPoolAdminServiceImpl.java:1087) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.obtainManagedConnectionFactory(ConnectorConnectionPoolAdminServiceImpl.java:1017) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.obtainManagedConnectionFactory(ConnectorConnectionPoolAdminServiceImpl.java:911) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.createManagedConnectionFactory(ConnectorConnectionPoolAdminServiceImpl.java:918) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.createConnectorConnectionPool(ConnectorConnectionPoolAdminServiceImpl.java:191) at com.sun.enterprise.connectors.ConnectorRuntime.createConnectorConnectionPool(ConnectorRuntime.java:333) at org.glassfish.jdbc.deployer.JdbcConnectionPoolDeployer.actualDeployResource(JdbcConnectionPoolDeployer.java:201) at org.glassfish.jdbc.deployer.JdbcConnectionPoolDeployer.deployResource(JdbcConnectionPoolDeployer.java:170) at com.sun.enterprise.connectors.service.ConnectorService.loadDeferredResources(ConnectorService.java:233) at com.sun.enterprise.connectors.service.ConnectorService$1.run(ConnectorService.java:153) at java.security.AccessController.doPrivileged(Native Method) at com.sun.enterprise.connectors.service.ConnectorService.loadResourcesAndItsRar(ConnectorService.java:150) at com.sun.enterprise.connectors.service.ConnectorService.checkAndLoadPool(ConnectorService.java:325) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.getUnpooledConnection(ConnectorConnectionPoolAdminServiceImpl.java:553) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.testConnectionPool(ConnectorConnectionPoolAdminServiceImpl.java:430) at com.sun.enterprise.connectors.ConnectorRuntime.pingConnectionPool(ConnectorRuntime.java:1164) at org.glassfish.connectors.admin.cli.PingConnectionPool.execute(PingConnectionPool.java:145) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:360) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:360) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:120) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755) at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:272) at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:240) at org.glassfish.admin.rest.resources.TemplateExecCommand.executeCommandLegacyFormat(TemplateExecCommand.java:156) at org.glassfish.admin.rest.resources.TemplateCommandGetResource.processGetLegacyFormat(TemplateCommandGetResource.java:76) at sun.reflect.GeneratedMethodAccessor343.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) at org.glassfish.jersey.internal.Errors.process(Errors.java:292) at org.glassfish.jersey.internal.Errors.process(Errors.java:274) at org.glassfish.jersey.internal.Errors.process(Errors.java:244) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680) at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:356) at org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:335) at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:189) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549) at java.lang.Thread.run(Thread.java:748)
Reproducer
- Jdbc Connection Pool monitoring levlel is HIGH
domain.xml
- enable AMX Configuration
- ping JDBC Connection Pools H2Pool
- ping JDBC Connection Pools __TimerPool
Operating System
Windows 10
JDK Version
1.8.0_341
Payara Distribution
Payara Server Full Profile
Hello @wangjinwer,
Thank you very much for reporting this issue! I can confirm that the issue occurs in Payara 5.2022.5 with JDK 8 and Payara Community 6.2023.3 with JDK 11. The issue does not occur pinging regular JDBC connection pools, but specifically the _TimerPool connection pool. I have raised an internal issue 'FISH-7299' and our team is going to pick up the issue when possible.
This problem also exists in the regular Connection pool
Could you please explain how to reproduce it with normal JDBC Connection Pools? I tested using a normal JDBC Connection Pool for a MySQL database, and I tried pinging between H2 and MySQLPool, but did not manage to find the same behaviour that happens after pinging _TimerPool, which leads to the errors that you described above.
any news on this topic?