Winstone: не удалось найти Factory: javax.faces.context.FacesContextFactory
Я не могу опубликовать приложение JSF2 на сервере Winstone.
Сервер настроен нормально и при удалении
<load-on-startup>1</load-on-startup>
из web.xml он запускается нормально:
Но когда я пытаюсь запустить Indew.xhtml, сервер сообщает:
Часть моего web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>PIA</display-name>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<description>State saving method: 'client' or 'server'.</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
</web-app>
Обновление: я пробовал winstone 1.0.0.jar
и он сообщает об этом:
Но у меня есть slf4j-api-1.6.4.jar
а также slf4j-log4j12-1.6.4.jar
в моей папке WEB-INF\lib... Где должна быть проблема?
1 ответ
Добавьте это к вашему web.xml
явно зарегистрировать слушателя, который должен настроить фабрики JSF.
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
Другое возможное решение состоит в том, чтобы удалить <load-on-startup>
от FacesServlet
, но я никогда не использовал Winstone, поэтому я не могу гарантировать, будет ли это работать на этом сервере.
Этот обходной путь обычно не обязателен на приличных серверах, но на плохих серверах это так. Для получения дополнительной справочной информации см. Также не удалось найти Factory: javax.faces.context.FacesContextFactory.
Обновление согласно комментариям, после добавления слушателя исключение исчезло, но теперь Error instantiating listener class: com.sun.faces.config.ConfigureListener
появляется без какой-либо трассировки стека. Похоже, проглатывание трассировки стека является ошибкой Winstone, которая была исправлена в 1.0.0. Попробуйте, это должно показать реальную причину проблемы.
Обновление 2 согласно обновлению вопроса, реальная причина, кажется, NoClassDefFoundError
на org.slf4j.loggerFactory
, Это, однако, не используется Мохарра в любом случае. Трассировка стека также указывает, что это происходит перед загрузкой любых слушателей. Другими словами, это, вероятно, другая проблема, выпущенная для Winstone. Очевидно, самому Winstone нужна эта библиотека. Добавьте его в путь к классу выполнения Winstone вместо /WEB-INF/lib
,