我正在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
最重要的是,如果Spring正在查找不同的* .jar文件,为什么我的其他portlet会被部署,除了一个?
经过几次重新部署后,我得到了解决方案.有人能说点什么吗?
最佳答案
根本原因似乎是门户/应用程序服务器中的一个静态变量“挂在”portlet的类实例上.两个常见的罪魁祸首是log4j和java日志记录,两者都是应用程序包含者常用的.
原文链接:https://www.f2er.com/spring/432155.html有关记录器的更多讨论,请参见log4j and the thread context classloader和http://logback.qos.ch/manual/loggingSeparation.html.建议使用带有logback OR的SLF4J,以确保将log4j.jar放在WAR文件中,使其位于正确的类加载器中(尽管某些容器会阻止此解决方案).
此外,容器中存在的其他类可能是原因.记录只是一个常见问题.