Перейти к содержанию

Jakarta EE

Jakarta EE (раньше Java EE, ещё раньше J2EE) - набор спецификаций для серверных приложений на Java: веб, бины, транзакции, работа с БД, сообщения. Спецификация описывает только API. Реализуют его серверы приложений (WildFly, GlassFish, Payara, Open Liberty) и отдельные библиотеки: Hibernate реализует JPA, Tomcat - Servlet и JSP.

Заметки

  • Java Servlets - сервлеты, контейнер, forward и redirect, фильтры, сессии, ServletContext, web.xml
  • JSP - страницы, жизненный цикл, теги, EL, Model 1 и Model 2
  • JSF - FacesServlet, страницы и компоненты, навигация, управляемые бины
  • Бины в Jakarta EE - JavaBean, CDI, beans.xml, EJB и другие компоненты, какой бин для какого слоя
  • EJB - типы бинов, жизненный цикл, сервисы контейнера, EJB и CDI
  • JMS
  • JAX-RS
  • Java Transaction API - @Transactional, атрибуты транзакции, откат, блокировки
  • JPA - persistence.xml, EntityManager, сущности, связи, N+1, Criteria API, Bean Validation
  • Hibernate - Session, hibernate.cfg.xml, аннотации Hibernate, кэш, HQL, native API или JPA
  • Ошибки JPA/Hibernate - двусторонние связи, orphanRemoval, N+1, замена коллекций

Как принимают стандарты Java

JCP (Java Community Process) - процесс, по которому принимают стандарты Java: спецификации языка, изменения в JVM, API платформы.

  • каждый стандарт - JSR (Java Specification Request). Экспертная группа пишет спецификацию, эталонную реализацию и TCK - набор тестов совместимости
  • JSR принимает голосованием Executive Committee
  • участником JCP может стать любой, в том числе частное лицо: работать в экспертных группах и голосовать на выборах Executive Committee
  • по этому процессу до сих пор развивается Java SE. Java EE тоже шла через JCP, Jakarta EE - уже нет (см. ниже)

Почему так. Благодаря JCP у Java есть обратная совместимость. Компании с деньгами не готовы вкладываться в эксперименты, как в .NET, поэтому в Java всё прямо: каждое изменение тщательно обсуждают и вылизывают. Обратная сторона - это медленная демократия. Пока Java EE и JCP раскачивались, Spring обогнал.

Note

В исходной версии было «можно зарегистрироваться самому и принимать участие в голосовании». Голосуют за JSR члены Executive Committee, а рядовые участники выбирают сам комитет.


От Java EE к Jakarta EE

Oracle - владелец Java, после решений JCP он выпускал стандарты Java EE. В 2017 году Oracle отказался вести эти стандарты и документацию и передал платформу в Eclipse Foundation. Теперь это открытый проект сообщества, а спецификации принимают по процессу Eclipse Foundation, а не через JCP.

Платформу переименовали в Jakarta EE, потому что торговая марка Java принадлежит Oracle. По той же причине нельзя было развивать пакеты javax.*, и в Jakarta EE 9 все API переехали в jakarta.*.

Год Версия Что важно
1999 J2EE 1.2 Первая версия: сервлеты, JSP, EJB
2006 Java EE 5 Аннотации вместо XML, EJB 3, JPA. Платформа резко упростилась
2009 Java EE 6 CDI, JAX-RS, Web Profile
2017 Java EE 8 Последняя версия под Oracle
2019 Jakarta EE 8 То же, что Java EE 8, но уже под Eclipse Foundation
2020 Jakarta EE 9 Пакеты javax.* -> jakarta.*. Убраны JAX-RPC, JAXR, Deployment, Management
2022 Jakarta EE 10 Core Profile для лёгких сервисов
2025 Jakarta EE 11 Java 17+, новая спецификация Jakarta Data. Убраны SOAP-стек и Managed Beans

Последствие для Spring. Spring Framework 6 и Spring Boot 3 перешли на jakarta.*. Поэтому при переезде со Spring 5 и Boot 2 меняются импорты: javax.persistence -> jakarta.persistence, javax.servlet -> jakarta.servlet.

Note

В исходной версии: стандарты отдали «в руки комьюнити JCP», а Oracle от них по факту не отказался, потому что у него есть WebLogic и GlassFish. Платформу передали в Eclipse Foundation, а не в JCP. GlassFish тоже ушёл туда и теперь называется Eclipse GlassFish. У Oracle остался WebLogic.


Профили и спецификации

Актуальная версия - Jakarta EE 11 (июнь 2025), нужна Java 17+. Jakarta EE 12 в разработке, в каталоге спецификаций уже видны её новые версии.

Профиль - набор спецификаций под класс приложений. Сервер сертифицируют на профиль целиком: если он совместим с Web Profile, в нём есть всё из списка Web Profile.

Профили вложены друг в друга:

Core Profile = JAX-RS, JSON-P, JSON-B, Annotations, Interceptors, DI, CDI Lite
Web Profile  = Core Profile + Servlet, JSP, JSF, JPA, Data, JTA, полный CDI, EJB Lite и другие
Platform     = Web Profile  + полный EJB, JMS, Batch, JCA, Mail, Activation, Authorization
  • Core Profile - лёгкие сервисы и сборка в native image: REST, JSON, внедрение зависимостей
  • Web Profile - типичное веб-приложение: сервлеты, страницы, JPA, транзакции, безопасность
  • Platform - полный набор, плюс интеграция: сообщения, пакетная обработка, коннекторы к внешним системам

Старые имена (JAX-RS, JPA, JSF) по-прежнему в ходу, официальные теперь без «Java»: Jakarta RESTful Web Services, Jakarta Persistence, Jakarta Faces.

