Создание приложения уровня предприятия с помощью Maven

This tutorial demonstrates how to create a simple enterprise application using IDE NetBeans and Maven archetypes. Также приводится ряд пояснений и советов по созданию и сборке приложений Maven в среде IDE.

В этом учебном курсе описывается создание приложения уровня предприятия, которое пакетируется в архивный файл EAR и развертывается на сервере приложений GlassFish Server Open Source Edition 3. Приложение создается с использованием архетипа приложения Maven Enterprise в мастере создания проекта. В приложение входит проект EJB, содержащий класс сущностей с сохранением состояния, компонент, управляемый сообщениями, и фасад сеансного компонента для сущности. В приложение также входит веб-проект, содержащий два сервлета.

Упражнения по темам руководства

Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3 и 7.4

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или материал Требуемая версия
IDE NetBeans Версия 7.1, 7.2, 7.3, 7.4, Java EE
Комплект для разработчика на языке Java (JDK) версия 6 или 7
GlassFish Server Open Source Edition 3.1.2.2 3.x, 4.x

Предпосылки

Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:

  • Программирование на Java
  • IDE NetBeans

Перед изучением этого учебного курса можно ознакомиться со следующей документацией:

Можно загрузить готовый проект в виде архива ZIP.

Использование Maven в среде IDE

Support for Maven is fully integrated in IDE NetBeans. Разработка проекта, в котором используется платформа Maven, практически идентична случаю разработки с использованием Ant. Однако в случае Maven имеются некоторые отличия, касающиеся способа сборки проектов и работы с зависимостями. Советы, приведенные ниже, могут помочь избегнуть ряда проблем при первом создании приложения Maven.

Проверка параметров Maven

Если это ваш первый проект Maven, проверьте параметры настройки Maven в окне "Параметры". Starting with IDE NetBeans 7.0, Maven is bundled with the IDE and installed when you install the IDE.

  1. Откройте окно 'Настройки' в IDE (Сервис > Параметры; NetBeans> Предпочтения на Mac).
  2. Выберите в окне "Параметры" категорию "Java" и перейдите на вкладку "Maven".
  3. Подтвердите указание домашней страницы Maven.

    Можно использовать версию Maven, входящую в комплект среды IDE, либо указать местоположение локальной установки Maven (требуется версия 2.0.9 или более поздняя).

  4. Для закрытия окна "Параметры" нажмите кнопку "ОК".

Примечания.

  • Поддержка Maven автоматически включается при включении Java в среде IDE. Если нет, необходимо включить подключаемый модуль Java EE.

Обновите репозитории Maven

Локальные и удаленные репозитории Maven используются для автозавершения кода, а также при построении проектов. Обновление индексов удаленных репозиториев Maven требуется для обеспечения немедленной доступности всех артефактов, которые могут потребоваться при разработке проекта. Частоту проверки наличия обновлений можно настроить на вкладке "Maven" в окне "Параметры" среды IDE. Вы можете выполнить немедленную проверку обновлений и проверку локальных и удаленных репозиториев Maven в окне 'Службы'.

  1. Выберите меню "Окно" > "Службы". Откроется окно "Службы".
  2. Разверните узел 'Репозитории Maven' в окне 'Службы'.
  3. Разверните узел репозитория для просмотра артефактов.
  4. Щелкните правой кнопкой мыши узел репозитория и выберите во всплывающем меню 'Обновить индекс'.

При нажатии кнопки "Обновить индексы" в среде IDE выполняется проверка и загрузка самого свежего индекса для каждого из настроенных удаленных репозиториев Maven. Индекс представляет текущее состояние артефактов, расположенных в репозитории, и используется для предоставления ссылок на артефакты, доступных для использования в приложении. По умолчанию артефакты не загружаются из репозитория автоматически без явно обозначенной необходимости в них.

Для поиска артефактов, щелкните правой кнопкой узел мыши узел 'Репозитории Maven' в окне 'Службы' и выберите 'Найти'.

Примечания.

  • Размер индексов довольно велик и обновление всех индексов может занять значительное время.
  • Если используется IDE NetBeans 7.1 или более ранняя версия, выберите "Окно > Другие > Обозреватель репозитория Maven" и нажмите "Обновление индексов" ( Кнопка 'Обновить индексы'  ) в верхней части окна "Обзор репозитория Maven".

