corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Начало работы с приложениями Java EE 6

В этом документе содержится краткое описание некоторых возможностей, добавленных в спецификацию Java Enterprise Edition 6 (Java EE 6). Для демонстрации новых возможностей в этом руководстве будет представлен пример создания простого веб-приложения Java EE 6, содержащего фасад сеансного компонента без сохранения состояния EJB 3.1 для класса сущностей. Для создания класса сущностей и сеансного компонента в среде IDE используются мастеры. В созданном с помощью мастера коде используются запросы, определенные в интерфейсе Criteria API, который добавлен в JPA 2.0 и входит в состав спецификации Java EE 6. Затем создается управляемый компонент с именем, имеющий доступ к фасаду сеанса и уровню представления, на котором используется инфраструктура вида Facelets, как указано в JSF 2.0.

Данное руководство основано на сообщении в блоге Простейший компонент JSF 2 / EJB 3.1 / JPA - с развертыванием WAR , Адам Бьен (Adam Bien). Дополнительные примеры по Java EE можно найти в проекте Kenai Эдама Бьена (Adam Bien) Шаблоны Java EE и практические рекомендации, а также в его книге "Реальные шаблоны Java EE - пересмотр практических рекомендаций", которую можно найти по адресу http://press.adam-bien.com.

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

Содержимое этой страницы относится к среде IDE NetBeans 6.8, 6.9 и 7.0

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

Программное обеспечение или ресурс Требуемая версия
Среда IDE NetBeans 6.8, 6.9 или 7.0, версия Java
Комплект для разработчика на языке Java (JDK) версия 6
GlassFish Server Open Source Edition 3.x

Примечания.

  • Для среды IDE NetBeans 6.9, 7.0 и сервера GlassFish 3.x необходим пакет программ для разработки приложений на языке Java (JDK) 6.

Предпосылки

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

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

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

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

В этом упражнении создается простое веб-приложение. При создании веб-приложения укажите входящий в комплект поставки сервер приложений GlassFish Server 3 в качестве целевого контейнера Java EE. Сервер GlassFish совместим с Java EE и включает в себя библиотеки JSF 2.0, требуемые для этого приложения.

В мастере создания проекта выберите Java EE 6 Web в качестве версии Java EE. Java EE 6 Web является упрощенным профилем Java EE 6, который содержит подмножество полной платформы Java EE 6. Профиль Java EE 6 Web разработан для веб-приложений, для которых не требуются расширенные технологии Java EE 6, такие как поддержка удаленных интерфейсов, полная спецификация EJB 3.1 и интерфейс API службы передачи сообщений (JMS).

Веб-профиль поддерживает обработку транзакций и управление сохранением состояния, которые часто используются в веб-приложениях уровня предприятия. Веб-профиль Java EE Web можно использовать для веб-приложений, в которых применяются сеансные компоненты с локальным интерфейсом или без интерфейса. При использовании в приложении удаленного интерфейса необходим полный профиль Java EE.

  1. Выберите в главном меню "Файл" > "Создать проект" (CTRL+SHIFT+N).
  2. Выберите веб-приложение из категории "Java Web" и нажмите кнопку "Далее".
  3. Введите SimpleEE6App в качестве имени проекта и укажите местоположение проекта.
  4. Снимите флажок "Использовать отдельную папку", если он установлен. Нажмите кнопку "Далее".
    (В рамках этого руководства копирование библиотек проекта в отдельную папку нецелесообразно, поскольку совместное использование библиотек с другими пользователями или проектами не требуется.)
  5. Выберите сервер GlassFish и установите в поле "Версия Java EE" версию Java EE 6 Web. Нажмите кнопку "Далее".
    Мастер создания проекта
  6. Выберите в панели "Платформы" JavaServer Faces. Нажмите кнопку "Готово".

    В случае разработки веб-приложения Java EE 6 и его развертывания на сервере GlassFish в среде IDE По умолчанию устанавливается библиотека JSF 2.0. Библиотека JSF 2.0 обеспечивает возможность использования архитектуры Facelets для языка страницы, а также поддержку для JSF 1.2 и JSP.

    Мастер создания проекта

