5

I created a FAQ using spring boot. it needs to be deployed to a tomcat 6 server (servlet 2.5). I need to configure the current parent java app(war) web.xml to point all request to url pattern "/faq/*" for example, to my spring boot FAQ app. I've copied the FAQ.jar file into the lib folder of the parent app. But I'm not sure how to configure/register the spring boot servlet and servlet mapping within the web.xml of the parent application.

Using the spring boot legacy sample.. I placed my spring boot app in the parent app lib folder along with the dependency jar files. I added this code block to the web.xml of the parent app.

 <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>faq.Application</param-value>
 </context-param>

  <listener>
      <listener-class>
          org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
      </listener-class>
  </listener>

  <filter>
      <filter-name>metricFilter</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

<filter-mapping>
    <filter-name>metricFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>SpringServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextAttribute</param-name>
        <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>SpringServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

But when I start up Tomcat, I get the following error.

Jun 30, 2014 12:17:23 AM org.apache.catalina.core.StandardContext listenerStart SEVERE: Exception sending context initialized event to listener instance of class org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener java.lang.IllegalAccessError: tried to access method org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List; from class org.springframework.boot.SpringApplication at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:355) at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:346) at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:222) at org.springframework.boot.SpringApplication.(SpringApplication.java:198) at org.springframework.boot.builder.SpringApplicationBuilder.(SpringApplicationBuilder.java:83) at org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener.initWebApplicationContext(SpringBootContextLoaderListener.java:48) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:897) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:873) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1095) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1617) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Jun 30, 2014 12:17:23 AM org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerStart

KevyKev

1 Answer 1

1

Spring Boot doesn't support Servlet 2.5 officially, but it doesn't take a lot to make it work. You might find this useful: https://github.com/scratches/spring-boot-legacy. Sample here: https://github.com/scratches/spring-boot-sample-gae.

Sign up to request clarification or add additional context in comments.

6 Comments

Thanks for responding... Using the spring boot legacy example, changes to the parent app's web.xml file and placed my boot app in lib folder. But when I start up Tomcat, I get the following error: SEVERE: Exception sending context initialized event to listener instance of class org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener java.lang.IllegalAccessError: tried to access method org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/List; from class org.springframework.boot.SpringApplication
Looks like a class path issue maybe? Check your WEB-INF/lib and any shared libraries in th container for old versions. Or do you have a `SecurityManager in your container?
So I have to add every dependency jar of my spring boot app(FAQ.jar), into the lib folder of the parent app also? along with the app itself?
I don't really know what you mean by "parent app" but a war is self contained, so anything that needs to be on the classpath for your app has to be in there. Are you not using a dependency management system with your build tool (maven, gradle etc)?
The war is not using maven dependency, but the spring boot jar is... so I'm adding the dependency jars into the war -> lib.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.