User Эллеонора Керри
Эллеонора Керри
41 уровень

Кофе-брейк #119. Введение в Java Enterprise Edition (Java EE)

Статья из группы Random
Источник: Dev.to Java Enterprise Edition (Java EE) — это набор спецификаций и документации для языка Java, описывающий архитектуру серверной платформы для решения задач средних и крупных предприятий. Кофе-брейк #118. Введение в Java Enterprise Edition (Java EE) - 1При изучении Java EE вы столкнетесь с такими терминами:
  • Сервер приложений — это конкретная реализация абстрактных спецификаций Java EE. Примеры: Payara Server (Glassfish), IBM OpenLiberty и JBoss Wildfly.

  • Запрос спецификации Java (Java Specification Request, JSR) — это формальный запрос к сообществу Java на добавление и усовершенствование технологий. Это орган, который стандартизирует API-интерфейсы на платформе технологии Java и используется для группировки API-интерфейсов в блоки, например, JAX-RS (Java API для веб-сервисов RESTful). Для каждого JSR всегда существует эталонная реализация по умолчанию.

  • Эталонная реализация — это конкретная реализация/имплементация абстрактного JSR. Например, эталонная реализация для JAX-RS называется Jersey. Java EE сама по себе является JSR. Таким образом, сервер приложений представляет собой набор различных эталонных реализаций Java EE JSR. Java EE — это JSR 366, а одной из его эталонных реализаций является Glassfish 5.

  • Jakarta EE — это новое название Java EE, начиная с 2018 года. В настоящее время компания Oracle перевела платформу Java под управление фонда Eclipse Foundation.

Основы JavaEE

В Java EE существуют три ключевых API:
  1. API сохраняемости Java (Java Persistence API, JPA). Он отвечает за хранение и извлечение информации из реляционных баз данных, которые могут быть расширены для работы с базами данных NoSQL. Это уровень данных в приложении.

  2. Внедрение контекста и зависимостей (Context and Dependency Injection, CDI API). Это стандартизированный способ уменьшения связности в приложениях. Он управляет различными взаимодействиями компонентов, чтобы обеспечить свободную развязку.

  3. API Java для веб-служб RESTful (JAX-RS). Он предоставляет ресурсы по протоколу HTTP как веб-сервисы.

API внедрения контекста и зависимостей (Context and Dependency Injection API)

Внедрение зависимостей — это особая форма управления инверсией (программная стратегия, при которой отдельные компоненты получают свои зависимости). Это экстернализует зависимость в приложении для создания компонентов низкой связности.

Особенности CDI

  • Внедрение зависимостей (Typesafe) позволяет объявлять зависимости от типов, чтобы компилятор перехватывал ошибки во время выполнения.

  • Контексты жизненного цикла — это возможность привязать жизненный цикл и взаимодействие компонентов с отслеживанием состояния к четко определенным, но расширяемым компонентам жизненного цикла.

  • Перехватчики (Interceptors) позволяют перехватывать запросы на доступ к определенному методу.

  • События — способ разработки сильно развязанных (highly decoupled) приложений. События могут запускаться, пока метод Наблюдателей (observers) прослушивают запущенные события.

  • Интерфейс поставщика услуг (SPI) — набор приемов, API и интерфейсов, которые можно использовать в качестве расширений, например, в библиотеке Apache.

Некоторые концепции CDI API:

  • Обнаружение компонентов CDI (CDI Bean Discovery) — механизм, в котором среда внедрения зависимостей анализирует и обнаруживает компоненты для управления режимом обнаружения компонентов по умолчанию, то есть компонентов с аннотациями, например, @Annotated. Существует три типа режима обнаружения bean-компонентов: ALL (включая неаннотированные bean-компоненты), ANNOTATED и NONE.

  • Контейнер CDI — фабричный метод, в котором классы Java входят и выходят со своей функциональностью и возможностями. Это приложение, которое управляет bean-компонентами.

  • Экземпляры Bean и Contextual. Bean — это шаблон, который создает разработчик. Contextual (контекстный) экземпляр — это экземпляр Bean, созданный контейнером CDI и управляемый им.

Java Persistence API