Дополнительные сведения об использовании Maven в IDE NetBeans см. в разделе Настройка Maven в учебном курсе Создание приложения Swing Maven с помощью Hibernate, а также в Испытанные приемы для Apache Maven в IDE NetBeans.

Создание проекта приложения уровня предприятия Maven

Цель данного упражнения заключается в создании проекта приложения уровня предприятия с использованием архетипа приложения Maven Enterprise, входящего в комплект поставки среды IDE. Архетип приложения уровня предприятия также создает проект EJB и проект webapp.

IDE включает в себя несколько архетипов Maven в мастере создания проектов, которые позволяют быстро создать типы общих проектов NetBeans, такие как проекты корпоративных приложений (EAR), проектов веб-приложений (WAR) и проектов модулей EJB (JAR). Мастер также позволяет создавать проекты из архетипов, полученных из зарегистрированных удаленных репозиториев.

  1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N; ⌘-Shift-N в Mac) в главном меню.
  2. В категории Maven выберите "Приложение Enterprise. Нажмите кнопку "Далее".
    Тип проекта корпоративного приложения Maven в мастере создания проектов
  3. Введите MavenEnterpriseApp в качестве имени проекта и укажите местоположение проекта.
  4. (Необязательно) Измените подробные данные артефакта. Нажмите кнопку "Далее".
    Сведения о проекте в мастере создания проектов
  5. В качестве сервера выберите сервер GlassFish.
  6. В качестве версии Java EE выберите Java EE 6 или Java EE 7.
  7. Установите флажки "Создать модуль EJB" и "Создать модуль веб-приложения". Нажмите кнопку "Завершить".

При нажатии кнопки "Готово" из архетипа приложения Maven Enterprise создаются следующие проекты:

  • EJB. (MavenEnterpriseApp-ejb) Проект EJB обычно содержит исходный код с бизнес-логикой приложения. Проект EJB пакетируется в архив JAR EJB.
  • Webapp. (MavenEnterpriseApp-web) Проект Webapp обычно содержит уровень представления приложения, такого как страницы JSF и JSP и сервлеты. В проект веб-приложения может также входить исходный код с бизнес-логикой. Проект веб-приложения пакетируется в архив WAR.
  • Сборка. (MavenEnterpriseApp) Проект Assembly используется для сборки архива EAR из архивов EJB и WAR. Проект сборки не содержит исходных кодов.
  • Enterprise Application. (MavenEnterpriseApp-ear) Проект Enterprise Application не содержит источников. В проекте приложения уровня предприятия содержится только файл POM (pom.xml) с подробными данными о модулях, входящих в приложение уровня предприятия.
В окне 'Проекты' отображаются созданные проекты

Если в созданном проекте корпоративного приложения недоступны какие-либо зависимости, этот проект будет помечен значком. Если развернуть узел "Зависимости" для проекта MavenEnterpriseApp-ear, можно проверить, все ли необходимые библиотеки присутствуют в проекте и находятся на пути класса. Проект приложения J2EE имеет зависимости от JAR и WAR, которые будут пакетированы и доступны после сборки проектов EJB и веб-приложения. MavenEnterpriseApp-ejb и MavenEnterpriseApp-web находятся в списке зависимостей.

В ряде случаев в строке статуса будет отображаться значок Maven. Щелкните этот значок, чтобы запустить подготовительную сборку или исправить отсутствующие зависимости.

снимок IDE, в которой отображается значок Maven на панели состояния для запуска подготовительной сборки

Укажите целевой сервер (NetBeans IDE 7.0)

В NetBeans IDE 7.0 необходимо задать целевой сервер в окне "Свойства" проекта.

При разработке приложений Maven, как правило, не требуется указывать сервер приложений до момента сборки приложения. Однако, чтобы воспользоваться некоторыми функциями генерации кода в среде IDE, перед началом написания кода рекомендуется задать целевой сервер. Настройка сервера развертывания позволяет среде IDE распознать технологии, поддерживаемые сервером, и включить разнообразные функции в мастерах для генерации кода, оптимизированного для используемого сервера.

  1. Запустите сервер GlassFish.
  2. В окне "Проекты" щелкните правой кнопкой мыши узел проекта EJB и выберите пункт "Свойства".
  3. Выберите категорию "Выполнение", затем выберите GlassFish Server. Нажмите кнопку "ОК".

