X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-bierman02%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Frestconf%2Fweb%2FBierman02WebRegistrarImpl.java;h=fb6f5bc821cb3a62dbf49bb4153095e8d4bdc481;hb=b382d3002f0b84ffdcde61de1ebae76f54f72a25;hp=034e26869fe9906535efa29e406a1d74ed22b767;hpb=5defe99f336b51d4e96473aff6de4b9e6af8cb34;p=netconf.git diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/web/Bierman02WebRegistrarImpl.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/web/Bierman02WebRegistrarImpl.java index 034e26869f..fb6f5bc821 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/web/Bierman02WebRegistrarImpl.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/web/Bierman02WebRegistrarImpl.java @@ -7,6 +7,7 @@ */ package org.opendaylight.netconf.sal.restconf.web; +import java.util.concurrent.atomic.AtomicBoolean; import javax.servlet.ServletException; import javax.ws.rs.core.Application; import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration; @@ -18,6 +19,9 @@ import org.opendaylight.aaa.web.WebContextBuilder; import org.opendaylight.aaa.web.WebContextRegistration; import org.opendaylight.aaa.web.WebContextSecurer; import org.opendaylight.aaa.web.WebServer; +import org.opendaylight.aaa.web.servlet.ServletSupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Implementation of Bierman02WebRegistrar. @@ -25,24 +29,31 @@ import org.opendaylight.aaa.web.WebServer; * @author Thomas Pantelis */ public class Bierman02WebRegistrarImpl implements Bierman02WebRegistrar { + private static final Logger LOG = LoggerFactory.getLogger(Bierman02WebRegistrarImpl.class); - private WebContextRegistration registraton; private final WebServer webServer; private final WebContextSecurer webContextSecurer; + private final ServletSupport servletSupport; private final Application webApp; private final CustomFilterAdapterConfiguration customFilterAdapterConfig; + private volatile WebContextRegistration registraton; + private final AtomicBoolean registered = new AtomicBoolean(false); public Bierman02WebRegistrarImpl(WebServer webServer, WebContextSecurer webContextSecurer, - Application webApp, CustomFilterAdapterConfiguration customFilterAdapterConfig) { + ServletSupport servletSupport, Application webApp, + CustomFilterAdapterConfiguration customFilterAdapterConfig) { this.webServer = webServer; this.webContextSecurer = webContextSecurer; + this.servletSupport = servletSupport; this.webApp = webApp; this.customFilterAdapterConfig = customFilterAdapterConfig; } public void close() { - if (registraton != null) { - registraton.close(); + if (registered.compareAndSet(true, false)) { + if (registraton != null) { + registraton.close(); + } } } @@ -57,9 +68,13 @@ public class Bierman02WebRegistrarImpl implements Bierman02WebRegistrar { } private void register(boolean authenticate) { + if (!registered.compareAndSet(false, true)) { + LOG.warn("Web context has already been registered", new Exception("call site")); + return; + } + WebContextBuilder webContextBuilder = WebContext.builder().contextPath("restconf").supportsSessions(true) - .addServlet(ServletDetails.builder().servlet( - new com.sun.jersey.spi.container.servlet.ServletContainer(webApp)) + .addServlet(ServletDetails.builder().servlet(servletSupport.createHttpServletBuilder(webApp).build()) .addUrlPattern("/*").build()) // Allows user to add javax.servlet.Filter(s) in front of REST services