УДК 004.438Java EE
ББК 32.973.26-018.2
Х41
Дэвид Хеффельфингер
Х41 Java EE 6 и сервер приложений GlassFish 3. Пер. с англ.: Карышев Е. Н. –
М.: ДМК Пресс, 2013. – 416 с.: ил.
ISBN 978-5-94074-902-8
Книга представляет собой практическое руководство с очень удобным подходом, позволяющим
читателю быстрее освоить технологии Java EE 6. Все рассмотренные основные
интерфейсы Java EE 6 и подробная информация о сервере GlassFish 3 подкреплены практическими
примерами их использования.
Платформа Java Enterprise Edition (Java EE) 6 является отраслевым стандартом для корпоративных
вычислений Java, а сервер приложений GlassFish представляет собой эталонную
среду реализации спецификации Java EE. В книге рассматриваются различные соглашения
и аннотации Java EE 6, которые помогут существенно упростить разработку корпоративных
приложений Java. Описываются последние версии технологий Servlet, JSP, JSF, JPA, EJB
и JAX-WS, а также новые дополнения к специ фикации Java EE, в частности JAX-RS и
CDI. Рассмотрены задачи администрирования, конфигурирования и использования сервера
GlassFish 3 для развертывания корпоративных приложений.
Настоящее издание предназначено для разработчиков Java, желающих стать специалистами
в разработке корпоративных приложений с использованием платформы Java EE 6.
Для изучения материала необходимо иметь некоторый опыт работы с Java, однако знаний в
области Java EE или J2EE не требуется.
Книга официально рекомендуется компанией Oracle – разработчиком перечисленных
технологий – в качестве учебного пособия.
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted
in any form or by any means, without the prior written permission of the publisher, except in the case of brief
quotations embedded in critical articles or reviews.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было
форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических
ошибок все равно существует, издательство не может гарантировать абсолютную точность и
правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные
ошибки, связанные с использованием книги.
ISBN 978-1-849510-36-3 (англ.)
ISBN 978-5-94074-902-8 (рус.)
© Published by Packt Publishing Ltd.
© Оформление, перевод на русский язык
ДМК Пресс, 2013
Стр.5
Содержание
Об авторе ����������������������������������������������������������������������������������������� 5
О рецензентах ��������������������������������������������������������������������������������� 6
Содержание
Предисловие
7
16
Темы, освещаемые в книге ���������������������������������������������������������� 16
Что нужно для чтения этой книги ������������������������������������������������ 19
Для кого эта книга ������������������������������������������������������������������������ 19
Соглашения ���������������������������������������������������������������������������������� 19
Поддержка клиентов ��������������������������������������������������������������������� 20
Сообщения об ошибках ���������������������������������������������������������������� 20
Незаконное воспроизведение содержимого книги ���������������������� 21
Вопросы ����������������������������������������������������������������������������������������� 21
1. Знакомство с сервером GlassFish
22
Общий обзор Java EE и GlassFish ������������������������������������������������ 22
Новые возможности Java EE �������������������������������������������������������� 23
JavaServer Faces (JSF) 2�0 �������������������������������������������������������������� 23
Enterprise JavaBeans (EJB) 3�1 �������������������������������������������������������� 23
API Персистентности Java (JPA) 2�0 ����������������������������������������������� 24
Контексты и инжекция зависимости для Java (Web Beans 1�0) ����������� 24
API Java Сервлета 3.0 ������������������������������������������������������������������� 24
API Java для веб-сервисов RESTful (JAX-RS) 1.1 ����������������������������� 25
API Java для веб-сервисов XML (JAX-WS) 2.2 �������������������������������� 25
Архитектура Java для связывания с XML (JAXB) 2.2 ������������������������ 25
Новые возможности GlassFish v�3 ������������������������������������������������� 25
Преимущества GlassFish �������������������������������������������������������������� 26
Стр.8
8
Содержание
Получение GlassFish ��������������������������������������������������������������������� 27
Установка GlassFish ���������������������������������������������������������������������� 28
Зависимости GlassFish ����������������������������������������������������������������� 28
Выполнение установки ���������������������������������������������������������������� 29
Проверка установки ��������������������������������������������������������������������� 34
Развертывание нашего первого приложения Java EE �������������������� 35
Развертывание приложения через веб-консоль �������������������������������� 35
Отмена развертывания приложения через веб-консоль ��������������������� 37
Развертывание приложения с помощью командной строки ���������������� 38
Каталог autodeploy ����������������������������������������������������������������������� 39
Утилита командной строки asadmin ������������������������������������������������ 40
Домены GlassFish �������������������������������������������������������������������������� 41
Создание доменов ������������������������������������������������������������������������ 41
Удаление доменов ������������������������������������������������������������������������ 43
Остановка домена ������������������������������������������������������������������������� 43
Настройка подключения к базе данных ��������������������������������������� 43
Создание пулов соединений ��������������������������������������������������������� 44
Создание источников данных ������������������������������������������������������� 48
Заключительные замечания ��������������������������������������������������������� 49
Резюме �������������������������������������������������������������������������������������������� 49
2. Разработка и развертывание сервлета
50
Что такое сервлет? ������������������������������������������������������������������������ 50
Написание нашего первого сервлета �������������������������������������������� 51
Компиляция сервлета ������������������������������������������������������������������� 52
Конфигурирование сервлета �������������������������������������������������������� 53
Упаковка веб-приложения ������������������������������������������������������������ 55
Развертывание веб-приложения ��������������������������������������������������� 56
Тестирование веб-приложения ���������������������������������������������������� 56
Обработка HTML-форм ���������������������������������������������������������������� 58
Переадресация запросов и перенаправление откликов �������������� 64
Переадресация запроса ���������������������������������������������������������������� 64
Перенаправление отклика ������������������������������������������������������������ 67
Стр.9
Содержание
9
Сохранение данных приложения между запросами �������������������� 69
Новые возможности, появившиеся в Сервлете 3.0 ���������������������� 71
Необязательный дескриптор развертывания web.xml ������������������� 71
Аннотация @WebServlet �������������������������������������������������������������� 71
Передача сервлету параметров инициализации через аннотации � 73
Аннотация @WebFilter ����������������������������������������������������������������� 74
Аннотация @WebListener ������������������������������������������������������������� 76
Подключаемость ������������������������������������������������������������������������� 78
Программное конфигурирование веб-приложений ����������������������� 80
Асинхронная обработка ���������������������������������������������������������������� 82
Резюме ������������������������������������������������������������������������������������������� 84
3. JavaServer Pages
85
Введение в JavaServer Pages ���������������������������������������������������������� 85
Разработка нашей первой JSP-страницы ������������������������������������ 86
Неявные объекты JSP ������������������������������������������������������������������� 90
JSP и JavaBeans ������������������������������������������������������������������������������ 97
Повторное использование JSP-контента ������������������������������������� 101
Пользовательские теги JSP ���������������������������������������������������������� 103
Расширение класса SimpleTagSupport ����������������������������������������� 104
Использование файлов тегов для создания
пользовательских тегов JSP ��������������������������������������������������������� 109
Унифицированный язык выражений ���������������������������������������� 113
XML-синтаксис JSP ��������������������������������������������������������������������� 116
Резюме ������������������������������������������������������������������������������������������� 118
4. Библиотека стандартных тегов JSP
119
JSTL-библиотека базовых тегов �������������������������������������������������� 119
JSTL-библиотека тегов форматирования ����������������������������������� 127
JSTL-библиотека SQL-тегов �������������������������������������������������������� 131
JSTL-библиотека XML-тегов ������������������������������������������������������ 136
Функции JSTL ����������������������������������������������������������������������������� 140
Резюме ������������������������������������������������������������������������������������������� 143
Стр.10
10
5. Подключение к базе данных
Содержание
144
База данных CUSTOMERDB ������������������������������������������������������ 144
JDBC ���������������������������������������������������������������������������������������������� 145
Извлечение данных из базы данных �������������������������������������������� 146
Изменение информации в базе данных ��������������������������������������� 152
API Персистентности Java ����������������������������������������������������������� 154
Отношения сущности ������������������������������������������������������������������ 159
Отношения «один к одному» ������������������������������������������������������� 159
Отношения «один ко многим» ����������������������������������������������������� 164
Отношения «многие ко многим» �������������������������������������������������� 168
Составные первичные ключи ������������������������������������������������������ 173
Язык запросов персистентности Java ����������������������������������������� 177
Новые функции, введенные в JPA 2.0 ���������������������������������������� 181
API Критериев ���������������������������������������������������������������������������� 181
Поддержка проверки допустимости со стороны бинов ���������������� 184
Резюме ������������������������������������������������������������������������������������������� 186
6. Java Server Faces
Введение в JSF 2.0 ������������������������������������������������������������������������� 187
Фэйслеты ������������������������������������������������������������������������������������ 187
Необязательный файл faces-config.xml ���������������������������������������� 188
Стандартное расположение ресурсов ������������������������������������������ 188
Разработка нашего первого JSF 2.0-приложения ����������������������� 189
Фэйслеты ������������������������������������������������������������������������������������ 189
Этапы проекта ����������������������������������������������������������������������������� 193
Проверка допустимости �������������������������������������������������������������� 195
Группировка компонентов ���������������������������������������������������������� 197
Отправка формы �������������������������������������������������������������������������� 197
Управляемые бины ���������������������������������������������������������������������� 198
Контексты управляемых бинов ���������������������������������������������������� 199
Навигация ���������������������������������������������������������������������������������� 200
Пользовательская проверка допустимости данных ������������������ 201
Создание нестандартных элементов верификации ��������������������� 202
Методы блока проверки допустимости ��������������������������������������� 204
187
Стр.11
Содержание
11
Настройка сообщений JSF по умолчанию ���������������������������������� 207
Настройка стилей сообщения ������������������������������������������������������ 207
Настройка текста сообщения ������������������������������������������������������� 209
Интеграция JSF и JPA ������������������������������������������������������������������ 211
Включение Ajax в приложения JSF 2.0 ���������������������������������������� 218
Стандартные компоненты JSF ��������������������������������������������������� 222
Базовые компоненты JSF ������������������������������������������������������������� 222
Тег ������������������������������������������������������������������ 222
Тег ������������������������������������������������������������������������������� 222
Тег �������������������������������������������������������������������������� 223
Тег ������������������������������������������������������������� 223
Тег ���������������������������������������������������������������� 223
Тег ������������������������������������������������������������������������ 224
Тег ����������������������������������������������������������������������������� 224
Тег ������������������������������������������������������������������������������ 225
Тег ��������������������������������������������������������������������� 225
Тег ������������������������������������������������������������������������� 225
Тег ���������������������������������������������������������������������������� 226
Тег ������������������������������������������������������������������ 226
Тег ����������������������������������������������������������������������� 226
Тег ���������������������������������������������������������������������� 226
Тег �������������������������������������������������� 227
Тег �������������������������������������������������������������������������� 227
Тег ������������������������������������������������������������������� 227
Тег �������������������������������������������������������� 228
Тег ����������������������������������������������������������������� 228
Тег ����������������������������������������������������������� 228
Тег ������������������������������������������������������������������ 229
Тег �������������������������������������������������������������� 229
Тег ������������������������������������������������������������������������� 229
Тег ��������������������������������������������������������� 229
Тег ������������������������������������������������������������������������� 230
Тег ������������������������������������������������������������������������������ 230
Тег ���������������������������������������������������������������������� 230
Стр.12
12
Содержание
HTML-компоненты JSF ��������������������������������������������������������������� 231
Тег ����������������������������������������������������������������������������� 231
Тег ���������������������������������������������������������������������������� 231
Тег �������������������������������������������������������������������������� 231
Тег �������������������������������������������������������������� 231
Тег ����������������������������������������������������������������� 232
Тег ����������������������������������������������������������������������� 232
Тег ������������������������������������������������������������������������������ 232
Тег ������������������������������������������������������������������ 233
Тег ������������������������������������������������������������������������������ 233
Тег �������������������������������������������������������������������� 233
Тег ��������������������������������������������������������������������� 233
Тег ����������������������������������������������������������������������� 234
Тег ������������������������������������������������������������������ 234
Тег ������������������������������������������������������������������������������� 234
Тег ������������������������������������������������������������������������� 234
Тег ������������������������������������������������������������������������ 235
Тег ������������������������������������������������������������������ 235
Тег �������������������������������������������������������������������� 235
Тег ��������������������������������������������������������������������� 236
Тег �������������������������������������������������������������������� 236
Тег �������������������������������������������������������������� 236
Тег ���������������������������������������������������������������������� 236
Тег ����������������������������������������������������������������������� 236
Тег �������������������������������������������������������������������� 237
Тег ���������������������������������������������������� 238
Тег ������������������������������������������������������� 238
Тег ����������������������������������������������������������� 238
Тег ������������������������������������������������������������� 239
Тег ������������������������������������������������������������� 239
Тег ��������������������������������������������������������������� 239
Тег ��������������������������������������������������������������� 239
Дополнительные библиотеки компонентов JSF ��������������������������� 240
Резюме ������������������������������������������������������������������������������������������ 240
Стр.13
Содержание
13
7. Служба обмена сообщениями Java
241
Настройка GlassFish для использования JMS ��������������������������� 241
Создание фабрики JMS-соединений �������������������������������������������� 241
Создание очереди JMS-сообщений ���������������������������������������������� 243
Создание темы JMS-сообщений �������������������������������������������������� 244
Очереди сообщений ���������������������������������������������������������������������� 245
Отправка сообщений в очередь сообщений ��������������������������������� 245
Извлечение сообщений из очереди сообщений ��������������������������� 249
Асинхронный прием сообщений из очереди сообщений ������������� 250
Просмотр очередей сообщений ��������������������������������������������������� 253
Темы сообщений ��������������������������������������������������������������������������� 254
Отправка сообщений теме сообщений ���������������������������������������� 254
Получение сообщений от темы сообщений ��������������������������������� 255
Создание долговременных подписчиков �������������������������������������� 257
8. Безопасность
Резюме ������������������������������������������������������������������������������������������� 260
261
Области безопасности ������������������������������������������������������������������ 261
Предопределенные области безопасности ���������������������������������� 262
Область администратора ������������������������������������������������������������� 262
Область файла ��������������������������������������������������������������������������� 264
Стандартная аутентификация через область файла ��������������������� 265
Область сертификата ������������������������������������������������������������������ 276
Создание самоподписанных сертификатов ��������������������������������� 276
Конфигурирование приложений для использования
области сертификата ������������������������������������������������������������������� 280
Определение дополнительных областей ������������������������������������� 283
Определение дополнительных областей файла ��������������������������� 283
Определение дополнительных областей сертификата ����������������� 285
Определение области LDAP �������������������������������������������������������� 286
Определение области Solaris ������������������������������������������������������� 287
Определение области JDBC ��������������������������������������������������������� 288
Определение пользовательских областей ����������������������������������� 293
Резюме ������������������������������������������������������������������������������������������ 298
Стр.14
14
9. Enterprise JavaBeans
Содержание
299
Сеансовые бины ��������������������������������������������������������������������������� 300
Простой сеансовый бин ��������������������������������������������������������������� 300
Более реалистический пример ����������������������������������������������������� 303
Вызов сеансовых бинов из веб-приложений �������������������������������� 305
Одноэлементный сеансовый бин (Singleton) ������������������������������� 306
Асинхронные вызовы метода ������������������������������������������������������ 307
Управляемые сообщением бины ������������������������������������������������� 309
Транзакции в Enterprise JavaBeans �������������������������������������������� 310
Транзакции, управляемые контейнером �������������������������������������� 311
Транзакции, управляемые бином ������������������������������������������������� 313
Жизненный цикл Enterprise JavaBeans ��������������������������������������� 315
Жизненный цикл сеансового бина с сохранением состояния ������ 316
Жизненный цикл сеансового бина, не сохраняющего состояние � 319
Жизненный цикл управляемых сообщением бинов ��������������������� 321
Служба таймера EJB ������������������������������������������������������������������� 322
Выражения таймера EJB на основе календаря ����������������������������� 324
Безопасность EJB ������������������������������������������������������������������������� 326
Аутентификация клиента ����������������������������������������������������������� 329
Резюме ������������������������������������������������������������������������������������������� 330
10. Контексты и инжекция зависимости
Именованные бины ���������������������������������������������������������������������� 332
Инжекция зависимости ���������������������������������������������������������������� 334
Квалификаторы ��������������������������������������������������������������������������� 335
Контексты именованных бинов ��������������������������������������������������� 338
Резюме ������������������������������������������������������������������������������������������ 345
11. Веб-сервисы JAX-WS
346
Разработка веб-сервисов JAX-WS ���������������������������������������������� 346
Разработка клиента веб-сервиса ������������������������������������������������� 351
Отправка вложений веб-сервисам ����������������������������������������������� 357
332
Стр.15
Содержание
15
Представление EJB как веб-сервисов ����������������������������������������� 359
Клиенты веб-сервиса EJB ����������������������������������������������������������� 360
Безопасность веб-сервисов ��������������������������������������������������������� 360
Безопасность веб-сервисов EJB �������������������������������������������������� 362
Резюме ������������������������������������������������������������������������������������������� 364
12. RESTful веб-сервисы в Jersey и JAX-RS
Введение в веб-сервисы RESTful и JAX-RS �������������������������������� 365
Разработка простого веб-сервиса RESTful ���������������������������������� 366
Конфигурирование пути к ресурсам REST для
нашего приложения ��������������������������������������������������������������������� 368
Конфигурирование через web.xml ������������������������������������������������ 368
Конфигурирование через аннотацию @ApplicationPath ������������������� 369
Тестирование нашего веб-сервиса ���������������������������������������������� 370
Преобразование данных между Java и XML с помощью JAXB �� 372
Разработка клиента веб-сервиса RESTful ����������������������������������� 375
Параметры запроса и пути ���������������������������������������������������������� 377
Параметры запроса ��������������������������������������������������������������������� 377
Отправка параметров запроса через клиентский API Jersey ������������� 378
Параметры пути �������������������������������������������������������������������������� 380
Отправка параметров пути через клиентский API Jersey ����������������� 382
Приложение А: Отправка электронной почты из
приложений Java EE
384
Конфигурирование сервера GlassFish ����������������������������������������� 384
Реализация функциональности доставки
электронной почты ���������������������������������������������������������������������� 387
Приложение Б: Интеграция с IDE
Алфавитный указатель
390
NetBeans ��������������������������������������������������������������������������������������� 390
Eclipse �������������������������������������������������������������������������������������������� 392
397
365
Стр.16