Статьи

Java EE7 и Maven проект для новичков — часть 8

Прошло много времени с моего последнего поста, для этой серии уроков. Пришло время возобновить и добавить новые функции в наш простой проект. Как я упоминал в предыдущих постах, эта серия постов ориентирована в основном на новичков Maven и JavaEE7 , я приветствую любые вопросы или комментарии (и исправления) по содержанию ниже. Обещаю, я постараюсь не отставать от обновлений.

Git тег для этого поста?

Тег для этого поста, этот пост8 , и его можно найти в моем репозитории Bitbucket .

Что изменилось с предыдущего поста?

  • Некоторые комментарии и исправления кода от читателей уже были интегрированы. Большое спасибо всем за ваш том.
  • Я обновил версию сервера приложений Wildfly с 8.1 до 8.2, поэтому все примеры и код выполняются на новом сервере.
  • Я также обновил версии спецификаций Arquillian до последней версии 1.1.7.
  • Я также добавил свойство в проекте sample-parent, которое указывает путь, по которому различные модули maven будут загружать и использовать сервер Wildfly, чтобы вам не приходилось загружать его самостоятельно. Сервер будет автоматически загружен и извлечен по заранее заданному пути, как только вы попытаетесь выполнить один из модульных тестов из предыдущих постов (модуль sample-services)
    1
    2
    <!--path to download wildfly-->
    <wildfly-server-home>${project.basedir}/servers/</wildfly-server-home>

Добавление JSF-модуля War Maven на наше ухо

В конце концов, в структуре нашего проекта уже была война (см. Пример-сеть)

CapturFiles-февраль-15-2015_19.57.36 модуль maven. Таким образом, не добавлен дополнительный модуль, а не внесены изменения в существующие файлы родительского pom.xml и самого модуля.

Шаг 1 изменяется на web.xml

Наш сервер приложений уже снабжен необходимыми библиотеками и настройками для поддержки приложений, использующих спецификацию JSF 2.2. Связки полевых мух Mojarra 2.2.8 . Что нам нужно сделать, это просто обновить некоторые дескрипторы конфигурации (в конечном итоге только один). Наиболее важным является web.xml, который теперь выглядит следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         version="3.1">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <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>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

Шаг 2 Упаковка войны и тощий вопрос войны

Наш военный модуль придерживается схемы упаковки, называемой тощей войной. Пожалуйста, прочитайте следующую страницу плагина Apache Maven War. Короче говоря, чтобы уменьшить общий размер нашего развертывания (ear), мы упаковываем все необходимые библиотеки в предопределенную папку на уровне ear, обычно она называется \ lib, и мы не включаем библиотеки в военная папка WEB-INF \ lib. Единственное, что вам нужно сделать, это добавить эти зависимости вашей войны на уровень ушей. Несмотря на тот факт, что общий «хак» не выглядит очень мавенским, он работает, если вы следуете предложенной конфигурации, но есть случаи, когда тощая военная упаковка не будет работать. Один из них обычно предназначен для веб-приложений JavaEE на основе JSF, где реализация механизма виджетов JSF должна быть упакована в WEB-INF \ lib войны.

Для нашего примера проекта я использую отличную и бесплатную библиотеку Primefaces , которую я настоятельно рекомендую для вашего следующего проекта на основе JSF. Поэтому мне нужно определить зависимость от моего военного модуля для банки с первыми лицами, но обходить тощий военный механизм только для этой банки, чтобы она была упакована в нужном месте. Вот как мы это делаем.

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
<!-- from the war module pom.xml -->
 
<!-- This is the dependency -->
 
 <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>${primefaces-version}</version>
  </dependency>
 
<!-- See the packaging exclude, we exclude all the jars apart from the one we want
to be bundled within the WAR -->
 
 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <packagingExcludes>%regex[WEB-INF/lib/(?!primefaces).*.jar]</packagingExcludes>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>sample-services-${project.version}.jar</Class-Path>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>

Шаг 3 Добавьте jsf love, управляемый bean-компонент и страницу xhtml с соответствующими тегами.

CapturFiles-Mar-02-2015_23.18.58

Наш код — это просто маленькая таблица и пара тегов от Primefaces. Если вы считаете, что вам нужно больше узнать о JSF 2.X, просмотрите следующие ссылки

Шаг 4 Упакуйте и разверните на работающем сервере.

Запустите свою wildfly (у вас должна быть одна под вашей директорией проекта и серверами подпапок

1
<wildfly-server-home>${project.basedir}/servers/</wildfly-server-home>

а затем под типом родительского проекта.

1
mvn clean install -Ph2

У вас должно быть демо-приложение с поддержкой JSF 2.2 на http: // localhost: 8080 / sample-web / и вы увидите что-то вроде следующего.

CapturFiles-Mar-02-2015_23.32.01

Вот и все, это даст вам простой старт для того, чтобы рассказать о чем-то большем, чем демонстрация!

Как всегда, вы найдете полный пример под тегом post8 .

Ссылка: Проект Java EE7 и Maven для новичков — часть 8 от нашего партнера JCG Париса Апостолопулоса в блоге Papo .