/** * Copyright (C) 2015 Bonitasoft S.A. * Bonitasoft, 32 rue Gustave Eiffel - 38000 Grenoble * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.web.designer; import java.io.IOException; import java.util.Properties; import javax.servlet.MultipartConfigElement; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.context.support.HttpRequestHandlerServlet; import org.springframework.web.servlet.DispatcherServlet; /** * Spring WebApplicationInitializer implementation initializes Spring context by * adding a Spring ContextLoaderListener to the ServletContext. */ public class SpringWebApplicationInitializer implements WebApplicationInitializer { private static final String[] BANNER = { "", "d8888b. .d88b. d8b db d888888b d888888b .d8b. .d8888. .d88b. d88888b d888888b", "88 `8D .8P Y8. 888o 88 `88' `~~88~~' d8' `8b 88' YP .8P Y8. 88' `~~88~~'", "88oooY' 88 88 88V8o 88 88 88 88ooo88 `8bo. 88 88 88ooo 88 ", "88~~~b. 88 88 88 V8o88 88 88 88~~~88 `Y8b. 88 88 88~~~ 88 ", "88 8D `8b d8' 88 V888 .88. 88 88 88 db 8D `8b d8' 88 88 ", "Y8888P' `Y88P' VP V8P Y888888P YP YP YP `8888Y' `Y88P' YP YP " }; private static final Logger logger = LoggerFactory.getLogger(SpringWebApplicationInitializer.class); private static Properties prop = new Properties(); //This bloc static is executed before the Spring configuration loading static { //We can't use Spring to load the property file because we are before the context initialization try { prop.load(SpringWebApplicationInitializer.class.getClassLoader().getResourceAsStream("application.properties")); } catch (IOException e) { throw new RuntimeException("Error on test environment initialization"); } } @Override public void onStartup(ServletContext servletContext) throws ServletException { for (String line : BANNER) { logger.info(line); } logger.info(Strings.repeat("=", 100)); logger.info(String.format("UI-DESIGNER : %s edition v.%s", prop.getProperty("designer.edition"), prop.getProperty("designer.version"))); logger.info(Strings.repeat("=", 100)); // Create the root context Spring AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(new Class<?>[] { ApplicationConfig.class }); // Manage the lifecycle of the root application context servletContext.addListener(new ContextLoaderListener(rootContext)); // Register and map the dispatcher servlet ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext)); dispatcher.setLoadOnStartup(1); dispatcher.setMultipartConfig(new MultipartConfigElement(System.getProperty("java.io.tmpdir"))); dispatcher.setAsyncSupported(true); dispatcher.addMapping("/"); } }