При нажатии кнопки "Завершить" проект будет создан в среде IDE, который откроется в окне "Проекты". В среде IDE автоматически будет создана страница JSF index.xhtml и открыта в редакторе.

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

В этом разделе будет создан класс сущностей и фасад сеанса для класса сущностей. Класс сущностей – это простой старый объект Java (Plain Old Java Object, POJO), простой класс Java, идентифицированный аннотацией @Entity как сущность. Начиная со спецификации Java EE 5 классы сущностей можно использовать в качестве устойчивых объектов для представления таблиц в базе данных. Интерфейс Java Persistence API позволяет использовать сохранение состояния в веб-приложениях без необходимости создания модуля EJB.

Фасад сеанса для класса сущностей в этом приложении является сеансным компонентом без сохранения состояния. Архитектура Enterprise JavaBean (EJB) 3.1, добавленная в спецификацию Java EE 6, позволяет создавать сеансные компоненты без бизнес-интерфейсов, которые требовались в EJB 3.0. Кроме того, спецификация Java EE 6 позволяет запаковывать компоненты EJB непосредственно в архив WAR. Благодаря этому упрощается разработка небольших приложений за счет исключения необходимости создания отдельных модулей EJB, которые запаковываются как архив JAR в архив EAR. Однако для больших приложений J2EE, которые распределяются на разных машинах, остается необходимость в создании архивов EAR для отделения бизнес-логики от уровня представления.

Подробные сведения об использовании EJB 3.1 в среде IDE приведены в учебном курсе Создание приложения J2EE с помощью EJB 3.1.

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

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

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

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

Класс сущностей должен иметь первичный ключ. При создании класса сущностей с помощью мастера в среде IDE по умолчанию создается поле id и создается аннотация @Id для объявления этого поля в качестве первичного ключа. Также в среде IDE добавляется аннотация @GeneratedValue и указывается стратегия создания ключей для первичного поля id.

Использование в проекте интерфейса Java Persistence значительно упрощает разработку приложения в силу отсутствия необходимости настройки дескрипторов развертывания для определения информации относительно объектно-реляционного сопоставления для сохраняющих состояние полей или свойств. Вместо этого можно использовать аннотации для определения этих свойства непосредственно в простом классе Java.

Сохранением состояния объекта управляет интерфейс API EntityManager. Интерфейс API EntityManager обрабатывает контекст сохранения состояния, а каждый контекст сохранения состояния представляет собой группу экземпляров объекта. При разработке приложения для обозначения устойчивого экземпляра контекста для классов сущностей к классу можно добавить аннотации. В дальнейшем жизненный цикл экземпляров объекта управляется контейнером.

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

  1. Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".
  2. Выберите "Класс сущностей" в категории "Сохранение состояния". Нажмите кнопку "Далее".
  3. В поле "Имя класса" введите Message.
  4. В поле "Пакет" введите entities.
  5. Нажмите кнопку "Создать модуль сохранения состояния". Нажмите кнопку "Далее".

    Примечание. При нажатии в среде IDE NetBeans 6.8 кнопки "Создать модуль сохранения состояния" будет открыто диалоговое окно создания модуля сохранения состояния.

  6. Выберите источник данных (например, выберите jdbc/sample, если необходимо использовать JavaDB).

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

    Можно сохранить другие параметры по умолчанию (имя единицы сохранения состояния, поставщик сохранения состояния EclipseLink). Убедитесь в том, что для единицы сохранения состояния используется интерфейс Java Transaction API и что для стратегии создания таблиц установлено значение "Создать", т. е. таблицы на основе классов сущностей создаются при развертывании приложения.

  7. В мастере создания единицы сохранения состояния нажмите кнопку "Завершить".

    При нажатии кнопки "Завершить" в среде IDE будет создан класс сущностей, который откроется в редакторе. Как видно из примера, в среде IDE было создано поле id private Long id;, и для поля созданы аннотации @Id и @GeneratedValue(strategy = GenerationType.AUTO).

  8. В редакторе добавьте поле message (выделено полужирным шрифтом) под полем id.
    private Long id;
    private String message;
  9. Правой кнопкой мыши щелкните в области редактора и выберите команду "Вставить код" (CTRL+I), затем выберите "Методы получения и установки".
  10. В диалоговом окне "Создание методов получения и установки" выберите поле message и нажмите кнопку "Создать".

    В среде IDE будут созданы методы получения и установки для поля message.

    Мастер создания единицы сохранения состояния
  11. Сохраните изменения.

