diff --git a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java index 874052442d..cc58d34ef3 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmContextListener.java @@ -75,7 +75,7 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList * the logger for ScmContextListener */ private static final Logger LOG = LoggerFactory.getLogger(ScmContextListener.class); - + private final ClassLoader parent; private final Set plugins; private Injector injector; @@ -101,23 +101,16 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList super.contextInitialized(servletContextEvent); afterInjectorCreation(servletContextEvent); } - + private void beforeInjectorCreation() { } private boolean hasStartupErrors() { return SCMContext.getContext().getStartupError() != null; } - + @Override protected List getModules(ServletContext context) { - if (hasStartupErrors()) { - return getErrorModules(); - } - return getDefaultModules(context); - } - - private List getDefaultModules(ServletContext context) { DefaultPluginLoader pluginLoader = new DefaultPluginLoader(context, parent, plugins); ClassOverrides overrides = ClassOverrides.findOverrides(pluginLoader.getUberClassLoader()); @@ -132,15 +125,15 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList ); appendModules(pluginLoader.getExtensionProcessor(), moduleList); moduleList.addAll(overrides.getModules()); - + if (SCMContext.getContext().getStage() == Stage.DEVELOPMENT){ moduleList.add(new DebugModule()); } moduleList.add(new MapperModule()); - return moduleList; + return moduleList; } - + private void appendModules(ExtensionProcessor ep, List moduleList) { for (Class module : ep.byExtensionPoint(Module.class)) { try { @@ -151,31 +144,27 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList } } } - - private List getErrorModules() { - return Collections.singletonList(new ScmErrorModule()); - } @Override protected void withInjector(Injector injector) { this.injector = injector; } - + private void afterInjectorCreation(ServletContextEvent event) { if (injector != null && !hasStartupErrors()) { bindEagerSingletons(); initializeServletContextListeners(event); - } + } } - + private void bindEagerSingletons() { injector.getInstance(EagerSingletonModule.class).initialize(injector); } - + private void initializeServletContextListeners(ServletContextEvent event) { injector.getInstance(ServletContextListenerHolder.class).contextInitialized(event); } - + @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { @@ -198,7 +187,7 @@ public class ScmContextListener extends GuiceResteasyBootstrapServletContextList } } } - + private void closeCloseables() { // close Scheduler IOUtil.close(injector.getInstance(Scheduler.class)); diff --git a/scm-webapp/src/main/java/sonia/scm/ScmErrorModule.java b/scm-webapp/src/main/java/sonia/scm/ScmErrorModule.java deleted file mode 100644 index 56ae8527f2..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/ScmErrorModule.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.inject.multibindings.Multibinder; -import com.google.inject.servlet.ServletModule; - -import sonia.scm.template.ErrorServlet; -import sonia.scm.template.MustacheTemplateEngine; -import sonia.scm.template.TemplateEngine; -import sonia.scm.template.TemplateEngineFactory; - -/** - * - * @author Sebastian Sdorra - */ -public class ScmErrorModule extends ServletModule -{ - - /** - * Method description - * - */ - @Override - protected void configureServlets() - { - SCMContextProvider context = SCMContext.getContext(); - - bind(SCMContextProvider.class).toInstance(context); - - Multibinder engineBinder = - Multibinder.newSetBinder(binder(), TemplateEngine.class); - - engineBinder.addBinding().to(MustacheTemplateEngine.class); - bind(TemplateEngine.class).annotatedWith(Default.class).to( - MustacheTemplateEngine.class); - bind(TemplateEngineFactory.class); - - serve(ScmServletModule.PATTERN_ALL).with(ErrorServlet.class); - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java b/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java deleted file mode 100644 index 4d62b823a1..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.template; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.common.base.Throwables; -import com.google.inject.Inject; -import com.google.inject.Singleton; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.SCMContextProvider; -import sonia.scm.util.IOUtil; -import sonia.scm.util.Util; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.PrintWriter; - -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class ErrorServlet extends HttpServlet -{ - - /** Field description */ - private static final String TEMPALTE = "/error.mustache"; - - /** Field description */ - private static final long serialVersionUID = -3289076078469757874L; - - /** - * the logger for ErrorServlet - */ - private static final Logger logger = - LoggerFactory.getLogger(ErrorServlet.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param context - * @param templateEngineFactory - */ - @Inject - public ErrorServlet(SCMContextProvider context, - TemplateEngineFactory templateEngineFactory) - { - this.context = context; - this.templateEngineFactory = templateEngineFactory; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * @param response - * - * @throws IOException - * @throws ServletException - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - /** - * Method description - * - * - * @param request - * @param response - * - * @throws IOException - * @throws ServletException - */ - @Override - protected void doPost(HttpServletRequest request, - HttpServletResponse response) - throws ServletException, IOException - { - processRequest(request, response); - } - - /** - * Method description - * - * - * @param request - * @param response - * - * @throws IOException - * @throws ServletException - */ - private void processRequest(HttpServletRequest request, - HttpServletResponse response) - throws ServletException, IOException - { - PrintWriter writer = null; - - try - { - writer = response.getWriter(); - - Map env = new HashMap(); - String error = Util.EMPTY_STRING; - - if (context.getStartupError() != null) - { - error = Throwables.getStackTraceAsString(context.getStartupError()); - } - - env.put("error", error); - - TemplateEngine engine = templateEngineFactory.getDefaultEngine(); - Template template = engine.getTemplate(TEMPALTE); - - if (template != null) - { - template.execute(writer, env); - } - else if (logger.isWarnEnabled()) - { - logger.warn("could not find template {}", TEMPALTE); - } - } - finally - { - IOUtil.close(writer); - } - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final SCMContextProvider context; - - /** Field description */ - private final TemplateEngineFactory templateEngineFactory; -}