Можно ли использовать JSF 2.0 с сервером приложений Websphere версии 7.x
Можно ли использовать JSF 2.0 с WebSphere Application Server версии 7.x?
Если так, то как?
8 ответов
В WebSphere Infocenter указывается, что правильным способом перехода к альтернативной реализации JSF является создание общей библиотеки WebSphere с включенной опцией изолированного загрузчика классов.
Любые модули, которым требуется JSF 2, будут связаны с новой общей библиотекой, и тогда приложение будет запускаться с JSF 2 вместо JSF 1.2.
Также необходимо установить пакет исправлений 7.0.0.19 или новее.
Шаг за шагом настройте MyFaces 2.0 на WebSphere Application Server v7 в качестве общей библиотеки, как рекомендует IBM: http://wasbehindtheglass.blogspot.co.uk/
Я применил аналогичные шаги для Majorra/JSF 2.0.4 и создал общую библиотеку, используя только jsf-api.jar и jsf-impl.jar. Как сказал @Ian McLaird, требуются WAS 7.0.0.19 и JSF 2.0.4. JSF 2.1.x требует Servlet 3 и не поддерживается WAS7
Мой опыт:
-> WAS 7.0.0.11 в Windows
-> javax.faces-2.0.11.jar в WEB-INF/lib моего приложения War
-> БЫЛО общие библиотеки с javax.faces-2.0.11.jar с изолированным загрузчиком классов
-> БЫЛО общие библиотеки, связанные с моим военным приложением
-> Без изменений в Class Loader для экземпляра и приложения (PARENT_FIRST)
С этим conf (выше) приложение отлично работает с JSF 2.0 на WAS 7. Если я удаляю javax.faces-2.0.11.jar из моего приложения War, это не работает.
Я изо всех сил пытался решить это в течение нескольких дней. Вот как я это решил.
Используйте следующую библиотеку: javax.faces-2.1.7.jar
Если вы используете PrimeFaces 3.1: primefaces-3.1.1.jar
Экземпляр сервера приложений: загрузка класса - последний родитель
Экземпляр корпоративного приложения (модуль war): загрузка класса - последний родитель
Обязательно удалите все библиотеки контейнеров сервлетов, например, необходимые для Tomcat.
Следующее сработало для меня
- Создайте общую библиотеку и поместите в нее ваши файлы JSF 2.0.
- Также добавьте EL 2.2 API и EL-Impl 2.2 jars, поскольку JSF 2.0 явно нуждается в этом.
- Добавьте эту библиотеку в ваше приложение и установите загрузчик классов как PARENT_LAST.
Измените web.xml следующим образом
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
Это оно.
Привет, я мог запустить свой сайт, используя эти библиотеки
Настройка в web.xml моего проекта
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
Настройка в websphere для загрузки моих библиотек (Parent Last)
С уважением
Websphere поставляется с JSF 1.2. И загружает его по умолчанию. Чтобы использовать другую библиотеку JSF (или любую другую библиотеку, предоставляемую WS, такую как регистрация общего доступа), вам нужно изменить способ, которым загрузчик классов назначает приоритеты местоположениям. Они называют это "родительским последним", что означает загрузку ваших библиотек, а затем версий WS.
Спасибо вам, ребята!
Это работало с более новой версией javax.faces. Смотрите зависимости maven:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.1.29-08</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
Не забудьте добавить следующее в ваш web.xml:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
И, наконец, измените порядок загрузчика классов WebSphere приложения и модуля на (родительский последний) настройки: https://www.ibm.com/support/knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/ae/urun_rclassloader_inst.html
С уважением