Создание приложения уровня предприятия с помощью Maven
В этом руководстве демонстрируется создание несложного приложения уровня предприятия с помощью среды IDE NetBeans и архетипов Maven. Также приводится ряд пояснений и советов по созданию и сборке приложений Maven в среде IDE.
В этом учебном курсе описывается создание приложения уровня предприятия, которое пакетируется в архивный файл EAR и развертывается на сервере приложений GlassFish Server Open Source Edition 3. Приложение создается с использованием архетипа приложения Maven Enterprise в мастере создания проекта. В приложение входит проект EJB, содержащий класс сущностей с сохранением состояния, компонент, управляемый сообщениями, и фасад сеансного компонента для сущности. В приложение также входит веб-проект, содержащий два сервлета.
Упражнения по темам руководства
Для работы с этим руководством требуются программное обеспечение и ресурсы, перечисленные ниже.
Примечание. Для среды IDE NetBeans 6.9 и сервера GlassFish 3.x требуется комплект для разработчика на языке Java (JDK) 6.
Предпосылки
Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:
- Программирование на Java
- Среда IDE NetBeans
Перед изучением этого курса можно ознакомиться со следующей документацией:
Можно загрузить готовый проект в виде архива ZIP.
Использование Maven в среде IDE
В среде IDE NetBeans реализована полная поддержка Maven. Разработка проекта, в котором используется платформа Maven, практически идентична случаю разработки с использованием Ant. Однако в случае Maven имеются некоторые отличия, касающиеся способа сборки проектов и работы с зависимости. Советы, приведенные ниже, могут помочь избегнуть ряда проблем при первом создании приложения Maven.
Проверка параметров настройки Maven
Если это ваш первый проект Maven, проверьте параметры настройки Maven в окне "Параметры". Начиная с версии 7.0 среды IDE NetBeans платформа Maven входит в состав среды IDE и устанавливается вместе со средой IDE. Если используется среда IDE NetBeans 6.9 или более ранних версий, программу установки можно загрузить с сайта Maven.
- Откройте окно "Параметры" в среде IDE.
- Выберите в окне "Параметры" категорию "Дополнительно" и перейдите на вкладку "Maven".
- Убедитесь в том, что выбрана Домашняя страница Maven.
Можно использовать версию Maven, встроенную в среду IDE, или указать местоположение локальной версии Maven (требуется версия 2.0.9 или более новая).
- Для закрытия окна "Параметры" нажмите кнопку "ОК".
Примечания. Если вы никогда ранее не создавали проект Maven в среде IDE, вам потребуется сначала активировать модуль Maven в среде IDE. Для этого нужно выбрать архетип Maven в мастере создания проектов. Когда архетип будет выбран, среда IDE автоматически активирует модуль. Завершать работу в мастере при этом не обязательно.
Обновите репозитории Maven
Локальные и удаленные репозитории Maven используются для автозавершения кода, а также при сборке проектов. Обновление индексов удаленных репозиториев Maven требуется для обеспечения немедленной доступности всех артефактов, которые могут потребоваться при разработке проекта. Частоту проверки наличия обновлений можно настроить на вкладке "Maven" в окне "Параметры" среды IDE. Для непосредственной проверки наличия обновлений и обзора локальных и удаленных репозиториев Maven используется обозреватель репозиториев Maven.
- Выберите пункт меню "Окно > Прочее > Обозреватель репозиториев Maven".
- Нажмите кнопку "Обновить индексы" (
) в верхней части окна обозревателя репозиториев Maven.
При нажатии кнопки "Обновить индексы" в среде IDE выполняется проверка и загрузка самого свежего индекса для каждого из настроенных удаленных репозиториев Maven. Индекс описывает текущее состояние артефактов, расположенных в репозитории, и используется для предоставления ссылок на артефакты, доступных для использования в приложении. По умолчанию артефакты не загружаются из репозитория автоматически без явно обозначенной необходимости в них.
Примечание. Размер индексов достаточно велик, и их полное обновление может занять значительное время.
Подробные сведения об использовании Maven в среде IDE NetBeans приведены в разделе Настройка Maven в учебном курсе Создание приложения Maven Swing с использованием Hibernate, а также в Практических рекомендациях по Apache Maven в среде IDE NetBeans.
Создание проекта приложения уровня предприятия Maven
Цель данного упражнения заключается в создании проекта приложения уровня предприятия с использованием архетипа приложения Maven Enterprise, входящего в комплект поставки среды IDE. Архетип приложения уровня предприятия также создает проект EJB и проект webapp.
В мастере создания проекта среды IDE предоставляется несколько архетипов Maven, позволяющих быстро создавать проекты NetBeans часто встречающихся типов, например, проекты приложений уровня предприятия (EAR), проекты веб-приложений (WAR), а также проекты модулей EJB (JAR). Мастер также позволяет создавать проекты из архетипов, полученных из зарегистрированных удаленных репозиториев.
- В главном меню выберите "Файл" > "Создать проект" (CTRL+SHIFT+N; ⌘+SHIFT+N на компьютере Mac).
- В категории Maven выберите "Приложение Enterprise. Нажмите кнопку "Далее".
- Введите MavenEnterpriseApp в качестве имени проекта и укажите местоположение проекта.
- (Необязательно) Измените подробные данные артефакта. Нажмите кнопку "Далее".
- В качестве сервера выберите GlassFish Server 3.1.1.
- Выберите версию Java EE 6.
- Установите флажки "Создать модуль EJB" и "Создать модуль веб-приложения". Нажмите кнопку "Готово".
При нажатии кнопки "Готово" из архетипа приложения Maven Enterprise создаются следующие проекты:
- EJB. (MavenEnterpriseApp-ejb) Проект EJB обычно содержит исходный код с бизнес-логикой приложения. Проект EJB пакетируется в архив JAR EJB.
- Веб-приложение. (MavenEnterpriseApp-web) Проект веб-приложения обычно содержит слой представления приложения, например страницы JSF и JSP, а также сервлеты. В проект веб-приложения может также входить исходный код с бизнес-логикой. Проект веб-приложения пакетируется в архив WAR.
- Сборка. (MavenEnterpriseApp) Проект сборки используется для сборки архива EAR из архивов EJB и WAR. Проект сборки не содержит исходных кодов.
- Приложение Enterprise. (MavenEnterpriseApp-ear) Проект приложения не содержит исходных кодов. В проекте приложения уровня предприятия содержится только файл POM (pom.xml) с подробными данными о модулях, входящих в приложение уровня предприятия.
После создания проекта приложения J2EE проект помечается, так как некоторые зависимости недоступны. Если развернуть узел "Зависимости" для проекта MavenEnterpriseApp-ear, откроются библиотеки, которые либо отсутствуют, либо не находятся в пути к классам.
Для просмотра отсутствующих зависимостей можно в окне "Проекты" щелкнуть правой кнопкой мыши узел объекта "зависимость, не связанная с путями к классам" в области "Зависимости" и выбрать пункт "Развернуть зависимости".
Проект приложения J2EE имеет зависимости от JAR и WAR, которые будут пакетированы и доступны после сборки проектов EJB и веб-приложения. Как видно, артефакты MavenEnterpriseApp-ejb-1.0-SNAPSHOT и MavenEnterpriseApp-web-1.0-SNAPSHOT входят в список зависимостей.
В строке состояния можно щелкнуть значок Maven и запустить таким образом подготовительную сборку и разрешение недостающих зависимостей.
Укажите целевой сервер.
В среде IDE NetBeans 7.1 можно установить целевой сервер в мастере создания проектов. В более ранних версиях среды IDE целевой сервер указывается в окне "Свойства" проекта.
При разработке приложений Maven, как правило, не требуется указывать сервер приложений до момента сборки приложения. Однако для демонстрации некоторых функций формирования кода в среде IDE в этом учебном курсе целевой сервер указывается до начала написания кода. Настройка сервера развертывания позволяет среде IDE распознать технологии, поддерживаемые сервером, и включить разнообразные функции в мастерах для генерации кода, оптимизированного для используемого сервера.
- Запустите сервер приложений GlassFish.
- В окне "Проекты" щелкните правой кнопкой мыши узел проекта EJB и выберите пункт "Свойства".
- Выберите категорию "Выполнение", затем выберите GlassFish Server. Нажмите кнопку "ОК".
Указание GlassFish в качестве сервера развертывания перед началом написания кода позволяет включить возможность выбора JTA в мастере создания блока сохранения состояния. Также можно указать необходимость использования источников данных, зарегистрированных на сервере.
Примечание. Если сервер GlassFish v 3 не указан, при создании блока сохранения состояния используется тип транзакции по умолчанию RESOURCE-LOCAL. Файл persistence.xml придется изменить вручную и указать в нем JTA, если нужно, чтобы транзакциями управлял контейнер. Также в мастере создания блока сохранения состояния вместо зарегистрированного источника данных потребуется указать подключение к базе данных.
Написание кода проекта EJB
Проект EJB содержит бизнес-логику приложения. Для управление транзакциями в этом проекте используется контейнер GlassFish, использующий интерфейс Java Transaction API (JTA). В этом руководстве для класса сущности в модуле EJB будет создан класс сущностей, управляемый сообщениями компонент и фасад сеанса.
Создание блока сохранения состояния
В этом упражнении в проекте EJB будет создан блок сохранения состояния. В блоке сохранения состояния указываются подробные данные подключения к базе данных и указывается способ управления транзакциями. Для этого приложения в мастере создания блока сохранения состояния указывается JTA, поскольку управление транзакциями должно осуществляться сервером GlassFish.
Для создания блока сохранения состояния выполните следующие действия.
- Для открытия мастера создания файла щелкните правой кнопкой мыши узел проекта EJB и выберите пункт раскрывающегося меню "Создать > Прочее".
- Выберите "Блок сохранения состояния" в категории "Сохранение состояния". Нажмите кнопку "Далее".
- Выберите "EclipseLink" в качестве поставщика сохранения состояния в диалоговом окне мастера создания блока сохранения состояния.
- Выберите источник данных (например, выберите jdbc/sample, если необходимо использовать JavaDB).
Источник данных для jdbc/sample находится в составе пакета среды IDE при установке среды IDE и сервера приложений GlassFish. Однако можно указать другой источник данных, если это необходимо.
Можно сохранить другие параметры по умолчанию (имя блока сохранения состояния, поставщик сохранения состояния EclipseLink).
- Убедитесь в том, что установлен флажок "Использовать интерфейсы API Java Translaction", и что для стратегии создания таблиц установлено значение "Создать", т.е. таблицы на основе классов сущностей создаются при развертывании приложения. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" в среде IDE создается файл XML persistence.xml, который открывается в редакторе. В окне "Проекты" показано, что файл создан в каталоге Other Sources > 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 выполните следующие действия.
- Щелкните правой кнопкой мыши модуль EJB в окне "Проекты" и выберите "Создать > Прочее" для открытия мастера создания файла.
- Выберите "Класс сущностей" в категории "Сохранение состояния". Нажмите кнопку "Далее".
- В поле "Имя класса" введите NewsEntity.
- Введите ejb в качестве имени пакета и оставьте для параметра "Тип первичного ключа" значение по умолчанию "Long". Нажмите кнопку "Готово".
При нажатии кнопки "Готово" класс сущности NewsEntity.java будет открыт в редакторе исходного кода. В редакторе исходного кода добавьте несколько полей путем выполнения следующих действий.
- Добавьте к классу следующие объявления полей.
private String title;
private String body;
- В редакторе исходного кода щелкните правой кнопкой мыши внутри определения класса и выберите "Вставка кода" (ALT+ISERT; CTRL+I на компьютере Mac) > "Методы получения и установки".
- В диалоговом окне "Создание методов получения и установки" выберите поля body и title. Нажмите кнопку "Создать".
- Сохраните изменения, внесенные в класс.
Создание управляемого сообщениями компонента
В этом упражнении в проекте EJB будет создан компонент, управляемый сообщениями. Компонент, управляемый сообщениями, – это компонент EJB, реализующий асинхронный обмен сообщениями. Управляемый сообщениями компонент используется в приложении NewsApp для получения и обработки сообщений, передаваемых в очередь сервлетом в веб-модуле.
Для использования компонента, управляемого сообщениями, в приложении необходимо зарегистрировать на сервере ресурсы подключения, используемые компонентом. При развертывании на сервере GlassFish можно создавать ресурсы непосредственно на сервере с помощью консоли администратора или создавать их во время развертывания, указав подробные данные в файле дескриптора glassfish-resources.xml. При развертывании приложения на сервере сервер регистрируют ресурсы на основе файла дескриптора. При использовании мастера создания файлов в среде IDE для создания управляемого сообщениями компонента среда IDE сформирует элементы в файле дескриптора.
В проекте Maven файл glassfish-resources.xml расположен в каталоге src/main/setup в узле проекта в окне "Файлы".
- Щелкните правой кнопкой мыши модуль EJB в окне "Проекты" и выберите "Создать > Прочее" для открытия мастера создания файла.
- Из категории Enterprise JavaBeans выберите "Управляемый сообщениями компонент". Нажмите кнопку "Далее".
- В поле "Имя EJB" введите NewMessage.
- В раскрывающемся списке "Пакет" выберите ejb.
- Для открытия диалогового окна "Добавление адресата сообщения" нажмите кнопку "Добавить" рядом с полем "Адресат проекта".
- В диалоговом окне "Добавление адресата сообщения" введите jms/NewMessage и выберите "Очередь" для типа адресата. Нажмите кнопку "ОК".
- Убедитесь в правильности ввода назначения проекта. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" автоматически создается класс компонента, к которому добавляются следующие аннотации, идентифицирующие класс как компонент, управляемый сообщениями, а также свойства настройки.
@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() {
}
public void onMessage(Message message) {
}
}
- Введите в класс ресурс MessageDrivenContext посредством добавления к классу следующего аннотированного поля:
public class NewMessage implements MessageListener {
@Resource
private MessageDrivenContext mdc;
- Введите в класс диспетчер объектов посредством добавления к классу следующего аннотированного поля (выделено полужирным шрифтом):
public class NewMessage implements MessageListener {
@Resource
private MessageDrivenContext mdc;
@PersistenceContext(unitName="com.mycompany_MavenEnterpriseApp-ejb_ejb_1.0-SNAPSHOTPU")
private EntityManager em;
Аннотация @PersistenceContext указывает контекст путем объявления блока сохранения состояния. Значение unitName представляет собой имя блока сохранения состояния.
- Добавьте следующий метод save (выделен полужирным шрифтом).
public NewMessage() {
}
public void onMessage(Message message) {
}
private void save(Object object) {
em.persist(object);
}
- Измените метод 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();
}
}
- Исправьте операторы импорта (CTRL+SHIFT+I; ⌘+SHIFT+I на компьютере Mac) и сохраните изменения.
Примечание. При создании операторов импорта необходимо предусмотреть импорт библиотек jms и javax.annotation.Resource.
Подробные сведения об управляемых сообщениями компонентах приведены в главе Что такое управляемый сообщениями компонент? в руководстве по Java EE 6. Часть I.
Создание сеансного компонента
В этом упражнении будет использоваться мастер создания фасада сеанса для класса сущности NewsEntity. В этом мастере создается ряд общих методов создания, редактировани и поиска, к которым смогут осуществлять доступ сервлеты веб-приложения.
- Щелкните модуль EJB правой кнопкой мыши и выберите команду "Создать > Прочее".
- Из категории "Сохранение состояния" выберите "Сеансные компоненты для классов сущностей" и нажмите кнопку "Далее".
- Из списка доступных классов сущностей выберите ejb.NewsEntity и нажмите кнопку "Добавить", чтобы переместить класс на панель "Выбранные классы сущностей". Нажмите кнопку "Далее".
- В качестве пакета выберите ejb.
- Создавать интерфейс не нужно. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" среда IDE создает два класса фасада сеанса: AbstractFacade.java и NewsEntityFacade.java, последний расширяет класс абстрактного фасада. Класс абстрактного фасада определяет несколько методов, которые обычно используются с классами сущностей.
В Java EE 6 интерфейсы использовать не обязательно. В Java EE 5 для сеансового компонента необходимо создать локальный интерфейс, и впоследствии вызывать этот сеансовый компонент через созданный интерфейс. В Java EE 6 локальный интерфейс не является обязательным, и доступ сервлета из веб-модуля к сеансовому компоненту возможен непосредственно через безынтерфейсовый фасад.
Написание кода веб-приложения
В примере в этом разделе будет создано два сервлета в проекте веб-приложения.
Создание сервлета ListNews
В этом упражнении будет создан сервлет ListNews, используемый для вывода списка отправленных сообщений. Для ввода в фасад сеанса и доступа к методу findAll и получения отправлнных сообщений используются аннотации.
- Щелкните проект веб-модуля правой кнопкой мыши и выберите "Создать" > "Сервлет".
- В поле "Имя класса" введите ListNews.
- В качестве имени пакета введите web. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" класс ListNews.java будет открыт в редакторе исходного кода.
- Щелкните правой кнопкой мыши в редакторе исходного кода в определении класса и выберите команду "Вставка кода" (ALT+ISERT; CTRL+I на компьютере Mac) > "Вызов компонента EJB".
- В диалоговом окне "Вызов компонента EJB" разверните узел MavenEnterpriseApp-ejb и выберите NewsEntityFacade. Нажмите кнопку "ОК".
При нажатии кнопки ОК выполняется ввод ресурса EJB в сервлет с использованием аннотации @EJB.
@WebServlet(name = "ListNews", urlPatterns = {"/ListNews"})
public class ListNews extends HttpServlet {
@EJB
private NewsEntityFacade newsEntityFacade;
- В методе 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, возможно, будет необходимо убрать комментарий с кода.
- Исправьте параметры импорта (CTRL+SHIFT+I; ⌘+SHIFT+I на компьютере Mac) и сохраните измененные данные.
При создании операторов импорта может потребоваться импортировать библиотеки java.util.
Создание сервлета PostMessage
В этом упражнении будет создан сервлет PostMessage, используемый для отправки сообщений. Для добавления созданных ресурсов JMS непосредственно в сервлет используются аннотации с указанием имени переменной и имени, на которое она отображается. Затем необходимо написать код для отправки сообщения JMS и код для формы HTML, предназначенной для добавления сообщения.
- Щелкните проект веб-модуля правой кнопкой мыши и выберите "Создать" > "Сервлет".
- В поле "Имя класса" введите PostMessage.
- В качестве имени пакета выберите web. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" в редакторе исходного кода будет открыт класс PostMessage.java.
- Используйте аннотации в редакторе исходного кода для ввода ресурсов 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;
- Для импорта библиотек javax.jms исправьте параметры импорта.
Примечание. Если в среде IDE не предлагается вариант выбора javax.jms, можно выполнить поиск правильного артефакта в репозиториях, щелкнув значок предложения на поле рядом со строкой private ConnectionFactory connectionFactory; и выбрав "Поиск зависимости в репозиториях Maven".
Для поиска артефакта javaee-api-6.0, содержащего ConnectionFactory можно воспользоваться диалоговым окном "Поиск в репозиториях Maven".
- Добавьте следующие строки, используемые для отправки сообщений JMS, к методу processRequest.
response.setContentType("text/html;charset=UTF-8");
// Добавьте следующий код для отправки сообщения JMS
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();
// здесь создается сущность NewsEntity, отправляемая в сообщении JMS
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();
}
}
- Добавьте следующие строки, используемые для отправки сообщений (выделены жирным шрифтом) к веб-форме.
out.println("Servlet PostMessage at " + request.getContextPath() + "</h1>");
// Следующий код служит для размещения формы на веб-странице
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, возможно, будет необходимо убрать комментарий с кода.
- Исправьте операторы импорта и сохраните измененные данные.
Примечание. Может потребоваться импорт библиотек 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 в проекте веб-приложения: архив EJB объявлен как зависимость и для области выбрано указана. В случае когда значение элемента области артефакта указано, артефакт не будет включен при пакетировании. Архив·EJB·требуется·проектом·веб-приложения·как·зависимость,·однако·для·этого·приложения·не·требуется·включать·архив·EJB·в·WAR·при·пакетировании,·так·как·архив EJB предоставляется для использования в веб-приложении в составе архива EAR.
Для просмотра визуального представления зависимостей проекта можно щелкнуть правой кнопкой мыши файл pom.xml и выбрать "Показать граф зависимостей". Наведите указатель мыши на артефакт для отображения всплывающей подсказки с подробными данными артефакта.
Выполните следующие действия для изменения файла POM проекта веб-приложения и добавьте элемент scope scope к зависимости в артефакте javaee-api.
- Разверните узел "Файлы проекта" для проекта веб-приложения.
- Дважды щелкните pom.xml для открытия файла в редакторе.
- Измените зависимость в артефакте 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 содержится объявление предоставленной зависимости, этот артефакт не пакетируется Maven при сборке архива WAR.
Примечание. При использовании среды IDE NetBeans 6.9 необходимо в файле pom.xml также добавить элемент <scope>provided</scope> к зависимости в архиве EJB.
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>MavenEnterpriseApp-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
- Сохраните изменения.
Сборка проекта с зависимостями
Платформа сборки Maven проходит через определенную последовательность этапов, и каждый этап подразумевает выполнение одной или нескольких задач, причем можно настроить использование различных подключаемых модулей Maven. Пункт меню "Сборка вместе с зависимостями" соответствует этапу install жизненного цикла сборки Maven, и для него настроено использование подключаемого модуля Reactor. При выборе пункта раскрывающегося меню "Сборка вместе с зависимостями" Maven выполняет сборку приложения и всех необходимых зависимостей, после чего артефакты сборки копируются в локальный репозиторий.
Можно настроить привязку целей к операциям в меню "Действия" в диалоговом окне "Свойства" проекта.
Для сборки архива EAR выполните следующее действие.
- Щелкните правой кнопкой мыши узел проекта MavenEnterpriseApp-ear и выберите команду "Сборка вместе с зависимостями".
При сборке проекта EAR с использование подключаемого модуля Reactor сборка зависимостей подпроектов выполняется перед сборкой проекта EAR. В окне "Вывод" отображается порядок сборки.
Результаты сборки также отображаются в окне "Вывод".
После сборки проекта EAR итоговый архив EAR отображается в каталоге target в узле проекта EAR в окне "Файлы".
Если использовано имя артефакта по умолчанию com.mycompany, для просмотра артефактов сборки в обозревателе репозиториев Maven можно развернуть узел com.mycompany в локальном репозитории.
Подробные сведения о сборке проектов Maven приведены в документе Maven - Введение в жизненный цикл сборки по адресу maven.apache.org.
Развертывание и выполнение приложения
В этом разделе описываются два метода развертывания архива EAR на сервере. Приложение можно развернуть на сервере GlassFish с помощью действия меню в среде IDE или с помощью средства развертывания в консоли администратора GlassFish.
Развертывание и выполнение приложения из среды IDE
В этом упражнении мы используем действие "Выполнить" для развертывания архива EAR на сервере GlassFish. После развертывания будет необходимо открыть страницу ListNews приложения в обозревателе и добавить сообщение.
- Щелкните правой кнопкой мыши узел проекта EAR в окне "Проекты" и выберите "Выполнение".
При нажатии команды "Выполнение" среда IDE разворачивает архив EAR и создает ресурсы JMS на сервере. Среда IDE откроет установленную по умолчанию начальную страницу приложения (http://localhost:8080/MavenEnterpriseApp-web/) в обозревателе.
- Для вывода страницы ListNews откройте в обозревателе следующий адрес URL.
http://localhost:8080/MavenEnterpriseApp-web/ListNews.
При первом выполнении проекта база данных пуста, и сообщения для вывода отсутствуют.

- Нажмите кнопку "Добавить сообщение".
- Введите сообщение в форму в сервлете PostMessage. Нажмите кнопку "Отправить запрос".
При добавлении сообщения с помощью сервлета PostMessage оно передается на постоянное хранение в управляемый сообщениями компонент. Для просмотра сообщений в базе данных вызывается сервлет ListNews. Список сообщений в базе данных, извлеченных сервлетом ListNews, часто выводится без нового сообщения, поскольку служба передачи сообщений работает асинхронно.
В проектах Maven, использующих сервер GlassFish в качестве целевого сервера, функции "Компиляция при сохранении" и "Развертывание при сохранении" включены по умолчанию. Например, при изменении и сохранении сервлета можно перезагрузить сервлет в обозревателе и просмотреть изменения без повторного развертывания приложения.
Примечание для работающих в среде IDE NetBeans 7.0.
В среде IDE NetBeans 7.0 для изменения цели Maven, указанной в действии "Выполнить", необходимо выполнить следующие действия. После изменения действия действием "Выполнить" можно будет пользоваться для развертывания архива EAR на сервере. При выборе действия "Выполнить" в диалоговом окне "Выберите сервер развертывания" система может выдать сообщение с предложением выбрать сервер GlassFish.
- В окне "Проекты" щелкните правой кнопкой мыши узел проекта EAR и выберите пункт "Свойства".
- Выберите пункт "Действия" в списке "Категории" на левой панели окна "Свойства".
- Выберите действие "Выполнить проект" из списка на правой панели.
- В поле "Цели выполнения" удалите цель package и введите install. Нажмите кнопку "OК".

Развертывание из консоли администратора GlassFish
В этом упражнении выполняется развертывание архива EAR с помощью средства "Развернуть" в консоли администратора Glassfish.
- Разверните узел "Серверы" в окне "Службы".
- Запустите сервер приложений GlassFish.
- Щелкните правой кнопкой мыши узел сервера приложений GlassFish и выберите "Просмотр консоли администратора" для открытия в обозревателе консоли администратора GlassFish.
- Щелкните узел "Приложения" на левой панели консоли администратора.
- Нажмите кнопку "Развернуть" на главной панели консоли администратора.
- Нажмите кнопку "Обзор" для поиска архива EAR приложения уровня предприятия.
Архив EAR расположен в каталоге target внутри каталога приложения уровня предприятия в локальной системе.
- Нажмите кнопку "ОК".
При нажатии кнопки "ОК" выполняется развертывание приложения с помощью средства развертывания GlassFish.
Примечание. Если развертывание выполняется с помощью инструмента развертывания в консоли администратора GlassFish, будет необходимо вручную создать ресурсы, запрашиваемые приложением, если они не существуют.
Загрузка проекта решения
Решение для данного учебного курса в виде проекта можно загрузить несколькими способами.
Дополнительные сведения
Дополнительные сведения о разработке приложений для Java EE в среде IDE NetBeans приведены в следующих материалах:
Дополнительные сведения по использованию компонентов уровня предприятия приведены в учебном курсе по Java EE 6.
Для того, чтобы иметь возможность оставлять комментарии и предложения, обращаться за поддержкой и получать информацию о последних достижениях в области функциональных возможностей разработки для Java EE с помощью среды IDE NetBeans, подпишитесь на список рассылки nbj2ee.