title: Tomcat 7 hangs on Initializing Spring root WebApplicationContext
body: <p>I am trying to deploy a Spring web application to Tomcat 7.0.24 but it hangs upon startup with the last lines showing as</p>
  
  <pre><code>INFO: Deploying web application archive /usr/local/apps/tomcat-7.0.42/webapps/server-webapp.war
  Apr 4, 2014 1:38:28 PM org.apache.catalina.core.ApplicationContext log
  INFO: Spring WebApplicationInitializers detected on classpath: [com.verical.marketplace.init.MarketplaceWebAppInitializer@6a05fdf]
  Apr 4, 2014 1:38:30 PM org.apache.catalina.core.ApplicationContext log
  INFO: Initializing Spring root WebApplicationContext
  </code></pre>
  
  <p>I recently upgraded to Spring 4.0.2 and am using a customer WebApplicationInitializer via annotations.  Before the upgrade I was using Spring 3 with pure XML config and it worked just fine.  My web.xml file looks like this:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
  &lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://java.sun.com/xml/ns/javaee
       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
       http://java.sun.com/xml/ns/javaee/web-common_3_0.xsd"
       version="3.0"&gt;
  
  &lt;!-- Define the mime mappings --&gt;
  &lt;mime-mapping&gt;
      &lt;extension&gt;xsd&lt;/extension&gt;
      &lt;mime-type&gt;text/xml&lt;/mime-type&gt;
  &lt;/mime-mapping&gt;
  
  &lt;!-- Define the welcome file list --&gt;
  &lt;welcome-file-list&gt;
      &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;
  
  &lt;!-- Define the default session timeout value --&gt;
  &lt;session-config&gt;
      &lt;session-timeout&gt;240&lt;/session-timeout&gt;
      &lt;cookie-config&gt;
          &lt;http-only&gt;true&lt;/http-only&gt;
          &lt;secure&gt;true&lt;/secure&gt;
      &lt;/cookie-config&gt;
  &lt;/session-config&gt;
  </code></pre>
  
  <p></p>
  
  <p>Here is my web application initializer:</p>
  
  <pre><code>public class MarketplaceWebAppInitializer implements WebApplicationInitializer
  {
    @Override
    public void onStartup(ServletContext container)
    {
      // Instantiate a new web application context
      XmlWebApplicationContext rootContext = new MarketplaceXmlWebApplicationContext(container);
  
      // Add the various listeners
      container.addListener(new ContextLoaderListener(rootContext));
      container.addListener(new RequestContextListener());
  
      // Set the locations of the configuration files
      rootContext.setConfigLocations(
              new String[]
                      {
                              "applicationContext.xml",
                              "config/api-beans.xml",
                              "config/hibernate-beans.xml",
                              "config/security-beans.xml",
                              "config/service-beans.xml",
                              "config/settings-beans.xml",
                              "config/utility-beans.xml",
                              "config/mvc/web-beans.xml",
                              "config/jmx-beans.xml",
                              "config/ws/ws-beans.xml"
                      }
      );
  
      // Add the dispatcher servlet
      ServletRegistration.Dynamic mvc =
              container.addServlet("mvc", new DispatcherServlet(rootContext));
      mvc.setLoadOnStartup(1);
      mvc.setInitParameter("dispatchOptionsRequest", "true");
      mvc.addMapping("/api/*");
      mvc.addMapping("/html/*");
  
      // Add the web services servlet
      ServletRegistration.Dynamic ws =
              container.addServlet("ws", new MessageDispatcherServlet(rootContext));
      ws.setLoadOnStartup(2);
      ws.setInitParameter("transformWsdlLocations", "true");
      ws.addMapping("/service/*");
  
      // Add the spring security filter
      FilterRegistration.Dynamic springSecurityFilter =
              container.addFilter("springSecurityFilterChain",
                      new DelegatingFilterProxy("springSecurityFilterChain"));
      springSecurityFilter.addMappingForUrlPatterns(null, true, "/j_spring_security_check");
      springSecurityFilter.addMappingForUrlPatterns(null, true, "/j_spring_security_logout");
      springSecurityFilter.addMappingForUrlPatterns(null, true, "/api/*");
      springSecurityFilter.addMappingForUrlPatterns(null, true, "/html/*");
  
      // Add the static content filter
      FilterRegistration.Dynamic staticContentFilter =
              container.addFilter("staticContentFilter", new StaticContentFilter());
      staticContentFilter.addMappingForUrlPatterns(null, true, "/static/*");
      staticContentFilter.addMappingForUrlPatterns(null, true, "/generated/*");
  
      // Add the logger filter
      FilterRegistration.Dynamic loggerFilter =
              container.addFilter("loggerFilter", new LoggerFilter());
      loggerFilter.addMappingForUrlPatterns(null, true, "/api/*");
      loggerFilter.addMappingForUrlPatterns(null, true, "/html/*");
    }
  }
  </code></pre>
  
  <p>Is there anything obvious that I am missing?  I've checked all the other questions/answers on this topic and didn't find a solution.</p>