Jakarta EE


Jakarta EE , ранее называвшаяся Java Platform, Enterprise Edition ( Java EE ) и Java 2 Platform, Enterprise Edition ( J2EE ), представляет собой набор спецификаций, расширяющих Java SE [1] спецификациями для корпоративных функций, таких как распределенные вычисления и веб-сервисы . [2] Приложения Jakarta EE запускаются в эталонных средах выполнения , которые могут быть микросервисами или серверами приложений , которые обрабатывают транзакции, безопасность, масштабируемость, параллелизм и управление развертываемыми компонентами.

Jakarta EE определяется его спецификацией . Спецификация определяет API ( интерфейс прикладного программирования) и их взаимодействие. Как и в случае с другими спецификациями Java Community Process , провайдеры должны соответствовать определенным требованиям, чтобы декларировать свои продукты как Jakarta EE-совместимые .

Примеры контекстов, в которых используются среды выполнения ссылок Jakarta EE: электронная коммерция , бухгалтерский учет, банковские информационные системы.

Платформа была известна как Java 2 Platform, Enterprise Edition или J2EE с версии 1.2, пока название не было изменено на Java Platform, Enterprise Edition или Java EE в версии 1.5.

Java EE поддерживается Oracle в рамках процесса сообщества Java . 12 сентября 2017 года корпорация Oracle объявила, что отправит Java EE в Eclipse Foundation . [3] Проект верхнего уровня Eclipse получил название Eclipse Enterprise for Java (EE4J). [4] Eclipse Foundation была вынуждена изменить название, потому что Oracle владеет торговой маркой для названия «Java» и переименовала платформу Java EE в Jakarta EE. [5] [6] Это название не следует путать с бывшим проектом Jakarta Project, который способствовал развитию ряда текущих и бывших проектов Java в Apache Software Foundation .

  • J2EE 1.2 (12 декабря 1999 г.)
  • J2EE 1.3 (24 сентября 2001 г.)
  • J2EE 1.4 (11 ноября 2003 г.)
  • Java EE 5 (11 мая 2006 г.)
  • Java EE 6 (10 декабря 2009 г.)
  • Java EE 7 (28 мая 2013 г.) [7], но 5 апреля 2013 г. в соответствии со спецификацией. Запланированная дата начала работы - 12 июня 2013 г. [8]
  • Java EE 8 (31 августа 2017 г.) [9]
  • Jakarta EE 8 (10 сентября 2019 г.) [10] - полностью совместим с Java EE 8
  • Jakarta EE 9 (22 ноября 2020 г.) [11] - изменение пространства имен javax. * На jakarta. *.

Jakarta EE включает несколько спецификаций, которые служат различным целям, таким как создание веб-страниц, чтение и запись из базы данных транзакционным способом, управление распределенными очередями.

API-интерфейсы Jakarta EE включают несколько технологий, расширяющих функциональные возможности базовых API-интерфейсов Java SE , таких как Jakarta Enterprise Beans , соединители , сервлеты , серверные страницы Jakarta и несколько технологий веб-сервисов .

Веб-спецификации

  • Сервлет Jakarta : определяет, как управлять HTTP-запросами синхронным или асинхронным способом. Это низкий уровень, и другие спецификации Jakarta EE полагаются на него;
  • Jakarta WebSocket: спецификация API, определяющая набор API для обслуживания соединений WebSocket ;
  • Jakarta Faces : технология построения пользовательских интерфейсов из компонентов;
  • Jakarta Expression Language ( EL ) - это простой язык, изначально разработанный для удовлетворения особых потребностей разработчиков веб-приложений. Он используется специально в Jakarta Faces для привязки компонентов к (поддержки) bean-компонентов, а также в Contexts and Dependency Injection к именованным bean-компонентам, но может использоваться во всей платформе.

Спецификации веб-сервисов

  • Веб-службы Jakarta RESTful обеспечивают поддержку в создании веб-служб в соответствии с архитектурным шаблоном передачи репрезентативного состояния (REST);
  • Jakarta JSON Processing - это набор спецификаций для управления информацией, закодированной в формате JSON;
  • Jakarta JSON Binding предоставляет спецификации для преобразования информации JSON в классы Java или из них;
  • Связывание Jakarta XML позволяет отображать XML в объекты Java;
  • Веб-службы Jakarta XML могут использоваться для создания веб-служб SOAP.

