*/
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;
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.
* @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,
ServletSupport servletSupport, Application webApp,
}
public void close() {
- if (registraton != null) {
- registraton.close();
+ if (registered.compareAndSet(true, false)) {
+ if (registraton != null) {
+ registraton.close();
+ }
}
}
}
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(servletSupport.createHttpServletBuilder(webApp).build())
.addUrlPattern("/*").build())