Reputation: 239
I recently migrated my codes from jboss 4.2.3 to jboss 7. There's something kind of weird and I can't figure out the reason. I used annotation @Controller at the top of my handler class, but it does not work any more. When I changed to use xml instead, it works fine. Any anybody give some hints?
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>asweb</display-name>
<filter>
<filter-name>springCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter>
<filter-name>openEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springCharacterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>openEntityManagerInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>openEntityManagerInViewFilter</filter-name>
<url-pattern>/ws/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>simple</servlet-name>
<servlet-class>org.sonatype.mavenbook.web.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>simple</servlet-name>
<url-pattern>/simple.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>aswebmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>aswebmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
</taglib>
</jsp-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
aswebmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.xxx.appstore.web.controller" />
<context:component-scan base-package="com.xxx.appstore.web.controller.admin" />
<bean id="webController" class="com.xxx.appstore.web.controller.WebController"/>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="local" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="synchronizeOnSession" value="true"/>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="1" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
My Controller Class
package com.xxx.appstore.web.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class WebController
{
private static Log logger = LogFactory.getLog(WebController.class);
@RequestMapping("home.do")
public String home2(HttpServletRequest request, ModelMap model) {
return "";
}
@RequestMapping("/home.do")
public String home(HttpServletRequest request, ModelMap model) {
return "web/home";
}
}
I have updated the configuration files, which work for me for most annotations.
Upvotes: 2
Views: 2795
Reputation: 36
Yep - if you want to use spring mvc on jboss 7 you'll want to upgrade spring mvc to 3. One of the new features is better support for CDI. Once you make the upgrade you'll still need to do some legwork if you want to map ejb's directly into your servlet. You'll want to add something like this into your spring configs somewhere to wire the ejb:
<jee:local-slsb id="ejbReference" jndi-name="ejb/exampleEjb"
business-interface="example.ExampleEjb/>
As indicated in this userguide: http://docs.redhat.com/docs/en-US/JBoss_Web_Framework_Kit/1.2/html/Spring_Developer_Guide/ch07s05s02.html#ejb-reference
You can then inject ejb's into the servlet like this:
@EJB(mappedName="java:global/earfile/jarfile/exampleEjb!com.app.ExampleEjb")
private ExampleEjb ejb;
You can find out the exact jndi reference for your ejb in the logs but this is essentially how to wire sprinc mvc with jboss' cdi support.
Upvotes: 2
Reputation: 9265
Spring 2 annotations have some incompatibilities with newer versions of JBoss; annotations in a Spring 2 app of mine were not being recognized in JBoss 5, and I needed to upgrade Spring to v3 for it to work. Here's a Spring JIRA on it. Notice that the fix version is in v3.0 RC1.
Not sure if its the same issue with JBoss 7, but it seems possible.
Upvotes: 5