2011-02-08 8 views
6

Sto distribuendo Portlet su Liferay 5.2.3 su Tomcat 6. Viene visualizzato questo errore solo per uno dei portlet.java.lang.IllegalStateException: l'attributo di contesto radice non è di tipo WebApplicationContext

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

ho fatto qualche ricerca e ha scoperto che la primavera è stata un'istanza di un contesto di applicazione portlet quando si ha bisogno di un web uno. Ma nel mio web.xml Sto solo definisco contextLoaderListner

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

E per finire, se un altro file * .jar veniva alzò lo sguardo entro la primavera, allora perché i miei altri portlet vengono schierati, tranne uno?

Dopo un paio di ridistribuzioni, l'ho risolto. Qualcuno può mettere un po 'di luce?

risposta

0

Sembra che tu non stia definendo contextConfigLocation? in web.xml si dovrebbe anche avere qualcosa come questo in aggiunta al 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> 

Dove applicationContext.xml è un file di configurazione normale per una webapp.

Si dovrebbe anche avere questo nel tuo web.xml se si utilizza portlet 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> 

Nella tua portlet.xml Credo di avere qualcosa di simile per specificare le portlet:

<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> 

Se non lo hai già fatto, consulta il portlet di primavera. Mvc reference documentation

Spero che sia d'aiuto.

1

La causa principale sembra essere una variabile statica nel server portale/applicazioni "in attesa di" un'istanza di una classe dal portlet. Due errori comuni sono log4j e java logging, entrambi comunemente usati dai contatori di applicazioni.

Vedere log4j and the thread context classloader e http://logback.qos.ch/manual/loggingSeparation.html per ulteriori discussioni sui logger. Il suggerimento è di usare SLF4J con logback OR per essere sicuri di inserire log4j.jar nel file WAR in modo tale che sia nel giusto programma di caricamento classi (anche se alcuni contenitori possono sventare questa soluzione).

Inoltre, qualche altra classe presente nel contenitore potrebbe essere la causa. La registrazione è solo un problema comune.