Открыть сервис

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-приложения обычно следуют многоуровневой архитектуре:

  1. Клиентский уровень (Client Tier): Веб-браузер, мобильное приложение или десктопный клиент.
  2. Веб-уровень (Web Tier): Содержит сервлеты, JSP, JSF, которые обрабатывают HTTP-запросы и формируют ответы.
  3. Бизнес-уровень (Business Tier): Содержит EJB, CDI-бины, которые реализуют бизнес-логику и транзакции.
  4. Уровень интеграции (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 →