]
Dan Berindei updated ISPN-9561:
-------------------------------
Summary: GlobalConfiguration should keep strong reference to classloader (was:
GlobalConfiguration classloader reference should be strong)
GlobalConfiguration should keep strong reference to classloader
---------------------------------------------------------------
Key: ISPN-9561
URL:
https://issues.jboss.org/browse/ISPN-9561
Project: Infinispan
Issue Type: Bug
Components: Core
Affects Versions: 9.4.0.CR3
Reporter: Dan Berindei
Assignee: Dan Berindei
Fix For: 9.4.0.Final
{{GlobalConfiguration}} uses a {{WeakReference}} to store its classloader, in order to
allow {{JCachingProvider}} to use a {{WeakHashMap<ClassLoader,
DefaultCacheManager>}}.
The weak reference works fine when the classloader is the application classloader, but if
the application (or the server, in our case) creates a {{ClassLoader}} instance just for
the Infinispan configuration, that classloader can be garbage collected while the cache
manager is starting. That is exactly what happens during server startup sometimes, making
{{GlobalComponentRegistry}} use the TCCL for module initialization and ignoring all the
non-core modules.
We can still use a {{WeakClassLoader}} adapter that wraps a
{{WeakReference<ClassLoader>}} for {{JCachingProvider}}.