remove mutable field from servlet, use servletcontext attribute instead of field instance

This commit is contained in:
Sebastian Sdorra
2019-06-26 14:46:14 +02:00
parent 82a228ebac
commit 572caedd73

View File

@@ -28,7 +28,6 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher {
private static final Logger LOG = LoggerFactory.getLogger(ResteasyAllInOneServletDispatcher.class); private static final Logger LOG = LoggerFactory.getLogger(ResteasyAllInOneServletDispatcher.class);
private final Injector injector; private final Injector injector;
private ResteasyDeployment deployment;
@Inject @Inject
public ResteasyAllInOneServletDispatcher(Injector injector) { public ResteasyAllInOneServletDispatcher(Injector injector) {
@@ -40,23 +39,24 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher {
LOG.info("init resteasy"); LOG.info("init resteasy");
ServletContext servletContext = servletConfig.getServletContext(); ServletContext servletContext = servletConfig.getServletContext();
createDeployment(servletContext); ResteasyDeployment deployment = createDeployment(servletContext);
ModuleProcessor processor = createModuleProcessor(); ModuleProcessor processor = createModuleProcessor(deployment);
processor.processInjector(injector); processor.processInjector(injector);
super.init(servletConfig); super.init(servletConfig);
} }
private void createDeployment(ServletContext servletContext) { private ResteasyDeployment createDeployment(ServletContext servletContext) {
ListenerBootstrap config = new ListenerBootstrap(servletContext); ListenerBootstrap config = new ListenerBootstrap(servletContext);
deployment = config.createDeployment(); ResteasyDeployment deployment = config.createDeployment();
deployment.start(); deployment.start();
servletContext.setAttribute(ResteasyDeployment.class.getName(), deployment); servletContext.setAttribute(ResteasyDeployment.class.getName(), deployment);
return deployment;
} }
private ModuleProcessor createModuleProcessor() { private ModuleProcessor createModuleProcessor(ResteasyDeployment deployment) {
Registry registry = deployment.getRegistry(); Registry registry = deployment.getRegistry();
ResteasyProviderFactory providerFactory = deployment.getProviderFactory(); ResteasyProviderFactory providerFactory = deployment.getProviderFactory();
return new ModuleProcessor(registry, providerFactory); return new ModuleProcessor(registry, providerFactory);
@@ -65,6 +65,8 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher {
@Override @Override
public void destroy() { public void destroy() {
LOG.info("destroy resteasy"); LOG.info("destroy resteasy");
ResteasyDeployment deployment = getDeploymentFromServletContext();
super.destroy(); super.destroy();
deployment.stop(); deployment.stop();
@@ -73,4 +75,8 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher {
ResteasyProviderFactory.clearContextData(); ResteasyProviderFactory.clearContextData();
RuntimeDelegate.setInstance(null); RuntimeDelegate.setInstance(null);
} }
private ResteasyDeployment getDeploymentFromServletContext() {
return (ResteasyDeployment) getServletContext().getAttribute(ResteasyDeployment.class.getName());
}
} }