From 572caedd730f6e52314128a469f05b0d10a007db Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 26 Jun 2019 14:46:14 +0200 Subject: [PATCH] remove mutable field from servlet, use servletcontext attribute instead of field instance --- .../ResteasyAllInOneServletDispatcher.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java index 6196fd7065..a30cb20c01 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java @@ -28,7 +28,6 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { private static final Logger LOG = LoggerFactory.getLogger(ResteasyAllInOneServletDispatcher.class); private final Injector injector; - private ResteasyDeployment deployment; @Inject public ResteasyAllInOneServletDispatcher(Injector injector) { @@ -40,23 +39,24 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { LOG.info("init resteasy"); ServletContext servletContext = servletConfig.getServletContext(); - createDeployment(servletContext); + ResteasyDeployment deployment = createDeployment(servletContext); - ModuleProcessor processor = createModuleProcessor(); + ModuleProcessor processor = createModuleProcessor(deployment); processor.processInjector(injector); super.init(servletConfig); } - private void createDeployment(ServletContext servletContext) { + private ResteasyDeployment createDeployment(ServletContext servletContext) { ListenerBootstrap config = new ListenerBootstrap(servletContext); - deployment = config.createDeployment(); + ResteasyDeployment deployment = config.createDeployment(); deployment.start(); servletContext.setAttribute(ResteasyDeployment.class.getName(), deployment); + return deployment; } - private ModuleProcessor createModuleProcessor() { + private ModuleProcessor createModuleProcessor(ResteasyDeployment deployment) { Registry registry = deployment.getRegistry(); ResteasyProviderFactory providerFactory = deployment.getProviderFactory(); return new ModuleProcessor(registry, providerFactory); @@ -65,6 +65,8 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { @Override public void destroy() { LOG.info("destroy resteasy"); + ResteasyDeployment deployment = getDeploymentFromServletContext(); + super.destroy(); deployment.stop(); @@ -73,4 +75,8 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { ResteasyProviderFactory.clearContextData(); RuntimeDelegate.setInstance(null); } + + private ResteasyDeployment getDeploymentFromServletContext() { + return (ResteasyDeployment) getServletContext().getAttribute(ResteasyDeployment.class.getName()); + } }