Core Profile 11

Спецификация Версия Что даёт
RESTful Web Services (JAX-RS) 4.0 REST-эндпоинты: @Path, @GET, @Produces
JSON Processing (JSON-P) 2.1 Разбор и сборка JSON вручную: потоковый и объектный API
JSON Binding (JSON-B) 3.0 Объекты в JSON и обратно
Annotations 3.0 Общие аннотации: @PostConstruct, @PreDestroy, @Resource, @Priority
Interceptors 2.2 Перехват вызовов методов: @AroundInvoke
Dependency Injection 2.0 Базовые аннотации внедрения: @Inject, @Named, @Qualifier
CDI Lite 4.1 Подмножество CDI без рефлексии в рантайме, бины собираются при сборке

Web Profile 11

Всё из Core Profile плюс 16 спецификаций, всего 23.

Спецификация Версия Что даёт
Servlet 6.1 Обработка HTTP-запросов, фильтры, сессии
Pages (JSP) 4.0 HTML-страницы с Java-вставками
Standard Tag Libraries (JSTL) 3.0 Теги для JSP: циклы, условия, форматирование
Expression Language (EL) 6.0 Выражения ${...} в JSP и Faces
Faces (JSF) 4.1 Компонентный UI на сервере
WebSocket 2.2 Двусторонние соединения: @ServerEndpoint
Persistence (JPA) 3.2 ORM: сущности, EntityManager, JPQL
Data 1.0 Репозитории по интерфейсу, как Spring Data. Новая в EE 11
Transactions (JTA) 2.0 @Transactional, распределённые транзакции
Validation 3.1 Bean Validation: @NotNull, @Size, @Valid
CDI 4.1 Полный CDI: scopes, события, декораторы, расширения
Enterprise Beans Lite 4.0 Подмножество EJB: локальные session beans, без remote и MDB
Concurrency 3.1 Управляемые пулы потоков, @Asynchronous, виртуальные потоки
Security 4.0 Безопасность приложения: IdentityStore, SecurityContext
Authentication 3.1 SPI модулей аутентификации контейнера (бывший JASPIC)
Debugging Support for Other Languages 2.0 Отладка кода, сгенерированного из других языков, например из JSP

Platform 11

Всё из Web Profile плюс 7 спецификаций, всего 30.

Спецификация Версия Что даёт
Enterprise Beans (EJB) 4.0 Полный EJB: remote, message-driven beans, timer service
Messaging (JMS) 3.1 Очереди и топики сообщений
Batch 2.1 Пакетная обработка: job, step, chunk
Connectors (JCA) 2.1 Адаптеры к внешним системам с транзакциями и пулами
Mail 2.1 Отправка и чтение почты
Activation 2.1 Типы данных MIME для Mail (бывший JAF)
Authorization 3.0 SPI проверки прав в контейнере (бывший JACC)

Note

CDI и CDI Lite - одна спецификация с двумя уровнями, так же как Enterprise Beans и Enterprise Beans Lite. Поэтому строк в профилях 30, а отдельных спецификаций в них 28.

Спецификации вне профилей

Всего в каталоге jakarta.ee/specifications 50 позиций: 3 профиля, 28 спецификаций из профилей и 19 вне профилей.

Развиваются отдельно:

Спецификация Версия Для чего
MVC 3.0, в разработке 3.1 Action-based MVC поверх JAX-RS
NoSQL 1.0, в разработке 1.1 Работа с NoSQL-базами
Portlet 4.0 в разработке Порталы из портлетов
Portlet Bridge 7.0 в разработке Запуск Faces-приложений в портлетах
Query 1.0 в разработке Общий язык запросов для Persistence и Data
Config 1.0 в разработке Единая конфигурация приложений
CRaC 1.0 в разработке Сохранение и восстановление состояния приложения для быстрого старта
RPC версии ещё нет gRPC в Jakarta EE
Agentic AI 1.0 в разработке API для ИИ-агентов

SOAP-стек, убран из платформы в EE 11:

Спецификация Последняя версия
XML Web Services (JAX-WS) 4.0
XML Binding (JAXB) 4.0, в разработке 4.1
SOAP with Attachments (SAAJ) 3.0
Web Services Metadata 3.0
Enterprise Web Services 2.0

SOAP никуда не делся: эти библиотеки можно подключить к приложению самому, просто сервер больше не обязан их поставлять (см. SOAP, WSDL и WS-*).

Устаревшие, удалены из платформы:

Спецификация Последняя версия Удалена
Managed Beans 2.0 EE 11
XML RPC (JAX-RPC) 1.1 EE 9
XML Registries (JAXR) 1.0 EE 9
Deployment 1.7 EE 9
Management 1.1 EE 9

Managed Beans заменил CDI. Состав Jakarta EE 12 появится на jakarta.ee/release, когда его утвердят.


Jakarta EE и Spring

Spring строит всю архитектуру на POJO. Он бежал быстрее за рынком, и за счёт этого его фреймворки разбухали. Java EE в то же время упрощалась: EJB 3, аннотации, CDI. В итоге сейчас Spring-фреймворки сложнее стандартных, но об этом забыли: рынок вытоптан Spring'ом.

  • Jakarta-стек хорошо подходит для монолитов, Spring - для микросервисов
  • очень много аутсорсинговых проектов, где крутятся самые большие деньги, написаны на Java EE

Note

Граница «монолит - Jakarta, микросервисы - Spring» скорее про рынок, чем про возможности. Для микросервисов на стандартах есть Eclipse MicroProfile (конфиг, health checks, метрики, REST-клиент) и фреймворки на нём: Quarkus, Helidon, Open Liberty.

См. Spring и Java EE.