Оглавление
Jakarta EE
Корпоративная Java: сервлеты, CDI, JAX-RS, JPA, транзакции и серверы приложений.
1.Начало работы
- Что такое Jakarta EEОткуда взялась Jakarta EE, чем спецификации отличаются от реализаций, что такое сервер приложений и где эту платформу используют сегодня.
- Проект и запуск сервераСоздаём проект блога генератором Open Liberty, разбираем pom.xml с зависимостью jakarta.jakartaee-api, файл server.xml и запускаем сервер командой liberty:dev.
- Первый сервлетЧто такое сервлет, как аннотация @WebServlet связывает класс с адресом и как сервер вызывает метод doGet.
- Запрос и ответЧтение параметров и заголовков из HttpServletRequest, код ответа, заголовки и перенаправление через HttpServletResponse.
- ФильтрыФильтр сервлетов выполняет общий код до и после обработки запроса: логирование, заголовки, проверки.
2.Jakarta REST
- Ресурсы Jakarta RESTКак включить Jakarta REST в приложении, что такое ресурс и как аннотации @Path, @GET и @Produces превращают класс в REST API.
- Параметры запросаКак получить в методе ресурса часть пути, параметры строки запроса, заголовки и поля формы: @PathParam, @QueryParam, @DefaultValue, @HeaderParam и @FormParam.
- JSON и JSON-BКак ресурс Jakarta REST отдаёт и принимает JSON: записи (record) как модели данных, хранилище записей блога и настройка JSON аннотациями JSON-B.
- Коды ответа и ResponseКак вернуть из ресурса нужный код HTTP: класс Response, ответ 201 Created с заголовком Location, 204 No Content и 404 Not Found.
- Обработчики исключенийКак ExceptionMapper превращает исключения приложения в понятные ответы API с JSON-описанием ошибки.
3.CDI и валидация
- Бины и внедрениеЧто такое CDI, какие классы становятся бинами и как @Inject передаёт объекты в ресурсы, сервлеты и другие бины.
- Области видимостиСколько живёт бин: @ApplicationScoped, @SessionScoped, @RequestScoped и @Dependent на примере счётчика просмотров и истории чтения.
- Продюсеры и квалификаторыКак сделать бином объект чужого класса с помощью @Produces и как различать бины одного типа квалификаторами.
- События CDIКак один бин сообщает о случившемся через Event, а другие реагируют методами с @Observes и @ObservesAsync, не зная друг о друге.
- Bean ValidationПроверка входных данных аннотациями @NotBlank, @Size и @Min, автоматический ответ 400 в Jakarta REST и обработчик ошибок валидации с JSON.
4.Работа с базой данных
- Jakarta PersistenceПодключаем базу данных H2 к Open Liberty, описываем источник данных в server.xml, настраиваем persistence.xml и переводим записи блога на сущность JPA и EntityManager.
- Транзакции и @TransactionalКак сервер управляет транзакциями: аннотация @Transactional, откат при исключении на примере импорта записей и режимы TxType.
- Jakarta DataНовая спецификация Jakarta EE 11: репозиторий-интерфейс с @Repository, встроенные методы CrudRepository, подключение к единице хранения и внедрение репозитория в ресурс.
- Запросы в Jakarta DataСвои методы репозитория: запросы по имени метода, аннотации @Find и @By, @Query на языке JDQL, сортировка и постраничный вывод через PageRequest и Order.
5.Faces, безопасность и выпуск
- Jakarta FacesСерверные страницы на Jakarta Faces: файл Facelets, бин страницы с @Named, вывод списка и форма с проверкой. Зачем знать Faces, если новые интерфейсы пишут иначе.
- Jakarta SecurityВход по HTTP Basic, своё хранилище пользователей IdentityStore, роли и защита методов аннотацией @RolesAllowed, данные о вошедшем пользователе через SecurityContext.
- MicroProfile Config и HealthНастройки приложения через MicroProfile Config с подменой из переменных окружения и проверки состояния MicroProfile Health для оркестраторов.
- ТестированиеКак тестировать приложение Jakarta EE: модульные тесты бинов без сервера, интеграционные тесты HTTP-запросами к запущенному Open Liberty и инструменты вроде Arquillian.
- Сборка и развёртываниеКак собрать WAR, развернуть его на установленном сервере, упаковать приложение вместе с Open Liberty в исполняемый JAR и в Docker-образ, и что меняется на других серверах Jakarta EE.