Класс сущностей представляет собой таблицу в базе данных. При запуске этого приложения автоматически будет создана таблица базы данных для сообщения. Таблица будет состоять из столбцов id и message.

Если проанализировать единицу сохранения состояния в редакторе XML, можно увидеть, что в приложении используется интерфейс Java Transaction API (JTA) (transaction-type="JTA"). Это указывает на то, что управление жизненным циклом сущностей в контексте сохранения состояния осуществляется контейнером. В результате требуется меньше строк кода, так как жизненный цикл сущностей управляется контейнером, а не приложением. Подробные сведения об использовании JTA для управления транзакциями приведены в документации по интерфейсу Java Transaction API.

Создание фасада сеанса

В этом упражнении будет использоваться мастер создания фасада сеанса без сохранения состояния для сущности Message. Согласно спецификации EJB 3.1. теперь бизнес-интерфейсы для сеансных компонентов не являются обязательными. В этом приложении, где клиент, имеющий доступ к компоненту, является локальным клиентом, для отображения компонента существует возможность использования представления с локальным интерфейсом или без интерфейса.

Для создания сеансного компонента выполните следующие шаги.

  1. Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".
  2. Выберите "Сеансные компоненты" для "Классов сущностей" из категории "Java EE". Нажмите кнопку "Далее".
  3. Выберите сущность Message и нажмите кнопку "Добавить". Нажмите кнопку "Далее".
  4. В поле "Пакет" введите boundary. Нажмите кнопку "Завершить".

    Обратите внимание на то, что создавать бизнес-интерфейс для сеансного компонента не требуется. Вместо этого в данном приложении компонент будет отображаться для локально управляемого компонента в представлении без интерфейса.

    Мастер создания сеансных компонентов для классов сущностей

При нажатии кнопки "Готово" в среде IDE создается класс фасада сеанса MessageFacade.java и AbstractFacade.java, и в редакторе открываются файлы. Аннотация @Stateless, используемая в приведенном созданном коде, служит для объявления класса MessageFacade.java в качестве элемента сеансного компонента без сохранения состояния. Класс MessageFacade.java расширяет класс AbstractFacade.java, содержащий бизнес-логику и управляющий транзакцией.

