Статьи

Запуск RichFaces в WebLogic 12c

Сначала я думал, что смогу написать этот пост несколько месяцев назад. Но в итоге я был поражен разными вещами. Одним из них было то, что он не смог просто запустить витрину RichFaces, как я делал это для версии 4.0. Со всей магией JMS и различными проверками провайдеров в витрине это стало своего рода проблемой, просто создать и развернуть ее.

Во всяком случае, я был готов дать этому попытку, и здесь мы идем. Если вы хотите начать использовать любую из технологий JBoss, рекомендуется сначала проверить с помощью JBoss Developer Framework . Это хорошая коллекция различных примеров и кратких обзоров, которые помогут вам начать работу с Java EE и его технологиями. Одним из них является пример RichFaces-Validation, который демонстрирует, как использовать JSF 2.0, RichFaces 4.2, CDI 1.0, JPA 2.0 и Bean Validation 1.0 вместе.

Пример

Пример состоит из объекта Member, который имеет некоторые ограничения JSR-303 (Bean Validation). Обычно они проверяются в нескольких местах, начиная с базы данных, до уровня постоянства и, наконец, уровня представления в тесном взаимодействии с клиентом. Даже если этот справочник не содержит слоя постоянства, он начинается с Энити, которая достаточно хорошо отражает реальную жизненную ситуацию. Приложение содержит слой представления, написанный с использованием JSF и RichFaces, и включает в себя мастер AJAX для регистрации новых членов. Недавно зарегистрированный участник должен предоставить пару информации, прежде чем он будет фактически «зарегистрирован». Это включает в себя адрес электронной почты имя и его номер телефона.

Начиная

Я не собираюсь повторять то, что отличный и подробный быстрый старт уже показывает вам. Итак, если вы хотите запустить это на JBoss AS7 .. иди туда. Мы начинаем с чистого веб-проекта Maven. И лучший и самый простой способ сделать это — запустить NetBeans 7.2 и создать его. Давайте назовем это «richwls-web». Откройте свой pom.xml и начните там что-то менять. Сначала удалите одобренные вещи там. Нам это не нужно. Следующее, чтобы добавить немного зависимостьManagement:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.jboss.bom</groupId>
               <artifactId>jboss-javaee-6.0-with-tools</artifactId>
               <version>1.0.0.Final</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
            
           <dependency>
               <groupId>org.richfaces</groupId>
               <artifactId>richfaces-bom</artifactId>
               <version>4.2.0.Final</version>
               <scope>import</scope>
               <type>pom</type>
           </dependency>
       </dependencies>
   </dependencyManagement>

Это добавляет спецификацию материалов для Java EE 6 и RichFaces в ваш проект. Спецификация определяет версии «стека» (или коллекции) артефактов. Вы найдете это с чем-нибудь от ребят из RedHat, и это считается «лучшей практикой», чтобы иметь его. В конце концов, это делает вашу жизнь проще, поскольку она управляет версиями и зависимостями для вас.
На длинный список истинных зависимостей:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!-- Import the CDI API -->
        <dependency>
            <groupId>javax.enterprise</groupId>
            <artifactId>cdi-api</artifactId>
            <scope>provided</scope>
        </dependency>
         
        <!-- Import the JPA API -->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
            <scope>provided</scope>
        </dependency>
         
        <!-- JSR-303 (Bean Validation) Implementation -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.3.0.Final</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
         
        <!-- Import the JSF API -->
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
         
        <!-- Import RichFaces runtime dependencies - these will be included
        as libraries in the WAR -->
        <dependency>
            <groupId>org.richfaces.ui</groupId>
            <artifactId>richfaces-components-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>org.richfaces.core</groupId>
            <artifactId>richfaces-core-impl</artifactId>
        </dependency>  

За исключением зависимостей RichFaces, все остальные предоставляются средой выполнения. В этом случае это будет GlassFish 3.1.2.2. Если вы не определили его где-либо еще (settings.xml), вам также следует добавить репозиторий JBoss в раздел сборки:

1
2
3
4
5
<repository>
                   <id>jboss-public-repository-group</id>
                   <name>JBoss Public Maven Repository Group</name>
                   <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
               </repository>

Скопируйте содержимое каталога richfaces-validation в source-zip или извлеките его из github . Будьте немного осторожны и не путайтесь с созданным нами pom.xml;) Создайте его и разверните.

вопросы

Первое, с чем вас встречают, это приятное небольшое сообщение о сварке:

1
WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans [...] Producer Method [Logger] with qualifiers

Очевидно, у нас есть проблема, и нам нужно объявить поле Logger как временное.

1
2
@Inject
private transient Logger logger;

Не знаю, почему это работает на AS7, но, может быть, я когда-нибудь узнаю 🙂 Следующая итерация: Изменить, собрать, развернуть.

1
java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;

Это не выглядит лучше. Запустите WLS CAT по адресу http: // localhost: 7001 / wls-cat / и попытайтесь узнать об этом.

Похоже, что Oracle использует магию Google внутри сервера. Хорошо. У нас нет возможности развернуть RichFaces как отдельную войну с WebLogic, потому что здесь нужно решить некоторые проблемы с загрузкой классов. И рекомендуемый способ — добавить так называемый Filtering Classloader. Вы делаете это, добавляя к своему уху файл weblogic-application.xml. Да: давайте переупаковываем все, кладем войну в пустое ухо и добавляем магию в weblogic-application.xml:

1
2
3
<prefer-application-packages>
       <package-name>com.google.common.*</package-name>
   </prefer-application-packages>

Готово? Еще одно развертывание, и вы, наконец, видите свое приложение. В основном RichFaces работает на WebLogic, но вы должны упаковать его в ухо и развернуть загрузчик классов для классов com.google.common. *. Это намного проще с PrimeFaces, но … в любом случае, есть причины, почему я попробовал это. Во-первых, мне нравится идея запуска проверки бинов на стороне клиента. Если вы посмотрите на пример, который вы видите, то <rich: validator event = ‘blur’ /> добавляет клиентскую валидацию как для ограничений валидации бина, так и для стандартных валидаторов jsf для клиента. Без необходимости возиться с чем-либо в JavaScript или дублировать логику.

Приятного кодирования и не забудьте поделиться!

Ссылка: Запуск RichFaces на WebLogic 12c от нашего партнера по JCG Маркуса Эйзела из блога Enterprise Software Development с Java .