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 | Адаптеры к внешним системам с транзакциями и пулами |
| 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.