Указание GlassFish в качестве сервера развертывания перед началом написания кода позволяет включить возможность выбора JTA в мастере создания блока сохранения состояния. Также можно указать необходимость использования источников данных, зарегистрированных на сервере.

Примечание. Если не указать GlassFish Server 3, тип транзакции по умолчанию при создании блока сохранения состояния будет RESOURCE-LOCAL. Файл persistence.xml придется изменить вручную и указать в нем JTA, если нужно, чтобы транзакциями управлял контейнер. Также в мастере создания блока сохранения состояния вместо зарегистрированного источника данных потребуется указать подключение к базе данных.

Написание кода проекта EJB

Проект EJB содержит бизнес-логику приложения. Для управление транзакциями в этом проекте используется контейнер GlassFish, использующий интерфейс Java Transaction API (JTA). В этом руководстве для класса сущности в модуле EJB будет создан класс сущностей, управляемый сообщениями компонент и фасад сеанса.

Создание блока сохранения состояния

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

Для создания блока сохранения состояния выполните следующие действия.

  1. Для открытия мастера создания файла щелкните правой кнопкой мыши узел проекта EJB и выберите пункт раскрывающегося меню "Создать > Прочее".
  2. Выберите "Блок сохранения состояния" в категории "Сохранение состояния". Нажмите кнопку "Далее".
  3. Выберите "EclipseLink" в качестве поставщика сохранения состояния в диалоговом окне мастера создания блока сохранения состояния.
  4. Выберите источник данных (например, выберите jdbc/sample, если необходимо использовать JavaDB).

    Источник данных для jdbc/sample находится в составе пакета среды IDE при установке среды IDE и сервера приложений GlassFish. Однако можно указать другой источник данных, если это необходимо.

    Можно сохранить другие параметры по умолчанию (имя блока сохранения состояния, поставщик сохранения состояния EclipseLink).

  5. Убедитесь в том, что установлен флажок "Использовать интерфейсы API Java Translaction", и что для стратегии создания таблиц установлено значение "Создать", т.е. таблицы на основе классов сущностей создаются при развертывании приложения. Нажмите кнопку "Завершить".
Мастер создания блоков сохранения состояния

При нажатии кнопки "Готово" в среде IDE создается файл XML persistence.xml, который открывается в редакторе. В окне 'Проекты' видно, что файл был создан в каталоге Другие источники > src/main/resources > META-INF. В этом файле содержатся подробные данные о подключении к базе данных и об управлении транзакциями. При переходе на вкладку "Исходный код" в редакторе отобразятся следующие данные блока сохранения состояния.

...
<persistence-unit name="com.mycompany_MavenEnterpriseApp-ejb_ejb_1.0-SNAPSHOTPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/sample</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
</persistence-unit>
            

Нетрудно заметить, что в качестве типа транзакции указано значение JTA, и что приложением будет использоваться зарегистрированный источник данных jdbc/sample.

Создание класса сущности

Это упражнение посвящено созданию класса сущности в проекте EJB для представления объектов, состояние которых сохраняется в базе данных. Для создания класса сущности NewsEntity выполните следующие действия.

  1. Щелкните правой кнопкой мыши модуль EJB в окне "Проекты" и выберите "Создать > Прочее" для открытия мастера создания файла.
  2. Выберите "Класс сущностей" в категории "Сохранение состояния". Нажмите кнопку "Далее".
  3. В поле "Имя класса" введите NewsEntity.
  4. Введите ejb в качестве имени пакета и оставьте для параметра "Тип первичного ключа" значение по умолчанию "Long". Нажмите кнопку "Завершить".

При нажатии кнопки "Готово" класс сущности NewsEntity.java будет открыт в редакторе исходного кода. В редакторе исходного кода добавьте несколько полей путем выполнения следующих действий.

  1. Добавьте к классу следующие объявления полей.
    private String title;
    private String body;
  2. В редакторе исходного кода щелкните правой кнопкой мыши внутри определения класса и выберите "Вставка кода" (ALT+ISERT; CTRL+I на компьютере Mac) > "Методы получения и установки".
  3. В диалоговом окне "Создание методов получения и установки" выберите поля body и title. Нажмите кнопку "Создать".
  4. Сохраните изменения, внесенные в класс.

Создание управляемого сообщениями компонента

