Изучаем Java EE. Современное программирование для больших предприятий

Себастьян Дашнер

Оглавление
Предисловие............................................................................................................12
Об авторе ................................................................................................................14
О рецензенте...........................................................................................................15
Благодарности.........................................................................................................16
Введение .................................................................................................................18
Структура книги ................................................................................................. 18
Что вам понадобится для этой книги .................................................................. 19
Для кого предназначено это издание ................................................................. 20
Условные обозначения ....................................................................................... 20
Загрузка примеров кода ..................................................................................... 20
Глава 1. Вступление ............................................................................................. 22
Новые требования к корпоративным системам ................................................... 22
Современный способ построения корпоративных систем.................................... 24
Значение Java EE для современных систем......................................................... 24
Обновление и перспектива развития Java EE 8................................................... 25
Java Community Process ...................................................................................... 26
Что вы найдете в этой книге .............................................................................. 27
Глава 2. Проектирование и структурирование приложений Java Enterprise ........... 29
Назначение корпоративных приложений............................................................ 29
На чем сосредоточиться разработчику ......................................................... 30
Удовлетворение требований клиентов ......................................................... 30
Внешняя структура корпоративного проекта ...................................................... 31
Структура бизнеса и группы разработчиков ................................................. 32
Содержимое программных проектов............................................................. 32
Одно- и многомодульные проекты................................................................ 36
Иллюзии повторного использования ............................................................ 37
Артефакты проекта ...................................................................................... 38
Оглавление   7
Один проект — один артефакт ..................................................................... 39
Сборка систем в Java EE ............................................................................... 39
Структурирование для современных клиентских технологий........................ 45
Структура кода корпоративного проекта ............................................................ 48
Ситуация в корпоративных проектах............................................................ 48
Структурирование по горизонтали и по вертикали....................................... 49
Структура, продиктованная бизнес-логикой ................................................. 50
Рациональное проектирование модулей....................................................... 50
Реализация пакетных структур..................................................................... 52
Не перегружайте архитектуру ...................................................................... 57
Резюме............................................................................................................... 59
Глава 3. Внедрение современных приложений Java Enterprise .............................. 60
Границы бизнес-сценариев................................................................................. 60
Бизнес-компоненты ядра в современной Java EE ................................................ 61
EJB и CDI: общее и различия........................................................................ 62
Генераторы CDI............................................................................................ 64
Генерация событий предметной области...................................................... 64
Области видимости ...................................................................................... 66
Шаблоны проектирования в Java EE ................................................................... 67
Обзор шаблонов проектирования................................................................. 67
Проблемно-ориентированное проектирование ............................................. 83
Внешняя и сквозная функциональность в корпоративных приложениях ............. 87
Обмен данными с внешними системами ....................................................... 87
Системы управления базами данных .......................................................... 121
Сквозные задачи ........................................................................................ 131
Настройка приложений .............................................................................. 133
Кэширование.............................................................................................. 135
Последовательность выполнения ..................................................................... 137
Синхронное выполнение ............................................................................ 137
Асинхронное выполнение........................................................................... 138
Концепции и принципы проектирования в современной Java EE....................... 145
Удобный в сопровождении высококачественный код........................................ 147
Резюме............................................................................................................. 148
Глава 4. Облегченная Java EE ............................................................................ 150
Облегченная технология корпоративной разработки........................................ 150
Зачем нужны стандарты Java EE ....................................................................... 151
Соглашения о конфигурации ............................................................................ 152
Управление зависимостями в проектах Java EE................................................. 153
Облегченный способ упаковки приложений...................................................... 155
Серверы приложений Java EE ........................................................................... 158
Одно приложение — один сервер приложений................................................. 160
Резюме............................................................................................................. 161
Глава 5. Java EE в контейнерных и облачных средах .......................................... 162
Цели и обоснование использования ................................................................. 162
Инфраструктура как код............................................................................. 164
Стабильность и готовность к эксплуатации ................................................ 165
8   Оглавление
Контейнеры...................................................................................................... 166
Java EE в контейнере........................................................................................ 168
Фреймворки управления контейнерами ............................................................ 170
Реализация управления контейнерами ............................................................. 171
Java EE в управляемых контейнерах ................................................................. 177
Подключение к внешним сервисам............................................................. 177
Конфигурирование управляемых приложений............................................ 178
Двенадцатифакторные приложения и Java EE .................................................. 179
Одна кодовая база в системе контроля версий и множество
развертываний........................................................................................... 180
Явное объявление и изоляция зависимостей.............................................. 181
Хранение конфигурации в среде ................................................................ 181
Вспомогательные сервисы как подключаемые ресурсы .............................. 182
Строгое разделение этапов сборки и запуска ............................................. 182
Выполнение приложения как одного или нескольких процессов
без сохранения состояния .......................................................................... 183
Экспорт сервисов через привязку портов ................................................... 183
Масштабирование с помощью процессов.................................................... 184
Максимальная надежность, быстрый запуск и плавное отключение ........... 184
Максимально единообразная разработка, установка и запуск
в эксплуатацию.......................................................................................... 185
Журналы как потоки событий..................................................................... 186
Запуск задач администрирования и управления как однократных
процессов .................................................................................................. 187
Облака, облачные приложения и их преимущества .......................................... 188
Резюме............................................................................................................. 190
Глава 6. Рабочие процессы создания приложений ............................................. 192
Цели и обоснование построения продуктивных рабочих процессов.................. 192
Реализация процессов разработки.................................................................... 194
Всё под контролем версий.......................................................................... 195
Сборка двоичных файлов........................................................................... 196
Гарантия качества...................................................................................... 199
Развертывание ........................................................................................... 201
Миграция данных ....................................................................................... 205
Тестирование............................................................................................. 211
Метаданные сборки.................................................................................... 212
Передача в эксплуатацию .......................................................................... 213
Модели ветвления...................................................................................... 214
Технология................................................................................................. 215
Конвейер как код ....................................................................................... 216
Рабочие процессы в Java EE ............................................................................. 219
Культура непрерывной поставки и культура разработки................................... 220
Ответственность ........................................................................................ 221
Проверять рано и часто ............................................................................. 221
Проблемы немедленных исправлений ........................................................ 222
Прозрачность ............................................................................................. 223
Постоянное совершенствование................................................................. 224
Резюме............................................................................................................. 225
Оглавление   9
Глава 7. Тестирование ....................................................................................... 226
Необходимость тестирования ........................................................................... 226
Требования к хорошим тестам.......................................................................... 227
Предсказуемость ........................................................................................ 228
Изолированность........................................................................................ 228
Надежность................................................................................................ 229
Быстрое выполнение.................................................................................. 229
Автоматизация ........................................................................................... 229
Удобство сопровождения ........................................................................... 230
Что тестировать ............................................................................................... 230
Определение областей тестирования ............................................................... 231
Модульные тесты ....................................................................................... 232
Компонентные тесты.................................................................................. 232
Интеграционные тесты............................................................................... 232
Системные тесты........................................................................................ 233
Тесты производительности......................................................................... 233
Стресс-тесты .............................................................................................. 234
Реализация тестирования................................................................................. 235
Модульные тесты ....................................................................................... 235
Компонентные тесты.................................................................................. 240
Интеграционные тесты............................................................................... 245
Интеграционные и системные тесты на уровне кода .................................. 251
Системные тесты........................................................................................ 253
Тесты производительности......................................................................... 262
Локальное выполнение тестов.......................................................................... 267
Обслуживание тестовых данных и сценариев ................................................... 270
Насколько важны обслуживаемые тесты .................................................... 270
Признаки недостаточного качества тестов ................................................. 270
Качество тестового кода ............................................................................ 271
Поддержка технологий тестирования......................................................... 273
Резюме............................................................................................................. 275
Глава 8. Микросервисы и системная архитектура ............................................... 277
Причины создания распределенных систем...................................................... 278
Проблемы распределенных систем................................................................... 278
Потери за счет пропускной способности..................................................... 279
Потери производительности....................................................................... 279
Организационные расходы......................................................................... 279
Как разрабатывать системные среды................................................................ 280
Карты контекстов и ограниченные контексты............................................. 280
Разделение задач....................................................................................... 281
Рабочие команды ....................................................................................... 281
Жизненные циклы проектов....................................................................... 282
Как разрабатывать системные интерфейсы ...................................................... 282
Что надо учитывать при разработке API..................................................... 282
Управление интерфейсами......................................................................... 283
Документирование границ.......................................................................... 285
Последовательность или масштабируемость?............................................. 287
10   Оглавление
Регистрация событий, архитектура, управляемая событиями, и CQRS .............. 288
Недостатки CRUD-систем............................................................................ 288
Регистрация событий ................................................................................. 289
Согласованность в реальном мире ............................................................. 291
Архитектуры с регистрацией событий ........................................................ 292
Введение в CQRS........................................................................................ 293
Коммуникация .................................................................................................. 298
Архитектуры микросервисов............................................................................. 298
Совместный доступ к данным и технологиям в корпоративных системах.... 298
Архитектуры без разделения ресурсов ....................................................... 299
Независимые системы ................................................................................ 300
Облачные и двенадцатифакторные приложения ........................................ 301
Когда микросервисы нужны, а когда — нет ................................................ 301
Реализация микросервисов в Java EE................................................................ 302
Приложения с нулевыми зависимостями .................................................... 302
Серверы приложений ................................................................................. 302
Реализация контуров приложений.............................................................. 303
Реализация CQRS ....................................................................................... 304
Java EE в эпоху распределенных вычислений............................................. 314
Подробнее об устойчивости ....................................................................... 320
Резюме............................................................................................................. 321
Глава 9. Мониторинг, производительность и журналирование ........................... 322
Бизнес-показатели ........................................................................................... 322
Сбор бизнес-показателей ........................................................................... 323
Выдача показателей................................................................................... 325
Требования к производительности в распределенных системах ....................... 329
Соглашения об уровне обслуживания ........................................................ 330
Вычисление SLA в распределенной системе ............................................... 330
Решение проблем производительности............................................................. 331
Теория ограничений................................................................................... 331
Определение падения производительности с помощью jPDM ..................... 332
Технические показатели................................................................................... 339
Типы технических показателей .................................................................. 340
Высокочастотный мониторинг и выборочные исследования ....................... 340
Сбор технических показателей................................................................... 341
Журналирование и отслеживание..................................................................... 343
Недостатки традиционного журналирования.............................................. 343
Журналирование в мире контейнеров ........................................................ 347
Журналирование .............................................................................................. 349
Трассировка ..................................................................................................... 349
Типичные проблемы производительности ........................................................ 353
Журналирование и потребление памяти .................................................... 354
Преждевременная оптимизация ................................................................. 354
Реляционные базы данных ......................................................................... 355
Коммуникация............................................................................................ 356
Потоки и пулы............................................................................................ 357
Тестирование производительности................................................................... 358
Резюме............................................................................................................. 359
Оглавление   11
Глава 10. Безопасность ...................................................................................... 360
Уроки прошлого ............................................................................................... 360
Безопасность в современном мире ................................................................... 361
Принципы обеспечения безопасности ........................................................ 362
Возможности и решения............................................................................. 364
Обеспечение безопасности в приложениях Java EE .......................................... 366
Прозрачная безопасность........................................................................... 367
Сервлеты ................................................................................................... 367
Субъекты и роли Java................................................................................. 367
JASPIC........................................................................................................ 368
Security API ................................................................................................ 368
Резюме............................................................................................................. 372
Глава 11. Заключение ........................................................................................ 373
Правильная постановка задач при корпоративной разработке ......................... 373
Облачные среды и непрерывная поставка........................................................ 374
Актуальность Java EE........................................................................................ 374
Обновления API в Java EE 8.............................................................................. 375
CDI 2.0 ....................................................................................................... 375
JAX-RS 2.1 .................................................................................................. 376
JSON-B 1.0.................................................................................................. 377
JSON-P 1.1.................................................................................................. 377
Bean Validation 2.0 ...................................................................................... 378
JPA 2.2 ....................................................................................................... 378
Security 1.0................................................................................................. 379
Servlet 4.0 .................................................................................................. 379
JSF 2.3........................................................................................................ 379
JCP и участие в создании стандартов ............................................................... 380
MicroProfile ....................................................................................................... 380
Eclipse Enterprise for Java .................................................................................. 381
Приложение. Дополнительные ресурсы................................................................. 382