2011-02-08 636 views
6

Estoy implementando Portlets en Liferay 5.2.3 en Tomcat 6. Recibo este error solo para uno de los portlets.java.lang.IllegalStateException: el atributo de contexto de raíz no es del tipo WebApplicationContext

java.lang.IllegalStateException: Root context attribute is not of type WebApplicationContext 

me hizo una investigación y descubrió que la primavera fue instancias de un contexto de aplicación de módulo cuando se necesita una red uno. Pero en mi web.xml Yo sólo estoy definiendo contextLoaderListner

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

Y por si fuera poco, si un archivo diferente * .jar se estaba estudiando hasta la primavera, entonces ¿por qué mis otros portlets se despliegan excepto uno?

Después de un par de redistribuciones lo soluciono. ¿Alguien puede iluminar?

Respuesta

0

¿Parece que no está definiendo contextConfigLocation? en web.xml también debe tener algo como esto, además de la contextLoaderListener:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/applicationContext.xml  
    </param-value> 

</context-param> 

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

Dónde applicationContext.xml es un archivo de configuración normal para una aplicación web.

También debe tener esto en su web.xml si se utiliza portlets Spring MVC:

<servlet> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <url-pattern>/WEB-INF/servlet/view</url-pattern> 
</servlet-mapping> 

En su portlet.xml supongo que hay algo como esto para especificar los portlets:

<portlet> 
<portlet-name>sample</portlet-name> 
<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class> 
<supports> 
    <mime-type>text/html</mime-type> 
    <portlet-mode>view</portlet-mode> 
</supports> 
<portlet-info> 
    <title>Sample Portlet</title> 
</portlet-info> 
</portlet> 

Si aún no lo ha hecho, consulte el portlet de resorte referencia mvc documentation

Espero que ayude.

1

La causa raíz parece ser una variable estática en el portal/servidor de aplicaciones "colgando" de una instancia de una clase del portlet. Dos culpables comunes son log4j y java logging, los cuales son comúnmente utilizados por los contenidores de aplicaciones.

Consulte log4j and the thread context classloader y http://logback.qos.ch/manual/loggingSeparation.html para obtener más información sobre los registradores. La sugerencia es usar SLF4J con logback O para asegurarse de poner log4j.jar en su archivo WAR para que esté en el cargador de clases correcto (aunque algunos contenedores frustrarán esta solución).

Además, otra clase que está presente en el contenedor puede ser la causa. El registro es solo un problema común.

Cuestiones relacionadas