В этом упражнении в проекте EJB будет создан компонент, управляемый сообщениями. Компонент, управляемый сообщениями, – это компонент EJB, реализующий асинхронный обмен сообщениями. Управляемый сообщениями компонент используется в приложении NewsApp для получения и обработки сообщений, передаваемых в очередь сервлетом в веб-модуле.

Для использования компонента, управляемого сообщениями, в приложении необходимо зарегистрировать на сервере ресурсы подключения, используемые компонентом. При развертывании на сервере GlassFish можно создавать ресурсы непосредственно на сервере с помощью консоли администратора или создавать их во время развертывания, указав подробные данные в файле дескриптора glassfish-resources.xml. При развертывании приложения на сервере сервер регистрируют ресурсы на основе файла дескриптора. При использовании мастера создания файлов в среде IDE для создания управляемого сообщениями компонента среда IDE сформирует элементы в файле дескриптора.

В проекте Maven файл glassfish-resources.xml расположен в каталоге src/main/setup в узле проекта в окне "Файлы".

  1. Щелкните правой кнопкой мыши модуль EJB в окне "Проекты" и выберите "Создать > Прочее" для открытия мастера создания файла.
  2. Из категории Enterprise JavaBeans выберите "Управляемый сообщениями компонент". Нажмите кнопку "Далее".
  3. В поле "Имя EJB" введите NewMessage.
  4. В раскрывающемся списке "Пакет" выберите ejb.
  5. Для открытия диалогового окна "Добавление адресата сообщения" нажмите кнопку "Добавить" рядом с полем "Адресат проекта".
  6. В диалоговом окне "Добавление адресата сообщения" введите jms/NewMessage и выберите "Очередь" для типа адресата. Нажмите кнопку "ОК".
    снимок диалогового окна "Добавление назначения сообщения".
  7. Подтвердите, что адресат проекта выбран правильно. Нажмите кнопку "Далее".
    снимок мастера создания компонентов, управляемых сообщениями
  8. В диалоговом окне "Свойства конфигурации активации" оставьте настройки по умолчанию без изменений. Нажмите кнопку "Завершить".

    При нажатии кнопки "Готово" автоматически создается класс компонента, к которому добавляются следующие аннотации, идентифицирующие класс как компонент, управляемый сообщениями, а также свойства настройки.

    @MessageDriven(mappedName = "jms/NewMessage", activationConfig =  {
            @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
        })
    public class NewMessage implements MessageListener {
    
        public NewMessage() {
        }
    
        @Override
        public void onMessage(Message message) {
        }
    }
  9. Введите в класс ресурс MessageDrivenContext посредством добавления к классу следующего аннотированного поля:
    public class NewMessage implements MessageListener {
    
    @Resource
    private MessageDrivenContext mdc;
    
  10. Введите в класс диспетчер объектов посредством добавления к классу следующего аннотированного поля (выделено полужирным шрифтом):
    public class NewMessage implements MessageListener {
    
    @Resource
    private MessageDrivenContext mdc;
    @PersistenceContext(unitName="com.mycompany_MavenEnterpriseApp-ejb_ejb_1.0-SNAPSHOTPU")
    private EntityManager em;
                       

    Аннотация @PersistenceContext указывает контекст путем объявления блока сохранения состояния. Значение unitName представляет собой имя блока сохранения состояния.

  11. Добавьте следующий метод save (выделен полужирным шрифтом).
    public NewMessage() {
    }
    
    @Override
    public void onMessage(Message message) {
    }
    
    private void save(Object object) {
        em.persist(object);
    }
  12. Измените метод onMessage путем добавления следующих строк кода (выделены полужирным шрифтом) в тело метода:
    public void onMessage(Message message) {
         ObjectMessage msg = null;
         try {
              if (message instanceof ObjectMessage) {
              msg = (ObjectMessage) message;
                  NewsEntity e = (NewsEntity) msg.getObject();
                  save(e);
              }
         } catch (JMSException e) {
              e.printStackTrace();
              mdc.setRollbackOnly();
         } catch (Throwable te) {
              te.printStackTrace();
         }
    }
  13. Исправьте операторы импорта (Ctrl-Shift-I; ⌘-Shift-I в Mac) и сохраните изменения.

    Примечание. При создании операторов импорта необходимо убедиться, что импортируются библиотеки jms и javax.annotation.Resource.

Подробные сведения об управляемых сообщениями компонентах приведены в главе Что такое управляемый сообщениями компонент? в руководстве по Java EE 6. Часть I.

Создание компонента сеанса

В этом упражнении будет использоваться мастер создания фасада сеанса для класса сущности NewsEntity. Мастер создаст методы create, edit и find, которые будут вызываться из сервлетов в проекте веб-приложения.

  1. Щелкните модуль EJB правой кнопкой мыши и выберите команду "Создать" > "Другие".
  2. Из категории "Сохранение состояния" выберите "Сеансные компоненты для классов сущностей" и нажмите кнопку "Далее".
  3. Из списка доступных классов сущностей выберите ejb.NewsEntity и нажмите кнопку "Добавить", чтобы переместить класс на панель "Выбранные классы сущностей". Нажмите кнопку "Далее".
  4. В качестве пакета выберите ejb.
  5. Создавать интерфейс не нужно. Нажмите кнопку "Завершить".

При нажатии кнопки "Готово" среда IDE создает два класса фасада сеанса: AbstractFacade.java и NewsEntityFacade.java, последний расширяет класс абстрактного фасада. Класс абстрактного фасада определяет несколько методов, которые обычно используются с классами сущностей.

снимок компонентов Bean сеанса для мастера классов сущностей

В Java EE 6 и Java EE 7 интерфейсы использовать не обязательно. Локальный интерфейс не является обязательным, и сервлет в веб-модуле может непосредственно обращаться к сеансовому компоненту через безынтерфейсный фасадный метод.

Написание кода веб-приложения

В примере в этом разделе будет создано два сервлета в проекте веб-приложения.

Создание сервлета ListNews

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

  1. Щелкните проект веб-модуля правой кнопкой мыши и выберите "Создать" > "Сервлет".
  2. В поле "Имя класса" введите ListNews.
  3. В качестве имени пакета введите web. Нажмите кнопку "Завершить".

    При нажатии кнопки "Готово" класс ListNews.java будет открыт в редакторе исходного кода.

  4. Щелкните правой кнопкой мыши в редакторе исходного кода в определении класса и выберите команду "Вставка кода" (ALT+ISERT; CTRL+I на компьютере Mac) > "Вызов компонента EJB".
  5. В диалоговом окне "Вызов компонента EJB" разверните узел MavenEnterpriseApp-ejb и выберите NewsEntityFacade. Нажмите кнопку "ОК".
    Диалоговое окно 'Вызвать компонент корпоративного уровня'

    При нажатии кнопки ОК выполняется ввод ресурса EJB в сервлет с использованием аннотации @EJB.

    @WebServlet(name = "ListNews", urlPatterns = {"/ListNews"})
    public class ListNews extends HttpServlet {
        @EJB
        private NewsEntityFacade newsEntityFacade;
  6. В методе processRequest внесите изменения, добавив следующие строки (выделены полужирным шрифтом) в тело метода:
    out.println("<h1>Servlet ListNews at " + request.getContextPath () + "</h1>");
    
    List news = newsEntityFacade.findAll();
    for (Iterator it = news.iterator(); it.hasNext();) {
      NewsEntity elem = (NewsEntity) it.next();
      out.println(" <b>"+elem.getTitle()+" </b><br />");
      out.println(elem.getBody()+"<br /> ");
    }
    out.println("<a href='PostMessage'>Add new message</a>");
    
    out.println("</body>");
       

    Примечание. Если используется более ранняя версия IDE необходимо удалить комментарии кода.

  7. Исправьте выражения импорта (Ctrl-Shift-I; ⌘-Shift-I в Mac) и сохраните изменения.

    При создании операторов импорта может потребоваться импортировать библиотеки java.util.

Создание сервлета PostMessage

В этом упражнении будет создан сервлет PostMessage, используемый для отправки сообщений. Для добавления созданных ресурсов JMS непосредственно в сервлет используются аннотации с указанием имени переменной и имени, на которое она отображается. Затем необходимо написать код для отправки сообщения JMS и код для формы HTML, предназначенной для добавления сообщения.

  1. Щелкните проект веб-модуля правой кнопкой мыши и выберите "Создать" > "Сервлет".
  2. В поле "Имя класса" введите PostMessage.
  3. В качестве имени пакета выберите web. Нажмите кнопку "Завершить".

    При нажатии кнопки "Готово" в редакторе исходного кода будет открыт класс PostMessage.java.

  4. Используйте аннотации в редакторе исходного кода для ввода ресурсов ConnectionFactory и Queue путем добавления следующих объявлений полей.
    @WebServlet(name="PostMessage", urlPatterns={"/PostMessage"})
    public class PostMessage extends HttpServlet {
       @Resource(mappedName="jms/NewMessageFactory")
       private  ConnectionFactory connectionFactory;
    
       @Resource(mappedName="jms/NewMessage")
       private  Queue queue;
  5. Для импорта библиотек javax.jms исправьте параметры импорта.
    снимок диалогового окна 'Исправить все выражения импорта'

    Примечание. Если IDE не поддерживает javax.jms как параметр, можно выполнить поиск в репозиториях правильного артефакта, щелкнув значок рекомендации на поле рядом с private ConnectionFactory connectionFactory; и выбрав 'Поиск зависимостей' в репозиториях Maven.

    снимок подсказки в редакторе для поиска в репозиториях

    Для поиска артефакта javaee-api-6.0, содержащего ConnectionFactory можно воспользоваться диалоговым окном "Поиск в репозиториях Maven".

    снимок диалогового окна 'Поиск в репозиториях Maven'
  6. Добавьте следующие строки, используемые для отправки сообщений JMS, к методу processRequest.
    response.setContentType("text/html;charset=UTF-8");
    
    // Add the following code to send the JMS message
    String title=request.getParameter("title");
    String body=request.getParameter("body");
    if ((title!=null) && (body!=null)) {
        try {
            Connection connection = connectionFactory.createConnection();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer messageProducer = session.createProducer(queue);
    
            ObjectMessage message = session.createObjectMessage();
            // here we create NewsEntity, that will be sent in JMS message
            NewsEntity e = new NewsEntity();
            e.setTitle(title);
            e.setBody(body);
    
            message.setObject(e);
            messageProducer.send(message);
            messageProducer.close();
            connection.close();
            response.sendRedirect("ListNews");
    
        } catch (JMSException ex) {
            ex.printStackTrace();
        }
    }
  7. Добавьте следующие строки, используемые для отправки сообщений (выделены жирным шрифтом) к веб-форме.
    out.println("Servlet PostMessage at " + request.getContextPath() + "</h1>");
    
    // The following code adds the form to the web page
    out.println("<form>");
    out.println("Title: <input type='text' name='title'><br/>");
    out.println("Message: <textarea name='body'></textarea><br/>");
    out.println("<input type='submit'><br/>");
    out.println("</form>");
    
    out.println("</body>");
        

    Примечание. Если используется более ранняя версия IDE необходимо удалить комментарии кода.

  8. Исправьте операторы импорта и сохраните измененные данные.
    снимок диалогового окна 'Исправить все выражения импорта'

    Примечание. Необходимо выполнить импорт библиотек javax.jms для Connection, ConnectionFactory, Session и Queue.

Сборка приложения с помощью Maven

Написание кода завершено, и можно выполнить сборку приложения уровня предприятия с помощью Maven. Этот раздел посвящен сборке и пакетированию проектов в архив EAR. В архив EAR входят архив EJB JAR и архив WAR. После создания архива EAR его можно развернуть на целевом сервере.

Работа с зависимостями проекта

В этом упражнении вы исследуете POM (pom.xml) веб-проекта и измените POM, чтобы избежать включения ненужных артефактов в WAR при пакетировании. В каждый проект Maven входит файл pom.xml, содержащий подробные данные о содержимом архивов. Все внешние библиотеки, запрашиваемые проектом, внесены в качестве зависимостей в файл POM. Файл POM можно изменить, указав зависимости, которые необходимо включить или исключить при пакетировании архива.

В этом приложении в архив EAR пакетируются архивы JAR EJB и WAR. Обратите внимание на файл pom.xml в проекте MavenEnterpriseApp-ear: архивы EJB и WAR объявлены как зависимости.

pom.xml проекта EAR

Обратите внимание на файл pom.xml в проекте веб-приложения: архив EJB объявлен как зависимость, и для области выбрано значение указана. В случае когда значение элемента области артефакта указано, артефакт не будет включен при пакетировании. Архив·EJB·требуется·проектом·веб-приложения·как·зависимость,·однако·для·этого·приложения·не·требуется·включать·архив·EJB·в·WAR·при·пакетировании,·так·как·архив EJB предоставляется для использования в веб-приложении в составе архива EAR.

pom.xml проекта веб-приложения

Можно открыть файл pom.xml в редакторе и просмотреть визуальное представление зависимостей проекта на вкладке "График". Если используется более ранняя версия IDE, можно щелкнуть открытый в редакторе файл pom.xml правой кнопкой мыши и выбрать "Показать график зависимостей". Наведите указатель мыши на артефакт для отображения всплывающей подсказки с подробными данными артефакта.

снимок графика зависимостей.

Выполните следующие действия для изменения файла POM проекта веб-приложения и добавьте элемент scope scope к зависимости в артефакте javaee-api.

  1. Разверните узел "Файлы проекта" для проекта веб-приложения.
  2. Дважды щелкните pom.xml для открытия файла в редакторе.
  3. Измените зависимость в артефакте javaee-api путем изменения файла POM и добавления следующего элемента <scope>provided</scope>.
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>

    Можно использовать автозавершение кода в редакторе POM, упрощающее правку файла.

    снимок автозавершения кода в POM

    Если в файле POM содержится объявление предоставленной зависимости, этот артефакт не пакетируется Maven при сборке архива WAR.

  4. Сохраните изменения.

Сборка проекта с зависимостями

Платформа сборки Maven проходит через определенную последовательность этапов, и каждый этап подразумевает выполнение одной или нескольких задач, причем можно настроить использование различных подключаемых модулей Maven. Пункт меню "Сборка вместе с зависимостями" соответствует этапу install жизненного цикла сборки Maven, и для него настроено использование подключаемого модуля Reactor. При выборе пункта раскрывающегося меню "Сборка вместе с зависимостями" Maven выполняет сборку приложения и всех необходимых зависимостей, после чего артефакты сборки копируются в локальный репозиторий.

Можно настроить привязку целей к операциям в меню "Действия" в диалоговом окне "Свойства" проекта.

Для сборки архива EAR выполните следующее действие.

  • Щелкните правой кнопкой мыши узел проекта MavenEnterpriseApp-ear и выберите команду "Сборка вместе с зависимостями".

При сборке проекта EAR с использование подключаемого модуля Reactor сборка зависимостей подпроектов выполняется перед сборкой проекта EAR. В окне "Вывод" отображается порядок сборки.

В окне "Вывод" отображается порядок сборки Reactor.

Результаты сборки также отображаются в окне "Вывод".

В окне "Вывод" отображается состояние сборки Reactor

После сборки проекта EAR итоговый архив EAR отображается в каталоге target в узле проекта EAR в окне "Файлы".

Окно 'Файлы', в котором отображается архив EAR

Если использовано имя артефакта по умолчанию com.mycompany, для просмотра артефактов сборки в браузере репозиториев Maven можно развернуть узел com.mycompany в локальном репозитории.

Подробные сведения о сборке проектов Maven приведены в документе Maven - Введение в жизненный цикл сборки по адресу maven.apache.org.

Развертывание и выполнение приложения

В этом разделе описываются два метода развертывания архива EAR на сервере. Приложение можно развернуть на сервере GlassFish с помощью действия меню в среде IDE или с помощью средства развертывания в консоли администратора GlassFish.

Развертывание и выполнение приложения из среды IDE

В этом упражнении мы используем действие "Выполнить" для развертывания архива EAR на сервере GlassFish. После развертывания будет необходимо открыть страницу ListNews приложения в браузере и добавить сообщение.

  1. Щелкните правой кнопкой мыши узел проекта EAR в окне "Проекты" и выберите "Выполнение".

    При нажатии команды "Выполнение" среда IDE разворачивает архив EAR и создает ресурсы JMS на сервере. Среда IDE откроет установленную по умолчанию начальную страницу приложения (http://localhost:8080/MavenEnterpriseApp-web/) в браузере.

  2. Для вывода страницы ListNews откройте в браузере следующий адрес URL.

    http://localhost:8080/MavenEnterpriseApp-web/ListNews.

    При первом выполнении проекта база данных пуста, и сообщения для вывода отсутствуют.

    Страница ListNews открыта в браузере
  3. Нажмите кнопку "Добавить сообщение".
  4. Введите сообщение в форму в сервлете PostMessage. Нажмите кнопку "Отправить запрос".
    Страница PostMessage открыта в браузере

При добавлении сообщения с помощью сервлета PostMessage оно передается на постоянное хранение в управляемый сообщениями компонент. Для просмотра сообщений в базе данных вызывается сервлет ListNews. Список сообщений в базе данных, извлеченных сервлетом ListNews, часто выводится без нового сообщения, поскольку служба передачи сообщений работает асинхронно.

В проектах Maven, использующих сервер GlassFish в качестве целевого сервера, функции "Компиляция при сохранении" и "Развертывание при сохранении" включены по умолчанию. Например, при изменении и сохранении сервлета можно перезагрузить сервлет в браузере и просмотреть изменения без повторного развертывания приложения.

Note if you are using IDE NetBeans 7.0.
В IDE NetBeans 7.0 для изменения целевого объекта Maven, связанного с действием "Выполнить", могут потребоваться следующие действия. После изменения действия действием "Выполнить" можно будет пользоваться для развертывания архива EAR на сервере. При выборе действия "Выполнить" в диалоговом окне "Выберите сервер развертывания" система может выдать сообщение с предложением выбрать сервер GlassFish.

  1. В окне "Проекты" щелкните правой кнопкой мыши узел проекта EAR и выберите пункт "Свойства".
  2. Выберите пункт "Действия" в списке "Категории" на левой панели окна "Свойства".
  3. Выберите действие "Выполнить проект" из списка на правой панели.
  4. В поле "Цели выполнения" удалите цель package и введите install. Нажмите кнопку "ОК".
    Панель 'Действия' диалогового окна "Свойства проекта"

Развертывание из консоли администратора GlassFish

В этом упражнении выполняется развертывание архива EAR с помощью средства "Развернуть" в консоли администратора Glassfish.

  1. Разверните узел "Серверы" в окне "Службы".
  2. Запустите сервер приложений GlassFish.
  3. Щелкните правой кнопкой мыши узел сервера приложений GlassFish и выберите "Просмотр консоли администратора" для открытия в браузере консоли администратора GlassFish.
  4. Щелкните узел "Приложения" на левой панели консоли администратора.
  5. Нажмите кнопку "Развернуть" на главной панели консоли администратора.
  6. Нажмите кнопку "Обзор" для поиска архива EAR приложения уровня предприятия.

    Архив EAR расположен в каталоге target внутри каталога приложения уровня предприятия в локальной системе.

  7. Нажмите кнопку "ОК".

При нажатии кнопки "ОК" выполняется развертывание приложения с помощью средства развертывания GlassFish.

Примечание. При развертывании приложения с помощью средства развертывания на консоли администрирования GlassFish, также необходимо вручную создать ресурсы, необходимые для приложения, если они не существуют.

Загрузка проекта решения

Решение для данного учебного курса в виде проекта можно загрузить несколькими способами.

  • Загрузите архив завершенного проекта в формате zip.
  • Выполните проверку исходных файлов проекта на выходе из примеров NetBeans, выполнив перечисленные ниже действия.
    1. Выберите в главном меню "Группа > Subversion > Проверить".
    2. В диалоговом окне "Проверка" введите следующий URL-адрес репозитория:
      https://svn.netbeans.org/svn/samples~samples-source-code
      Нажмите кнопку "Далее".
    3. Нажмите кнопку "Обзор" для открытия диалогового окна "Обзор папок репозитория".
    4. Разверните корневой узел и выберите samples/javaee/MavenEnterpriseApp. Нажмите кнопку "ОК".
    5. Укажите локальную папку для исходных файлов (папка должна быть пустой).
    6. Нажмите кнопку "Завершить".

      После нажатия кнопки "Готово" среда IDE инициализирует локальную папку в качестве репозитория Subversion и выполняет проверку исходных файлов проекта на выходе.

    7. Щелкните команду "Открыть проект" в диалоговом окне, которое появится после завершения проверки.

    Примечания. For more about installing Subversion, see the section on Setting up Subversion in the Guide to Subversion in IDE NetBeans.



Дополнительные сведения

For more information about using IDE NetBeans to develop Java EE applications, see the following resources:

Дополнительные сведения по использованию компонентов уровня предприятия приведены в учебном курсе по Java EE 7.

To send comments and suggestions, get support, and keep informed on the latest developments on the IDE NetBeans Java EE development features, join the nbj2ee mailing list.

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo