package org.stagemonitor.web.init; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.stagemonitor.core.Stagemonitor; import org.stagemonitor.configuration.ConfigurationOptionProvider; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContainerInitializer; import javax.servlet.ServletContext; import javax.servlet.ServletException; public class ServletContainerInitializerUtil { private static final Logger logger = LoggerFactory.getLogger(ServletContainerInitializerUtil.class); public static void registerStagemonitorServletContainerInitializers(ServletContext servletContext) { for (ServletContainerInitializer sci : getStagemonitorSCIs()) { try { sci.onStartup(null, servletContext); } catch (ServletException e) { logger.warn("Ignored exception:", e); } } } private static List<ServletContainerInitializer> getStagemonitorSCIs() { List<ServletContainerInitializer> sciPlugins = new ArrayList<ServletContainerInitializer>(); for (ConfigurationOptionProvider plugin : Stagemonitor.getConfiguration().getConfigurationOptionProviders()) { if (plugin instanceof ServletContainerInitializer) { sciPlugins.add((ServletContainerInitializer) plugin); } } return sciPlugins; } public static boolean avoidDoubleInit(ServletContainerInitializer sci, ServletContext ctx) { final String initializedAttribute = sci.getClass().getName() + ".initialized"; if (ctx.getAttribute(initializedAttribute) != null) { // already initialized return true; } ctx.setAttribute(initializedAttribute, true); return false; } }