clear ResteasyProviderFactory and RuntimeDelegate during restart

This change is required, because some cachings of resteasy are not cleared by removing them from ServletContext.
Some classes use static or ThreadLocals, which are causing a ClassLoader leak.
However this change will clear those caches.
This commit is contained in:
Sebastian Sdorra
2019-06-05 16:09:01 +02:00
parent 1d7f982951
commit 73dc0d0544

View File

@@ -1,10 +1,12 @@
package sonia.scm.boot;
import com.google.common.collect.ImmutableSet;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletContext;
import javax.ws.rs.ext.RuntimeDelegate;
import java.util.Enumeration;
import java.util.Set;
@@ -46,6 +48,10 @@ final class ServletContextCleaner {
LOG.info("keep attribute {} in servlet context", name);
}
}
ResteasyProviderFactory.clearInstanceIfEqual(ResteasyProviderFactory.getInstance());
ResteasyProviderFactory.clearContextData();
RuntimeDelegate.setInstance(null);
}
private static boolean shouldRemove(String name) {