Keep CracResourceAdapter strongly reachable

See gh-30242
This commit is contained in:
Juergen Hoeller 2023-05-03 17:50:36 +02:00
parent 8d604350e4
commit c76116b970
1 changed files with 10 additions and 7 deletions

View File

@ -60,9 +60,6 @@ import org.springframework.util.ClassUtils;
*/ */
public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactoryAware { public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactoryAware {
private static final boolean cracPresent =
ClassUtils.isPresent("org.crac.Core", DefaultLifecycleProcessor.class.getClassLoader());
private final Log logger = LogFactory.getLog(getClass()); private final Log logger = LogFactory.getLog(getClass());
private volatile long timeoutPerShutdownPhase = 30000; private volatile long timeoutPerShutdownPhase = 30000;
@ -75,10 +72,14 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor
@Nullable @Nullable
private volatile Set<String> stoppedBeans; private volatile Set<String> stoppedBeans;
// Just for keeping a strong reference to the registered CRaC Resource, if any
@Nullable
private Object cracResource;
public DefaultLifecycleProcessor() { public DefaultLifecycleProcessor() {
if (cracPresent) { if (ClassUtils.isPresent("org.crac.Core", getClass().getClassLoader())) {
new CracDelegate().registerResource(); this.cracResource = new CracDelegate().registerResource();
} }
} }
@ -452,9 +453,11 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor
*/ */
private class CracDelegate { private class CracDelegate {
public void registerResource() { public Object registerResource() {
logger.debug("Registering JVM snapshot callback for Spring-managed lifecycle beans"); logger.debug("Registering JVM snapshot callback for Spring-managed lifecycle beans");
org.crac.Core.getGlobalContext().register(new CracResourceAdapter()); CracResourceAdapter resourceAdapter = new CracResourceAdapter();
org.crac.Core.getGlobalContext().register(resourceAdapter);
return resourceAdapter;
} }
} }