javaeclipsespringmavenm2e-wtp

Spring Maven project splitted, deployment issues in Eclipse


I've got a Spring maven project separated, myapp.web contains only JSPs and static files, while myapp.core contains app context XMLs and Controllers.

myapp.core

--src/main/resources/context.xml

--src/main/resources/mvc-context.xml

myapp.web

--src/main/webapp/WEB-INF/web.xml

web.xml contains root context configuration and servlet configuration

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/context.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
    ...

<servlet>
    <servlet-name>servlet0</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:/mvc-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

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

I also have OpenSessionInViewFilter configured

<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    </filter-class>
    <init-param>
        <param-name>flushMode</param-name>
        <param-value>AUTO</param-value>
    </init-param>

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

Now, generating the war from myapp.web and dropping in Tomcat manually works fine. But, when running from Eclipse via "Run On Server", OpenSessionInViewFilter does not see sessionFactory which is configured in context.xml I tried fixing build path of project but it won't run.

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1094)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:276)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:242)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:227)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:171)

Now I know this is a Eclipse/m2e-wtp configuration issue since it's working by manually deploying but I've been unable to fix it. Played with Build Path of project as is usually suggested but no success.

Thanks


Solution

  • Solved. The problem was this: Context was auto-reloading(not sure why)! myapp.core used to be the entry point(web app). After splitting, it had a missing tick on Project Facets called Utility Project, and Maven Integration for Eclipse was not deploying this project as a jar!