JavaRush /Java блог /Random UA /Кава-брейк #119. Вступ до Java Enterprise Edition (Java E...

Кава-брейк #119. Вступ до Java Enterprise Edition (Java EE)

Стаття з групи Random UA
Джерело: 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) додатків. Події можуть запускатися, поки метод Спостерігачів прослуховують запущені події.

  • Інтерфейс постачальника послуг (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 є ідемпотентним, що означає, що повторне виконання того самого запиту до методу не повинно змінювати стан ресурсу або даних на сервері.

  • Метод POST HTTP: запит 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.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