Запуск JSF 2.0 на контейнере Servlet 2.4

Насколько мне известно, JSF 2 требует сервлета 2.5, поэтому он не запускается на JBOSS 4.05 (Tomcat 5.5). К сожалению, я должен развернуть приложение, которое использует JSF 2.0 и Primefaces в этой среде.

Есть ли какой-либо взлом для использования?

Ответ 1

JSF 2.0 сильно зависит от EL 2.1, который является частью Servlet 2.5 и является основным изменением в отличие от EL 2.0, который является частью Servlet 2.4, но он не зависит от какого-либо конкретного API-интерфейса Servlet 2.5. Сервлет 2.4 должен работать так же хорошо. Поэтому теоретически вы можете заставить JSF 2.0 работать на Servlet 2.4, если вы предоставляете свой собственный API EL 2.1 и реализацию в /WEB-INF/lib. Я сделал быстрый тест здесь, на Tomcat 5.5.33, со следующими библиотеками в /WEB-INF/lib:

  • el-api.jar файл, скопированный из lib папки Tomcat 6.0.x
  • jboss-el.jar файл (реализует EL 2.1 и поддерживает EL 2.2 как вызов метода с аргументами)
  • jsf-api.jar и jsf-impl.jar из Mojarra 2.0.x

И сервлет 2.4 web.xml, где объявлен JBoss EL:

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

Простой JSF 2.0 Facelet (не JSP!) с простым <h:form> с кнопкой <f:ajax> и простой @ViewScoped @ManagedBean работает для меня на Tomcat 5.5.33. Попробуйте JBoss 4.0.5 и тщательно протестируйте его.

Обратите внимание, что вам нужен минимум JDK 1.5, а не JDK 1.4. Также обратите внимание, что ваше приложение таким образом не переносимо для любого контейнера Servlet 3.0 из-за наличия специального файла el-api.jar для Servlet 2.5.