diff --git a/scm-webapp/src/main/java/sonia/scm/ResteasyAllInOneServletDispatcher.java b/scm-webapp/src/main/java/sonia/scm/ResteasyAllInOneServletDispatcher.java index 6ea514bcb2..25345da04c 100644 --- a/scm-webapp/src/main/java/sonia/scm/ResteasyAllInOneServletDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/ResteasyAllInOneServletDispatcher.java @@ -15,6 +15,7 @@ import javax.inject.Singleton; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.ws.rs.ext.RuntimeDelegate; /** * Resteasy initialization and dispatching. This servlet combines the initialization of @@ -66,5 +67,10 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { LOG.info("destroy resteasy"); super.destroy(); deployment.stop(); + + // ensure everything gets cleared, to avoid classloader leaks + ResteasyProviderFactory.clearInstanceIfEqual(ResteasyProviderFactory.getInstance()); + ResteasyProviderFactory.clearContextData(); + RuntimeDelegate.setInstance(null); } } 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 085b752096..baf5199304 100644 --- a/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java +++ b/scm-webapp/src/main/java/sonia/scm/boot/ServletContextCleaner.java @@ -49,9 +49,7 @@ final class ServletContextCleaner { } } - ResteasyProviderFactory.clearInstanceIfEqual(ResteasyProviderFactory.getInstance()); - ResteasyProviderFactory.clearContextData(); - RuntimeDelegate.setInstance(null); + } private static boolean shouldRemove(String name) {