2011-02-15 15 views
6

Estoy creando una aplicación Spring MVC por primera vez.Spring 3 MVC dispatcher xml y applicationContext xml

Parece que cuando inicio el servidor, el applicationContext.xml carga la primera vez incluso antes de ejecutar cualquier controlador mvc; Esto es lo que quiero.

PERO una vez que ejecuto un controlador que está cargado con contexto: componente-scan en el dispatcher.xml .... PARECE que la aplicaciónContext.xml se carga de nuevo ... ¿Por qué sucede esto y cómo lo hago? deshabilitar esto? Solo quiero que applicationContext.xml se ejecute una vez.

Justo después de ejecutar un controlador, veo los registros por debajo ...

ClassPathXmlA I org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org[email protected]65cb65cb: startup date [Tue Feb 15 16:29:21 EST 2011]; root of context hierarchy 
XmlBeanDefini I org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions Loading XML bean definitions from class path resource [WEB-INF/applicationContext.xml] 

Creo que esto también está causando mi JMS DefaultMessageListenerContainer que se crea dos veces ...

gracias

xxxdispatcher-servlet.xml

<context:component-scan base-package="com.something.web" /> 
<mvc:annotation-driven /> 

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<mvc:interceptors> 
<bean class="com.something.SomeInterceptor" /> 
</mvc:interceptors> 

<mvc:resources mapping="/js/**" location="/js/" /> 

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
    <props> 
     <prop key="java.lang.Exception">common/error</prop> 
    </props> 
    </property> 
    <property name="warnLogCategory" value="abcdefg"/> 
</bean> 

applicationContext.xml

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="/WEB-INF/application.properties" /> 
</bean> 

<!-- Local Data Holder --> 
<bean id="propertyHolder" class="com.common.PropertyHolder"> 
<property name="baseURL" value="${url.base}" /> 
</bean> 

<bean id="messageListener" class="com.something.SomeListener" /> 

<bean id="xxxDAO" 
    class="com.XXXDAOImpl" 
    scope="prototype"> 
    <property name="dataSource" ref="dataSourceQA" /> 
</bean> 

<bean id="xxxServiceTarget" class="com.XXXServiceImpl"> 
    <property name="xxxDAO" ref="xxxDAO"/> 
</bean> 

<bean id="xxxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
    <property name="transactionManager" ref="txManager"/> 
    <property name="target" ref="xxxServiceTarget"/> 
    <property name="transactionAttributes"> 
     <props> 
      <prop key="*">PROPAGATION_REQUIRED</prop> 
     </props> 
    </property> 
</bean> 

<!-- and this is the message listener container --> 
<bean id="jmsContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="xxxCF" /> 
    <property name="destination" ref="xxxInboundQueue" /> 
    <property name="messageListener" ref="messageListener" /> 
</bean> 

web.xml

<servlet> 
    <servlet-name>xxxdispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>xxxdispatcher</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 
<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/log4j.properties</param-value> 
</context-param> 

controlador

@Controller 
    public class XXXController { 

     @Autowired 
     private IXXXService xxxService; 

     @RequestMapping("/xxx") 
     public String xxxHandler() throws Exception { 

      return "xxxView"; 
     } 
+2

No podemos responder a esto sin ver su configuración. – skaffman

+0

y web.xml – Bozho

+0

¿Qué tienes en web.xml? –

Respuesta

10

Por favor, elimine de su ContextLoaderListener Web.xml que creo que esto es la razón por la cual se crea el contexto dos veces.

+2

Aparece un montón del error "No se pudo autoencaminar campo" cuando inicio el servidor sin ContextLoaderListener. Creo que ya no carga el applicationContext.xml ... = ( – john

+0

) Noté este comportamiento porque mi escucha de jms se iniciará cuando se inicie el servidor, PERO Spring intentará crear/conectar otro oyente una vez que ejecute mi controlador que lo hace nada más que devolver una vista ... – john

+0

todavía atascado en esta, alguna otra idea? – john