Repository navigation
Closed
Labels
Status: AcceptedConfirmed defect or accepted improvement to implement, issue has been escalated to Platform DevConfirmed defect or accepted improvement to implement, issue has been escalated to Platform DevType: BugLabel issue as a bug defectLabel issue as a bug defect
Description
Brief Summary
ClassLoaderUtil.releaseLoader() uses internal JDK API that fails under JDK 27, causing NPE, which, in turn,
causes ClassLoader, file and other leaks.
PR is coming. There has been a JDK URLClassPath.close() since JDK 7, and it can be used instead of the internal API.
Initial Payara / GlassFish implementation was written prior to JDK 7, and this is why this API was never used.
Expected Outcome
No warnings and no leaks present
Current Outcome
[2026-09-29T14:16:45.716-0500] [Payara 7.2026.9] [WARNING] [] [javax.enterprise.system.util.com.sun.appserv] [tid: _ThreadID=140 _ThreadName=admin-thread-pool::admin-listener(1)] [timeMillis: 1790709405716] [levelValue: 900] [[
classloaderutil.errorReleasingLoader
java.lang.NullPointerException: Cannot invoke "java.util.ResourceBundle.getString(String)" because the return value of "java.util.logging.Logger.getResourceBundle()" is null
at com.sun.appserv.ClassLoaderUtil.getMessage(ClassLoaderUtil.java:346)
at com.sun.appserv.ClassLoaderUtil.getField(ClassLoaderUtil.java:304)
at com.sun.appserv.ClassLoaderUtil.initForClosingJars(ClassLoaderUtil.java:284)
at com.sun.appserv.ClassLoaderUtil.init(ClassLoaderUtil.java:261)
at com.sun.appserv.ClassLoaderUtil.releaseLoader(ClassLoaderUtil.java:137)
at com.sun.appserv.ClassLoaderUtil.releaseLoader(ClassLoaderUtil.java:109)
at org.glassfish.web.loader.WebappClassLoader.stop(WebappClassLoader.java:2042)
at org.glassfish.web.loader.WebappClassLoader.preDestroy(WebappClassLoader.java:2007)
at org.jvnet.hk2.internal.ServiceLocatorImpl.preDestroy(ServiceLocatorImpl.java:1080)
at org.jvnet.hk2.internal.ServiceLocatorImpl.preDestroy(ServiceLocatorImpl.java:1064)
at org.glassfish.internal.data.ApplicationInfo.clean(ApplicationInfo.java:490)
at com.sun.enterprise.v3.server.ApplicationLifecycle.unload(ApplicationLifecycle.java:1341)
at com.sun.enterprise.v3.server.ApplicationLifecycle.undeploy(ApplicationLifecycle.java:1369)
at org.glassfish.deployment.admin.UndeployCommand.execute(UndeployCommand.java:434)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:558)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:554)
at java.base/jdk.internal.vm.ScopedValueContainer.callWithoutScope(ScopedValueContainer.java:162)
at java.base/jdk.internal.vm.ScopedValueContainer.call(ScopedValueContainer.java:147)
at java.base/java.lang.ScopedValue$Carrier.call(ScopedValue.java:424)
at java.base/javax.security.auth.Subject.callAs(Subject.java:331)
at java.base/javax.security.auth.Subject.doAs(Subject.java:379)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:553)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:584)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:576)
at java.base/jdk.internal.vm.ScopedValueContainer.callWithoutScope(ScopedValueContainer.java:162)
at java.base/jdk.internal.vm.ScopedValueContainer.call(ScopedValueContainer.java:147)
at java.base/java.lang.ScopedValue$Carrier.call(ScopedValue.java:424)
at java.base/javax.security.auth.Subject.callAs(Subject.java:331)
at java.base/javax.security.auth.Subject.doAs(Subject.java:379)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:575)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1496)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1878)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1754)
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.utils.ResourceUtil.runCommand(ResourceUtil.java:294)
at org.glassfish.admin.rest.resources.TemplateRestResource.runCommand(TemplateRestResource.java:570)
at org.glassfish.admin.rest.resources.TemplateRestResource.doDelete(TemplateRestResource.java:307)
at org.glassfish.admin.rest.resources.TemplateRestResource.delete(TemplateRestResource.java:190)
at org.glassfish.admin.rest.resources.TemplateRestResource.doCreateOrUpdate(TemplateRestResource.java:239)
at org.glassfish.admin.rest.resources.TemplateRestResource.createOrUpdateEntityLegacyFormat(TemplateRestResource.java:153)
at org.glassfish.admin.rest.resources.TemplateRestResource.postLegacyFormat(TemplateRestResource.java:178)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:583)
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:146)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ObjectOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:192)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:470)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:394)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:274)
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:266)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:253)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:374)
at org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:340)
at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:191)
at org.glassfish.admin.rest.adapter.RestManagementAdapter.service(RestManagementAdapter.java:66)
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:174)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:202)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:89)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:513)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:540)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:520)
at java.base/java.lang.Thread.run(Thread.java:1527)
]]
Reproducer
N/A
Operating System
Any
JDK Version
Zulu 27
Payara Distribution
Payara Server Full Profile
Metadata
Metadata
Assignees
Labels
Status: AcceptedConfirmed defect or accepted improvement to implement, issue has been escalated to Platform DevConfirmed defect or accepted improvement to implement, issue has been escalated to Platform DevType: BugLabel issue as a bug defectLabel issue as a bug defect
Activity
Pandrex247 commentedon Oct 6, 2026
FISH-14827 raised