Спецификации предприятия

  • Jakarta Contexts and Dependency Injection ( CDI ) - это спецификация для предоставления контейнера для внедрения зависимостей ;
  • Спецификация Jakarta Enterprise Beans ( EJB ) определяет набор облегченных API-интерфейсов, которые контейнер объектов (контейнер EJB) будет поддерживать для обеспечения транзакций (с использованием JTA ), удаленных вызовов процедур (с использованием RMI или RMI-IIOP ), управления параллелизмом , зависимостей. внедрение и контроль доступа к бизнес-объектам. Этот пакет содержит классы и интерфейсы Jakarta Enterprise Beans, которые определяют контракты между корпоративным компонентом и его клиентами, а также между корпоративным компонентом и контейнером ejb.
  • Jakarta Persistence ( JPA ) - это спецификации объектно-реляционного сопоставления между таблицами базы данных отношений и классами Java.
  • Jakarta Transactions ( JTA ) содержит интерфейсы и аннотации для взаимодействия с поддержкой транзакций, предлагаемой Jakarta EE. Несмотря на то, что этот API абстрагируется от действительно низкоуровневых деталей, интерфейсы также считаются несколько низкоуровневыми, и предполагается, что средний разработчик приложений в Jakarta EE либо полагается на прозрачную обработку транзакций абстракциями EJB более высокого уровня, либо использует аннотации, предоставляемые этим API в сочетании с управляемыми компонентами CDI.
  • Jakarta Messaging ( JMS ) предоставляет программам Java общий способ создания, отправки, получения и чтения сообщений корпоративной системы обмена сообщениями.

Прочие характеристики

  • Проверка: этот пакет содержит аннотации и интерфейсы для поддержки декларативной проверки, предлагаемой Bean Validation API. Проверка bean-компонентов предоставляет унифицированный способ предоставления ограничений для bean-компонентов (например, классов модели JPA), которые могут применяться на нескольких уровнях. В Jakarta EE JPA учитывает ограничения проверки bean-компонентов на уровне сохраняемости, а JSF - на уровне представления.
  • Jakarta Batch предоставляет средства для пакетной обработки в приложениях для выполнения длительных фоновых задач, которые могут включать большой объем данных и которые, возможно, необходимо периодически выполнять.
  • Jakarta Connectors - это инструмент на основе Java для подключения серверов приложений и корпоративных информационных систем ( EIS ) в рамках интеграции корпоративных приложений ( EAI ). Это низкоуровневый API, нацеленный на поставщиков, с которыми средний разработчик приложений обычно не контактирует.

В попытке ограничить размер веб-контейнеров, как в физическом, так и в концептуальном плане, был создан веб-профиль, являющийся подмножеством спецификаций Jakarta EE. Веб-профиль Jakarta EE включает следующее:

Хотя по определению все реализации Jakarta EE предоставляют один и тот же базовый уровень технологий (а именно, спецификацию Jakarta EE и соответствующие API-интерфейсы), они могут значительно отличаться в отношении дополнительных функций (таких как соединители , кластеризация , отказоустойчивость , высокая доступность , безопасность , и т. д.), установленный размер, объем памяти, время запуска и т. д.


Джакарта ЭЭ [15] [16]

Java EE

Пример кода, показанный ниже, демонстрирует, как различные технологии в Java EE 7 используются вместе для создания веб-формы для редактирования пользователя.

В Jakarta EE (веб-интерфейс) пользовательский интерфейс может быть построен с использованием Jakarta Servlet , Jakarta Server Pages ( JSP ) или Jakarta Server Faces ( JSF ) с Facelets . В приведенном ниже примере используются Faces и Facelets . Явно не показано, что входные компоненты используют Jakarta EE Bean Validation API для проверки ограничений.

 xmlns = "http://www.w3.org/1999/xhtml"  xmlns: h = "http://xmlns.jcp.org/jsf/html"  xmlns: f = "http: //xmlns.jcp .org / jsf / core " >    name = "user_id"  value = "# {userEdit.user}"  converter = "# {userConvertor}"  />     />    columns = "2" >   for = "firstName"  value = "Имя"  />   id = "firstName"  value = "# {userEdit.user. firstName} "  label = " Имя "  />  for = "lastName"  value = "Last name"  />   id = "lastName"  value = "# {userEdit.user.lastName}"  label = "Фамилия"  />  action = "# {userEdit.saveUser}"  value = "Сохранить"  />