JPA используется для сопоставления объектов с таблицами реляционной базы данных. Java Persistence API соответствует принципам манифеста ORM. Манифест ORM (Манифест объектно-реляционного сопоставления):
  • Объекты, а не таблицы: разработчики пишут объекты, а не таблицы.

  • Удобство, а не невежество: ORM должен быть удобным. Разработчики должны иметь минимальные знания о реляционных базах данных. ORM — это не способ скрыть невежество, а удобство.

  • Ненавязчивый и прозрачный: ORM должен сделать так, чтобы разработчики могли контролировать то, что находится в базе данных, и иметь полный контроль над тем, что сохраняется. Legacy-данные, новые объекты: ORM позволит создавать новые объекты из унаследованных данных, то есть реконструировать унаследованную базу данных в объекты Java.

  • Достаточно, но не слишком много: ORM предоставит все инструменты для решения часто встречающихся проблем из-за несоответствия импеданса (термин, используемый для обозначения проблем, возникающих из-за различий между моделью базы данных и языком программирования). ORM не должен быть чрезмерно тяжелым.

  • Локальность и мобильность: данные являются локальными, но должна быть возможность для постоянного состояния приложения перемещаться в разные его части.

  • Стандартный API, подключаемая реализация: опирайтесь на стандартный API, но при необходимости можете менять реализации.

Некоторые важные концепции JPA: JPA Entity (Сущность JPA)
  • Наиболее модульным компонентом объектов JPA является простой старый объект Java (POJO). Каждый объект должен иметь уникальный идентификатор.

  • В сущностях JPA обычно используются аннотации, например, @MappedSuperClass, которая позволяет использовать суперклассы, содержащие общие поля сущностей. Аннотация @AttributeOverride используется для переопределения сущностей суперкласса. @Column используется для настройки сопоставлений баз данных. Аннотацию @Transient можно использовать для полей в классе сущностей, которые не должны сопоставляться с базой данных.

  • Тип доступа — процесс, с помощью которого поставщик сохраняемости получает доступ к состояниям в сущности. Доступ к полю происходит, когда провайдер обращается к полям класса напрямую через отражение. Доступ к свойствам происходит, когда методы свойств Java Bean используются для доступа к состояниям, то есть используются методы получения и установки. Чтобы использовать доступ к свойству, метод получения должен быть аннотирован @Id. Смешанный тип доступа использует доступ как к полям, так и к свойствам в одном классе сущностей с использованием аннотации @Access.

API Java для веб-сервисов RESTful

Ограничения архитектуры REST:
  1. Клиент и сервер не зависят друг от друга.

  2. Stateless (без сохранения состояния): каждый отдельный запрос, поступающий на сервер, является автономным и уникальным. Сервер не делает никаких предположений из предыдущего запроса.

  3. Кэшируемость: система должна поддерживать кэширование на разных уровнях для повышения производительности и масштабируемости.

  4. Унифицированный интерфейс означает, что клиент должен иметь общий унифицированный интерфейс для доступа к ресурсам на сервере, а также для взаимодействия с ресурсами на сервере. Многоуровневая система: сервер может быть реализован на разных уровнях таким образом, что клиенту не нужно беспокоиться о многоуровневой системе, например, о сервере, поддерживающем балансировку нагрузки.

Некоторые общие понятия, связанные с JAX-RS:
  • Метод HTTP GET: запрос ресурса или ресурсов. Метод запроса GET является идемпотентным, что означает, что повторное выполнение одного и того же запроса к методу не должно изменять состояние ресурса или данных на сервере.

  • Метод HTTP POST: запрос POST используется для создания новых ресурсов на сервере. Это вызывает изменение набора данных на сервере. POST обычно имеет тело, в котором публикуется или прикрепляется полезная нагрузка или все, что мы хотим создать на сервере.

  • Метод HTTP PUT: используется семантически для обновления ресурсов на сервере.

  • Метод HTTP DELETE: используется для удаления ресурсов на сервере.

  • Типы контента. Существует несколько типов контента, которые могут потребляться и создаваться методами запроса: XML, CSV, EXCEL, TEXT и JSON.

  • JAX-RS имеет концепцию записи тела сообщения. Это конструкции API, используемые для преобразования типов Java в тип, ожидаемый клиентом. Аннотацию @Produces можно использовать для указания типа, в который преобразуется ответ объекта Java.

  • Аннотация @Consumes сообщает среде выполнения JAX-RS о типе контента, который потребляет данный метод ресурса. Затем среда выполнения JAX-RS преобразует содержимое JSON, переданное в качестве полезной нагрузки, в объект Java, тип которого аналогичен параметру метода.

  • JAX-RS Exception Mapper: конструкция API, используемая для сопоставления исключений с ответами HTTP. Аннотация @Provider используется для программной регистрации преобразователя исключений в среду выполнения JAX-RS.

Это очень простое введение в Java EE. Для создания веб-приложений с использованием Java EE вам понадобится более глубокое изучение каждого ключевого API.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