java.lang.IllegalStateException:根上下文属性不是WebApplicationContext类型

时间:2011-02-08 14:04:43

标签: model-view-controller spring listener portlet

我正在Tomcat 6上的Liferay 5.2.3上部署Portlets。我只为其中一个portlet收到此错误。

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

我做了一些研究,发现Spring在需要web时实例化portlet应用程序上下文。但在我的web.xml中,我只定义了contextLoaderListner

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

最重要的是,如果Spring正在查找不同的* .jar文件,为什么我的其他portlet会被部署,除了一个?

经过几次重新部署后,我得到了解决方案。有人能说些什么吗?

2 个答案:

答案 0 :(得分:1)

根本原因似乎是门户/应用程序服务器中的一个静态变量“挂在”portlet的类实例上。两个常见的罪魁祸首是log4j和java日志记录,两者都是应用程序包含器常用的。

有关记录器的更多讨论,请参阅log4j and the thread context classloaderhttp://logback.qos.ch/manual/loggingSeparation.html。建议使用带有logback OR的SLF4J以确保将log4j.jar放在WAR文件中,以便它位于正确的类加载器中(尽管某些容器会阻止此解决方案)。

此外,容器中存在的其他类可能是原因。记录只是一个常见问题。

答案 1 :(得分:0)

听起来你没有定义contextConfigLocation?在web.xml中,除了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>

其中applicationContext.xml是webapp的普通配置文件。

如果使用spring portlet MVC:

,您还应该在web.xml中使用它
<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>

在你的portlet.xml中我想你有类似的东西来指定你的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>

如果您还没有,请参阅spring portlet mvc reference documentation

希望它有所帮助。