@Stateless
public class MessageFacade extends AbstractFacade<Message> {
    @PersistenceContext(unitName = "SimpleEE6AppPU")
    private EntityManager em;
            

При создании фасада для сущности с помощью мастера в среде IDE по умолчанию добавляется аннотация PersistenceContext (@PersistenceContext(unitName = "SimpleEE6AppPU")) для ввода ресурса диспетчера сущностей в элемент сеансного компонента и для определения имени единицы сохранения состояния. В этом примере имя единицы сохранения состояния объявлено явно, но имя не является обязательным, если в приложении используется только одна единица сохранения состояния.

Кроме того, среда IDE создает методы в AbstractFacade.java для создания, редактирования, удаления и поиска сущностей. В интерфейсе API EntityManager определяются методы взаимодействия с контекстом сохранения состояния. При этом в среде IDE создается несколько часто используемых методов запроса по умолчанию, которые могут использоваться для поиска объектов сущностей. В методах findAll, findRange и count используются методы, определенные в интерфейсе Criteria API для создания запросов. Интерфейс Criteria API добавлен в спецификацию JPA 2.0 в составе спецификации Java EE 6.

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

В примере в этом разделе с помощью JavaServer Faces (JSF) 2.0 будет создан уровень представления для приложения и управляемый базовый компонент, используемый на страницах JSF. Спецификация JSF 2.0 добавляет поддержку для Facelets в качестве предпочитаемой технологии управления представлением для приложений на основе JSF. Начиная с версии JSF 2.0, можно использовать аннотацию @ManagedBean в исходном коде для объявления класса управляемого компонента. Для объявления управляемых компонентов JSF больше не требуется добавлять записи в файл faces-config.xml. Для получения доступа к методам в управляемом компоненте можно использовать имена компонентов на страницах JSF.

Подробные сведения о поддержке среды IDE для спецификации JavaServer Faces 2.0 приведены в разделе Поддержка JSF 2.0 в среде IDE NetBeans версии 6.8.

Подробные сведения о спецификации JavaServer Faces 2.0 приведены в разделе "Технология JavaServer Faces" в учебном курсе по Java EE 6, часть I.

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

В этом упражнении будет создан простой управляемый компонент JSF, используемый для получения доступа к фасаду сеанса. Спецификация JSF 2.0, которая является частью Java EE 6, позволяет использовать аннотации в классе компонента для определения класса в качестве управляемого компонента JSF, указывать контекст и имя компонента.

Для создания управляемого компонента выполните следующие шаги.

  1. Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".
  2. Выберите "Управляемый компонент JSF" в категории "JavaServer Faces". Нажмите кнопку "Далее".
  3. В поле "Имя класса" введите MessageView.

    Имя управляемого компонента MessageView используется в качестве значения для inputText и commandButton на странице JSF index.xhtml при вызове методов в компоненте.

  4. В поле "Пакет" введите my.presentation.
  5. В поле "Имя", используемое для управляемого компонента, введите MessageView.

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

  6. Установите контекст для запроса. Нажмите кнопку "Завершить".
Мастер создания нового управляемого компонента JSF

При нажатии кнопки "Завершить" в среде IDE будет создан класс компонента, который откроется в редакторе. В окне "Проекты" выводятся следующие файлы.

Окно "Проекты" со структурой файлов

В редакторе можно увидеть, что в среде IDE добавлены аннотации @ManagedBean и @RequestScoped и имя компонента.

@ManagedBean(name="MessageView")
@RequestScoped
public class MessageView {

    /** Создает новый экземпляр MessageView */
    public MessageView() {
    }

}

Теперь добавляем аннотацию @EJB для использования учета зависимостей, чтобы получить ссылку на сеансный компонент MessageFacade. Также вызовем методы findAll и create, представленные в фасаде. Автозавершение кода среды IDE помогает при вводе методов.

  1. Правой клавишей мыши щелкните в области редактора и выберите команду "Вставить код" (CTRL+I) для открытия всплывающего меню.
  2. В всплывающем меню выберите "Вызов компонента EJB".
  3. В диалоговом окне "Вызов компонента EJB" выберите MessageFacade. Нажмите кнопку "OК".
    Диалоговое окно "Вызов компонента EJB"

    При нажатии кнопки "ОК" в среде IDE добавляется следующий код (выделено полужирным шрифтом) для ввода компонента.

    public class MessageView {
    
        /** Создание экземпляра MessageView */
        public MessageView() {
        }
    
        // Ввод компонента сеанса MessageFacade при помощи аннотации @EJB
        @EJB
        private MessageFacade messageFacade;
    }
    
  4. Для создания нового экземпляра добавьте следующий код.
    /** Создает новый экземпляр MessageView */
        public MessageView() {
           this.message = new Message();
        }
  5. Добавьте следующий код к классу.
        // Создает новое поле
        private Message message;
    
        // Создает новый экземпляр Message
        public MessageView() {
           this.message = new Message();
        }
    
        // Вызывает getMessage для получения сообщения
        public Message getMessage() {
           return message;
        }
    
