Pretty сталкивается с проблемами конфигурации на сервере приложений WebSphere — JSF2

«Ошибка 500: com.ocpsoft.pretty.PrettyFilter несовместим с javax.servlet.Filter»

  • JSF2.1.2
  • Prettyfaces-jsf2-3.3.2
  • Перволики 3.2
  • Сервер приложений WebSphere 7.0.0.9

Пробовал добавлять настраиваемые свойства в консоль администратора WebSphere для совместимости с фильтрами (последний пункт в FAQ по адресу http://ocpsoft.org/prettyfaces/< /а>). Tomcat 6.0.32 не имеет проблем, но после развертывания приложения в WAS возникла проблема.

Ниже вебxml

<context-param>
    <param-name>defaultHtmlEscape</param-name>
    <param-value>true</param-value>
</context-param>

<context-param>
    <param-name>com.sun.faces.numberOfViewsInSession</param-name>
    <param-value>3</param-value>
</context-param>

<context-param>
    <param-name>com.sun.faces.numberOfLogicalViews</param-name>
    <param-value>10</param-value>
</context-param>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:WEB-INF/Controller-servlet.xml</param-value>
</context-param>

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

 <context-param>
    <description>JSF Injection provider</description>
    <param-name>com.sun.faces.injectionProvider</param-name>
    <param-value>net.devgrok.jsf.Tomcat6GuiceInjectionProvider</param-value>
</context-param>

<context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>cupertino</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
    <param-value>abc.xhtml</param-value>
</context-param>

<!--  JSF Required Context Params END-->

<!--  JSF Required Filters & Listeners START-->
<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    <init-param>
        <param-name>thresholdSize</param-name>
        <param-value>1048576000</param-value><!--51200-->
    </init-param>
    <init-param>
        <param-name>uploadDirectory</param-name>
        <param-value>/temp</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!-- Creates the Spring Container shared by all Servlets and Filters -->

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

<filter>
    <filter-name>Pretty Filter</filter-name>
    <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Pretty Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>

</filter-mapping>

<!--  JSF Required Filters & Listeners END-->

<!--  JSF Required Servlets START -->

<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>*.jsf</url-pattern>
</servlet-mapping>

person Jeyan    schedule 18.08.2012    source источник


Ответы (1)


  1. Изменен порядок загрузчика классов войны на «родительский последний» и политика на «Загрузчик одного класса для приложения» в консоли администратора WebSphere, чтобы приложения могли выбирать собственную версию JSF.

  2. Удалены избыточные jar-файлы (servlet-api.jar и xml-apis-1.0.b2.jar в моем случае) из папки WEB-INF/Lib, так как они конфликтуют с версиями сервера.

Вышеупомянутое решило эту проблему. Однако создание изолированной общей библиотеки (https://stackoverflow.com/a/12081307/1341062) будет лучшим вариантом, когда вы имеют зависимости для конкретного приложения, которые могут конфликтовать с версиями сервера.

person Jeyan    schedule 18.08.2012
comment
Вы уверены, что вам пришлось изменить статус родителя последним? Известно, что установка родительского элемента последним вызывает другие проблемы с загрузкой классов. - person Isaac; 20.08.2012
comment
Наличие библиотек, специфичных для контейнера сервлетов, в /WEB-INF/lib веб-приложения всегда будет создавать проблемы, если эта библиотека, специфичная для контейнера сервлетов, не происходит из того же контейнера сервлетов, в котором вы развертываете веб-приложение. В конце концов, вы никогда не должны делать этот (простите меня) глупый шаг. Сам контейнер сервлетов уже поставляется с нужными библиотеками API сервлетов. - person BalusC; 20.08.2012