From 73dc0d0544a8d74bc87b8731ef078920d31aa722 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 5 Jun 2019 16:09:01 +0200 Subject: [PATCH] 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. --- .../src/main/java/sonia/scm/boot/ServletContextCleaner.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java b/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java index 8b152ce329..085b752096 100644 --- a/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java +++ b/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java @@ -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) {