Java Enterprise Edition
Java Enterprise Edition (Java EE, с 2018 года — Jakarta EE) — это набор спецификаций и соответствующая платформа для разработки и развёртывания корпоративных приложений на языке Java. Платформа предоставляет стандартизированные API (интерфейсы программирования приложений) для решения типовых задач, возникающих при создании крупных, масштабируемых, многопользовательских и распределённых информационных систем: работа с базами данных, управление транзакциями, обработка сообщений, веб-сервисы, безопасность и компонентная модель серверных приложений. Java EE расширяет возможности стандартной Java SE (Standard Edition), добавляя серверные компоненты и сервисы, необходимые для построения многоуровневых архитектур.
История
Предпосылки и создание
В конце 1990-х годов компания Sun Microsystems (разработчик Java) столкнулась с конкуренцией со стороны платформы Microsoft .NET и других технологий для создания корпоративных приложений (CORBA, Enterprise JavaBeans 1.0 от IBM). Разработчикам Java требовался единый, стандартизированный набор инструментов для создания серверных решений, чтобы избежать фрагментации рынка и зависимости от проприетарных решений отдельных вендоров.
Первая версия платформы, названная J2EE (Java 2 Platform, Enterprise Edition), была выпущена в декабре 1999 года. Она включала в себя ключевые технологии: сервлеты (Servlet), JavaServer Pages (JSP), Enterprise JavaBeans (EJB) и Java Message Service (JMS). J2EE 1.2 стала первой официальной спецификацией, которую должны были реализовывать серверы приложений (например, WebLogic, WebSphere, JBoss).
Эволюция под названием Java EE
В 2006 году, с выходом версии 5, платформа была переименована в Java EE (Java Platform, Enterprise Edition). Этот релиз ознаменовал значительное упрощение разработки: были введены аннотации (аннотации) для уменьшения объёма XML-конфигураций, а также появились новые технологии, такие как Java Persistence API (JPA) и JavaServer Faces (JSF).
Последующие версии (Java EE 6 в 2009, Java EE 7 в 2013, Java EE 8 в 2017) продолжали развивать платформу, добавляя поддержку RESTful веб-сервисов (JAX-RS), WebSockets, Batch Processing, JSON Processing и других современных требований. Ключевым изменением стала модуляризация: вместо монолитного стека разработчики могли выбирать и использовать только необходимые профили (например, Web Profile для веб-приложений).
Переход к Jakarta EE
В 2017 году компания Oracle (которая приобрела Sun Microsystems в 2010 году) передала права на Java EE фонду Eclipse Foundation. Это было связано с желанием Oracle сосредоточиться на Java SE и необходимостью сделать платформу более открытой для сообщества. В 2018 году проект был переименован в Jakarta EE. Из-за юридических ограничений (Oracle сохранила права на торговую марку «Java») новое название было выбрано на основе названия проекта Eclipse Jakarta.
Первая версия под эгидой Eclipse — Jakarta EE 8 — была выпущена в 2019 году и фактически повторяла Java EE 8. Затем, в 2021 году, вышла Jakarta EE 9, которая содержала критическое изменение: все пакеты API были переименованы из javax. в jakarta.. Это было необходимо для обеспечения юридической чистоты и возможности дальнейшего независимого развития. Версия Jakarta EE 10 (2022) и Jakarta EE 11 (2024) продолжили развитие, добавив поддержку новых версий Java SE (17, 21) и улучшив API.
Ключевые компоненты и API
Платформа Java EE/Jakarta EE состоит из множества взаимосвязанных спецификаций. Основные из них включают:
Компоненты веб-уровня
- Сервлеты (Servlet): Java-классы, которые обрабатывают HTTP-запросы (GET, POST, PUT, DELETE) и формируют HTTP-ответы. Являются основой для всех веб-приложений.
- JavaServer Faces (JSF): Фреймворк для построения пользовательских интерфейсов на основе компонентов. Использует шаблоны XHTML и управляемые бины (Managed Beans).
- JavaServer Pages (JSP): Технология для динамической генерации HTML-страниц путём вставки Java-кода в HTML-шаблоны. В настоящее время считается устаревшей в пользу более современных шаблонизаторов, но всё ещё широко используется в legacy-системах.
- WebSocket: API для двусторонней связи между клиентом и сервером в реальном времени.
Компоненты бизнес-логики и доступа к данным
- Enterprise JavaBeans (EJB): Компонентная модель для создания распределённых, транзакционных и безопасных бизнес-объектов. Существуют два типа: Session Beans (для бизнес-логики) и Message-Driven Beans (для асинхронной обработки сообщений). В современных версиях EJB значительно упрощены и часто заменяются более лёгкими фреймворками (CDI, Spring).
- Java Persistence API (JPA): Спецификация для объектно-реляционного отображения (ORM). Позволяет работать с реляционными базами данных через Java-объекты (entities), автоматически генерируя SQL-запросы. Наиболее известная реализация — Hibernate.
- Java Transaction API (JTA): API для управления распределёнными транзакциями (транзакции, охватывающие несколько ресурсов, например, базы данных и очереди сообщений). Позволяет гарантировать атомарность операций (ACID).
- Bean Validation: Спецификация для декларативной валидации данных (например, проверка email, длины строки, диапазона чисел) с помощью аннотаций.
Компоненты интеграции и обмена данными
- Java Message Service (JMS): API для асинхронного обмена сообщениями между компонентами приложения или между различными системами. Реализуется через брокеры сообщений (ActiveMQ, RabbitMQ, IBM MQ).
- Java API for RESTful Web Services (JAX-RS): Спецификация для создания RESTful веб-сервисов. Позволяет аннотировать Java-классы как ресурсы, доступные по HTTP.
- Java API for JSON Processing (JSON-P) и Java API for JSON Binding (JSON-B): API для обработки (парсинг, генерация) и привязки (преобразование) JSON-данных к Java-объектам.
- Jakarta Mail: API для отправки и получения электронной почты.
- Jakarta Connectors: API для интеграции с корпоративными информационными системами (EIS), такими как SAP, Oracle E-Business Suite.
Инфраструктурные компоненты
- Contexts and Dependency Injection (CDI): Спецификация для управления зависимостями и жизненным циклом компонентов. Заменяет более старые механизмы внедрения зависимостей (EJB 3.0) и является основой для многих других API.
- Interceptors: API для реализации сквозной функциональности (логирование, аудит, безопасность) без изменения кода бизнес-логики.
- Security API: Стандартизированный API для аутентификации и авторизации, включая поддержку OAuth 2.0, OpenID Connect и LDAP.
- Batch Processing: API для выполнения больших объёмов фоновых задач (например, обработка файлов, генерация отчётов) с возможностью чекпоинтинга и возобновления.
Архитектура и развёртывание
Java EE-приложения обычно следуют многоуровневой архитектуре:
- Клиентский уровень (Client Tier): Веб-браузер, мобильное приложение или десктопный клиент.
- Веб-уровень (Web Tier): Содержит сервлеты, JSP, JSF, которые обрабатывают HTTP-запросы и формируют ответы.
- Бизнес-уровень (Business Tier): Содержит EJB, CDI-бины, которые реализуют бизнес-логику и транзакции.
- Уровень интеграции (Integration Tier): Взаимодействует с базами данных (JPA), очередями сообщений (JMS) и внешними системами (JAX-RS, Connectors).
Развёртывание осуществляется на сервере приложений (Application Server) — программном обеспечении, которое реализует спецификации Java EE/Jakarta EE. Примеры серверов приложений:
- Apache Tomcat: Легковесный сервер, реализующий только сервлеты и JSP. Не является полноценным сервером приложений Java EE.
- WildFly (ранее JBoss AS): Полнофункциональный сервер с открытым исходным кодом, разрабатываемый Red Hat.
- Payara Server: Форк проекта GlassFish, поддерживаемый компанией Payara Services.
- Oracle WebLogic Server: Коммерческий сервер от Oracle, широко используется в крупных корпоративных решениях.
- IBM WebSphere Application Server: Коммерческий сервер от IBM.
- GlassFish: Эталонная реализация Java EE, разрабатываемая Eclipse Foundation.
Приложения упаковываются в архивы (JAR, WAR, EAR). WAR (Web Application Archive) содержит веб-компоненты, EAR (Enterprise Archive) может содержать несколько WAR и EJB-JAR-модулей.
Значение и критика
Значение
Java EE/Jakarta EE сыграла ключевую роль в становлении Java как доминирующей платформы для корпоративной разработки в 2000-х годах. Она предоставила:
- Стандартизацию: Единый набор API, который позволял разработчикам создавать приложения, переносимые между различными серверами приложений.
- Масштабируемость: Встроенная поддержка кластеризации, балансировки нагрузки и распределённых транзакций.
- Безопасность: Стандартизированные механизмы аутентификации, авторизации и защиты данных.
- Надёжность: Управление транзакциями, обработка ошибок и восстановление после сбоев.
Критика
Несмотря на успех, Java EE подвергалась критике по нескольким причинам:
- Сложность: Ранние версии (J2EE 1.2–1.4) были чрезвычайно сложными в настройке и использовании, требуя написания большого объёма XML-конфигураций. Это породило движение за упрощение, которое привело к появлению Spring Framework.
- Тяжеловесность: Полноценный сервер приложений был ресурсоёмким и медленно запускался. Для небольших проектов это было избыточно.
- Медленное развитие: После перехода к Oracle процесс внесения изменений в спецификации замедлился, что вызвало недовольство сообщества и привело к появлению альтернатив (Spring Boot, Micronaut, Quarkus).
- Конкуренция со стороны Spring: Spring Framework, особенно в виде Spring Boot, стал более популярным выбором для новых проектов благодаря своей лёгкости, гибкости и активному сообществу. Однако Jakarta EE продолжает развиваться и используется в legacy-системах и в проектах, где требуется строгая стандартизация и поддержка со стороны крупных вендоров.
Источники
- Официальная документация Eclipse Foundation по Jakarta EE.
- Книга «Java EE 8: The Big Picture» (Dr. Danny Coward).
- Материалы курсов Oracle University по Java EE.
- Статьи на портале Baeldung по Java EE/Jakarta EE.
- История развития Java на сайте Oracle.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →