Uploaded image for project: 'JGroups'
  1. JGroups
  2. JGRP-2868

Util#loadClass throw NPE when getContextClassLoader is null

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 5.3.16, 5.4.6
    • 5.3.15, 5.4.5
    • None

      A Keycloak user encountered the following issue on startup:

      2025-03-20 18:19:09,919 ERROR [org.infinispan.CONFIG] (ForkJoinPool.commonPool-worker-1) ISPN000660: DefaultCacheManager start failed, stopping any running components: org.infinispan.commons.CacheConfigurationException: ISPN000659: Component ComponentWrapper{name=org.infinispan.remoting.transport.Transport, instance=org.infinispan.remoting.transport.jgroups.JGroupsTransport@a30d5ae, status=FAILED} failed to start
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:584)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.startDependencies(BasicComponentRegistryImpl.java:634)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:598)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807)
      	at org.infinispan.factories.GlobalComponentRegistry.preStart(GlobalComponentRegistry.java:307)
      	at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:241)
      	at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:778)
      	at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:746)
      	at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:412)
      	at org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory.startEmbeddedCacheManager(CacheManagerFactory.java:366)
      	at org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory.lambda$new$0(CacheManagerFactory.java:123)
      	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
      	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
      	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
      	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
      	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
      	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
      	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
      Caused by: java.lang.ExceptionInInitializerError
      	at org.jgroups.util.Util.virtualThreadsAvailable(Util.java:213)
      	at org.jgroups.protocols.TP.init(TP.java:729)
      	at org.jgroups.protocols.BasicTCP.init(BasicTCP.java:130)
      	at org.jgroups.stack.ProtocolStack.initProtocolStack(ProtocolStack.java:807)
      	at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:443)
      	at org.jgroups.JChannel.init(JChannel.java:916)
      	at org.jgroups.JChannel.<init>(JChannel.java:128)
      	at org.infinispan.remoting.transport.jgroups.FileJGroupsChannelConfigurator.createChannel(FileJGroupsChannelConfigurator.java:49)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.channelFromConfigurator(JGroupsTransport.java:747)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:714)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannel(JGroupsTransport.java:467)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:451)
      	at org.infinispan.remoting.transport.jgroups.CorePackageImpl$2.start(CorePackageImpl.java:65)
      	at org.infinispan.remoting.transport.jgroups.CorePackageImpl$2.start(CorePackageImpl.java:50)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607)
      	at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576)
      	... 19 more
      Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.ClassLoader.loadClass(String)" because "loader" is null
      	at org.jgroups.util.Util.loadClass(Util.java:3333)
      	at org.jgroups.util.Util.loadClass(Util.java:3315)
      	at org.jgroups.util.ThreadCreator.getOfVirtualClass(ThreadCreator.java:64)
      	at org.jgroups.util.ThreadCreator.<clinit>(ThreadCreator.java:28)
      	... 36 more
      

      The issue is that the current code does not take into account that Thread.currentThread().getContextClassLoader() can return null.

              rhn-engineering-bban Bela Ban
              remerson@redhat.com Ryan Emerson
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: