java.lang.IllegalStateException: корневой атрибут контекста не имеет тип WebApplicationContext - PullRequest
6 голосов
/ 08 февраля 2011

Я развертываю портлеты на Liferay 5.2.3 на Tomcat 6. Я получаю эту ошибку только для одного из портлетов.

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

Я провел некоторое исследование и обнаружил, что Spring создает экземпляр приложения с портлетами.контекст, когда это нужно веб.Но в моем файле web.xml я определяю только contextLoaderListner

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

И в довершение всего, если Spring ищет другой файл * .jar, то зачем развертывать другие мои портлеты, кроме одного?

После нескольких перераспределений я исправляю это.Может кто-нибудь зажечь свет?

Ответы [ 2 ]

1 голос
/ 19 апреля 2013

Основной причиной является статическая переменная на портале / сервере приложений, "висящая" на экземпляре класса из портлета.Двумя распространенными виновниками являются log4j и java logging, оба из которых обычно используются хранителями приложений.

См. log4j и загрузчик классов контекста потока и http://logback.qos.ch/manual/loggingSeparation.html для более подробного обсуждения регистраторов.,Рекомендуется использовать SLF4J с logback ИЛИ, чтобы обязательно поместить log4j.jar в ваш WAR-файл, чтобы он находился в правильном загрузчике классов (хотя некоторые контейнеры будут мешать этому решению).

Кроме того, некоторые другие классы, которыеможет присутствовать в контейнере.Ведение журнала - это обычная проблема.

0 голосов
/ 18 июля 2011

Похоже, вы не определяете 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 - это обычный файл конфигурации для веб-приложения.

Вы также должны иметь это в своем файле web.xml, если используете весенний портлет 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>

В вашем файле portlet.xml, я думаю, у вас есть что-то подобное для указания ваших портлетов:

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

Если вы этого еще не сделали, обратитесь к справочнику mvc по портлету Spring Документация

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...