        // Возвращает общее число сообщений
        public int getNumberOfMessages(){
           return messageFacade.findAll().size();
        }
    
        // Сохраняет сообщение и затем возвращает строку "theend"
        public String postMessage(){
           this.messageFacade.create(message);
           return "theend";
        }
    
  6. Исправьте выражения импорта (CTRL+SHIFT+I) и сохраните измененные данные.

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

Обратите внимание, что метод postMessage возвращает строку "theend". Спецификация JSF 2.0 позволяет использование имплицитных правил перехода в приложениях, в которых используется технология Facelets. В этом приложении не настроены правила перехода в faces-config.xml. Вместо этого обработчик переходов пытается найти подходящую страницу в приложении. В этом случае обработчик переходов пытается найти страницу с именем theend.xhtml при вызове метода postMessage.

Изменение страницы-указателя

В этом упражнении будет выполнено несколько простых изменений страницы index.xhtml для добавления компонентов пользовательского интерфейса. Выполняется добавление формы с текстовым полем для ввода и кнопкой.

  1. Откройте в редакторе index.xhtml.
  2. Измените файл для добавления следующей простой формы между тегами <h:body>.
    <h:body>
        <f:view>
            <h:form>
                <h:outputLabel value="Message:"/><h:inputText value="#{MessageView.message.message}"/>
                <h:commandButton action="#{MessageView.postMessage}" value="Post Message"/>
            </h:form>
        </f:view>
    </h:body>

    Автозавершение кода JSF может помочь при вводе кода.

    Автозавершение кода в редакторе исходного кода
  3. Сохраните изменения.

Компоненты inputText и commandButton вызывают методы в управляемом компоненте JSF с именем MessageView. Метод postMessage возвращает "theend", а обработчик переходов выполняет поиск страницы с именем theend.xhtml.

Создание страницы результатов

В этом упражнении будет создана страница JSF theend.xhtml. Эта страница будет отображаться при нажатии пользователем кнопки "Отправить сообщение" в index.xhtml и при вызове метода postMessage в управляемом компоненте JSF.

  1. Щелкните узел проекта правой кнопкой мыши и выберите команду "Создать" > "Другие".
  2. В категории "JavaServer Faces" выберите "Страница JSF". Нажмите кнопку "Далее".
  3. В поле "Имя файла" введите theend.
  4. Убедитесь, что выбран параметр Facelets. Нажмите кнопку "Завершить".
  5. Измените файл посредством ввода следующего кода между тегов <h:body>.
    <h:body>
        <h:outputLabel value="Thanks! There are "/>
        <h:outputText value="#{MessageView.numberOfMessages}"/>
        <h:outputLabel value=" messages!"/>
    </h:body>

В начале ввода в среде IDE автоматически добавляется определение библиотеки тегов xmlns:h="http://java.sun.com/jsf/html к файлу для элементов JSF.

Выполнение приложения

Кодировка приложения завершена. Теперь можно протестировать приложение в обозревателе.

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

    При выборе команды "Выполнить" в среде IDE происходит сборка и развертывание приложения, и в обозревателе открывается index.xhtml.

  2. Введите сообщение в текстовое поле. Нажмите кнопку "Отправить сообщение".
    Приложение в обозревателе

При нажатии кнопки "Отправить сообщение" сообщение сохраняется в базе данных, и извлекается и отображается число сообщений

Приложение в обозревателе с результатами

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

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

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

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

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

    Примечания.



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

Дополнительные сведения о разработке приложений для Java EE в среде IDE NetBeans приведены в следующих материалах:

Подробные сведения об использовании технологий Java EE 6 для развертывания приложений приведены в учебном курсе по Java EE 6.

Для того, чтобы иметь возможность оставлять комментарии и предложения, обращаться за поддержкой и получать информацию о последних достижениях в области функциональных возможностей разработки для Java EE с помощью среды IDE NetBeans, подпишитесь на список рассылки nbj2ee.