Java Digest # 11: State of Java Ecosystem ‘24 & Spring, Spring, Spring

🙋 Алоха, друзі! Час рікою пливе...кхм, про що це ми... Коли, як не в перший місяць літа, поговорити про Spring? Адже саме про нього нам найбільше новин приніс травень.

Вйо до новин. Попередній дайджест можна прочитати тут.

Але пам’ятайте, що це стало можливим завдяки ЗСУ і читати ви його зараз можете теж завдяки їм.

Тому швидесенько перед прочитанням пішли міняти долари та кидати гривні на допомогу нашим Захисникам — наприклад, на спільний збір DOU та «Повернись Живим»..

У цього випуску є беззаперечний герой — Spring, але і про Java трішки поговоримо.

🔸 Згідно зі звітом про Стан Екосистеми Java у 2024 році, який підготував New Relic, новіші версії Java стали використовувати частіше, що не може не тішити авторський колектив дайджесту.

Товариство, стараймось, щоб у 2025 вісімкою тут і не пахло!

🔸 Nicolai Parlog випустив нове відео про свою улюблену тему — Java Modules:

Module Imports in Java 23 — Inside Java Newscast #69

Окрім цього Nicolai затізерив серію публікацій про Data Oriented програмування на Java 1.1, за деталями тиць тут (на момент написання дайджесту вже доступні 4 з 5 запланованих публікацій).

🔸 Billy Korando записав 10-хвилинний інтро в JDK Mission Control:

Introduction to JDK Mission Control

🔸 У блозі Microsoft вийшла цікава стаття (судячи з усього перша з 3 в циклі) Cesar Soares про один із потужних способів оптимізації в JDK — Scalar replacement і шляхи її покращення.

🔸 Не могли ми оминути стороною і доповідь пана Roy Van Rijn з DevoxxUK 2024:

Pushing Java to the Limits: Processing a Billion Rows in under 2 Seconds by ROY VAN RIJN

🔸 Ну і якщо вам вже кортить спробувати JDK23, Nicolai Parlog записав новий Inside Java Newscast саме про це!

All Java 23 Features — Inside Java Newscast #70

З моменту виходу останнього випуску відбулося багато цікавого та пов’язаного зі Spring, але найголовніше те, що Spring Boot 3.3.0 вже доступний для використання. Ми багато писали про нові функції, додані у цій версії, але хотілося б наголосити на основних нововведеннях ще раз. З усіма змінами ви можете ознайомитися тут, а ось найголовніше:

  • додана підтримка CDS для скорочення часу запуску та зменшення споживання пам’яті;
  • розширена підтримка Micrometer та додана підтримка Prometheus 1.x;
  • зʼявилася підтримка віртуальних потоків для вебсокетів;
  • додана підтримка SSL SNI для вбудованих вебсерверів;
  • підтримка Docker Compose для контейнерів Bitnami;
  • додана підтримка ресурсів Base64 у конфігураційних файлах;
  • покращення Spring Security та багато іншого.

Moritz Halbritter написав чудову статтю, в якій розповідає про підтримку SBOM (Software Bill of Materials) в Spring Boot 3.3.0. SBOM став ключовим елементом у забезпеченні безпеки програмного забезпечення та управлінні ризиками в ланцюжку постачання програмного забезпечення. Якщо вам цікава тема безпеки, рекомендуємо прочитати.

Також вийшли Spring Framework 6.2.0-M2 та Spring Framework 6.2.0-M3. Якщо M3 містить лише оновлення залежностей, то M2 містить понад 30 покращень. Повний перелік змін можна знайти тут, а найголовніше наведено нижче:

  • тепер ви можете тестувати WebMvc.fn ендпоінти за допомогою MockMvcWebTestClient, так само як і ваші анотовані контролери;
  • додана нова реалізація UrlParser, який імплементує стандарт Living URL. Його появу прискорили вразливості, про які ми згадували в попередніх випусках;
  • зʼявився новий UrlHandlerFilter для обробки URL-адрес із похилою рискою, розміщеною в кінці.

До основних тем Spring Data 2024.0.0 можна віднести наступні зміни:

  • додана підтримка виразів значень в анотаціях мапінгу та анотаціях @Value. Тепер можна отримувати значення з конфігураційних властивостей та SpEL виразів;
  • зʼявилася підтримка MongoDB 7.0 і драйвера MongoDB Java 5.0;
  • декларативна підтримка опцій транзакцій MongoDB за допомогою міток транзакцій.

Версія Spring Session 3.3 принесла такі зміни:

Spring Security 6.3.0 теж містить низку нових покращень, до найцікавіших можна віднести наступні:

  • додано можливість вмикати перевірку скомпрометованих паролів;
  • зʼявилася підтримка OAuth 2.0 Token Exchange Grant;
  • додано нову анотацію @HandleAuthorizationDenied, яка дозволяє виловлювати та обробляти помилки на рівні методу.

Вийшли одразу три версії Spring for Apache Kafka 3.2.0, 3.1.5 та 3.0.17. В усіх версіях додано реалізацію методу handleOne(), оголошеного в інтерфейсі CommonErrorHandler у класі CommonDelegatingErrorHandler. Детальніше про ці релізи можна дізнатися у примітках до версій 3.2.0, 3.1.5 та 3.0.17.

Spring for Apache Pulsar 1.1.0 додав підтримку транзакцій для PulsarTemplate, @PulsarListener та DefaultPulsarMessageListenerContainer. З іншими змінами можна ознайомитися тут.

Spring for GraphQL 1.3.0 вже доступна до використання. У фінальну версію увійшли підтримка віртуальних потоків, аутентифікація GraphQL через WebSocket та інтерсептори для WebSocketGraphQlTester. Детальніше тут.

Став доступним Spring Authorization Server 1.3. У попередньому дайджесті ми писали про нові функції, які стали доступні з появою 1.3. Докладніше можете ознайомитися у примітках до випуску.

Випущено Spring Cloud 2023.0.2 (OSS) та 2022.0.7 (Enterprise). Зміни торкнулися наступних модулів: Spring Cloud Kubernetes, Spring Cloud Function, Spring Cloud Gateway, Spring Cloud Config, Spring Cloud Netflix та Spring Cloud Stream. Ви можете знайти більше інформації тут.

Spring AI 1.0.0 M1 містить велику кількість змін, які детально описані в цій статті. З цікавого хотілося б виділити наступне:

  • з’явився ChatClient Fluent API, який дещо схожий на WebClient, RestClient та JdbcClient. Новий клієнт надає методи для побудови запиту, який потім передається як вхідні дані для моделі ШІ;
  • додані оцінювачі, які допомагають розвʼязати проблему неточності відповідей ШІ, використовуючи інші моделі ШІ для перевірки точності відповідей;
  • зʼявилася підтримка нових моделей;
  • була додана підтримка нових векторних баз даних.

Стали доступними Spring Modulith 1.2, 1.1.5, та 1.0.8. У версії 1.2 були додані можливості робити доступ до модулів відкритим, з’явилася альтернатива package-info.java для Kotlin, а також виключені з верифікації класи, згенеровані Spring AOT. З іншими змінами ви можете ознайомитися за цими посиланнями: 1.2, 1.1.5 та 1.0.8.

Нижче ви можете знайти інформацію про інші релізи, основні зміни яких містять виправлення помилок, оновлення залежностей та покращення документації:

Як завжди, наш випуск не може залишити поза увагою нові відео із серії Spring Tips. Нижче ви знайдете останні відео, які вийшли з моменту попереднього випуску.

🎬 У першому відео Josh Long розповідає про HashiCorp Vault та Spring Cloud Vault, зокрема про те, як їх можна використовувати для автоматичної ротації паролів до бази даних.

🎬 У наступному відео Josh Long розповідає про віртуальні потоки та демонструє на двох прикладах, як вони можуть вплинути на продуктивність ваших додатків.

🎬 У третьому відео Josh Long розповідає про Webauthn (Web Authentication) — вебстандарт, який є ключовою частиною проєкту FIDO2. Цей проєкт має на меті стандартизацію інтерфейсу для автентифікації користувачів до вебзастосунків за допомогою криптографії з публічним ключем. Він також приділяє багато уваги розробкам в цьому напрямку в рамках проєкту Spring Security.

🎬 Останнє відео з серії Spring Tips дещо відрізняється від звичних. Цього разу Josh Long поділився своєю доповіддю про Spring AI з нещодавньої конференції Spring I/O. У ній він та Christian Tzolov розповідають про зростання популярності Java для AI-застосувань. Вони також демонструють, як легко почати працювати з Spring AI, використовуючи приклад створення платформи для адопції домашніх тварин.

Як вже згадувалося вище, нещодавно відбулася конференція Spring I/O в Барселоні. На їхньому YouTube-каналі вже почали з’являтися записи доповідей. Ми не можемо перерахувати всі доповіді в нашому дайджесті, але деякі з них хотілося б виділити.

🎬 Доповідь Джоша є короткою вижимкою тем, які він висвітлював у серії Spring Tips, таких як Spring AI, Virtual Threads та інші. Якщо ви не стежите за цією серією, але хочете дізнатися про ці нововведення, рекомендуємо переглянути його доповідь.

🎬 Juergen Hoeller розповів про Spring Framework 6.2, а саме про деякі з основних змін, що повʼязані з управлінням життєвим циклом.

🎬 Thorben Janssen у своїй доповіді розповідає про проблеми, які можуть впливати на продуктивність ваших запитів при використанні Spring Data JPA, та пропонує способи їх обходу.

🎬 Основною темою доповіді Daniel Garnier-Moiroux є архітектура Spring Security, її основні компоненти та способи їхньої кастомізації. Рекомендуємо переглянути всім, хто хоче покращити своє розуміння Spring Security.

🎬 Якщо ви, як і ми, цікавитесь GraalVM та подальшими кроками в його розвитку, то доповідь від Аlina Yurenko саме для вас.

Вийшов звіт The State of Spring 2024, який демонструє наскільки швидко розвивається світ розробки програмного забезпечення. Основні тенденції: впровадження штучного інтелекту, розвиток Kubernetes та сучасних архітектурних стилів, таких як серверлесс. До основних моментів можна віднести наступне:

🔸 Інтеграція генеративного ШІ.

  • Генеративний ШІ стає популярним, його використовують вже 12% розробників Spring.
  • Інструменти для підтримки розробки з ШІ набирають обертів, 73% планують їх використовувати протягом наступних 12 місяців. Популярні варіанти — GitHub CoPilot і ChatGPT.

🔸 Використання Kubernetes.

  • Kubernetes використовується в 65% проєктів Spring, багато хто обирає дистрибутиви, або платформи на основі Kubernetes.
  • Розробники все впевненіше використовують Kubernetes для Spring, тому запити на нові функції зменшуються.

🔸 Сучасні архітектурні стилі.

  • Використання серверлесс зросло до 30%.
  • Модульні моноліти та реактивне програмування залишаються популярними, хоча модульні моноліти трохи втратили позиції через зміну визначень в опитувальнику.

🔸 Популярність Testcontainers.

  • Testcontainers став найгарячішою «новою» технологією, його вже використовують 53% розробників для інтеграційних тестів.

🔸 Проблеми з оновленнями застарілих версій.

  • Відставання з оновленнями залишається проблемою, 41% все ще працюють на Spring Boot 2.7. Основні причини — несумісні бібліотеки та відсутність пріоритетів.

🔸 Проєкт Spring AI та інші.

  • Новий модуль Spring AI, що спрощує інтеграцію ШІ, вже використовують 8% респондентів.
  • Інші популярні проєкти Spring: Spring Security, Spring Data і Spring WebMVC.

Більш детально зі звітом можна ознайомитися за посиланням.

Рекомендуємо ознайомитися з досвідом оновлення до Spring Boot 3.3.0 від Maciej Walkowiak. Якщо коротко, то Spring оновився до версії Hibernate 6.5, який містив мінорну зміну до генерації JPQL для випадку, коли передається пустий список параметрів. Це призвело до використання 100% CPU в продакшні. Мораль історії: завжди ретельно тестуйте навіть найменші зміни версій залежностей.

Kudos команді Hibernate, вони вже виправили цю проблему.

Команда Spring анонсувала, що їхня конференція SpringOne переходить в онлайн-формат і тепер повністю безплатна. Реєструйтеся на наступну конференцію, яка відбудеться з 26 по 28 серпня.

☁️ OCI

  1. Oracle розробляють свій асистент ШІ — Oracle Code Assist, що буде оптимізований в першу чергу для Java, SQL i OCI. Поки що він не доступний на загал, але є коротке демо відео, де Oracle Code Assist в Intellij Idea генерує код POJO класу та імплементацію метода виходячи з їхніх назв, а ще створює документацію і unit тести. Також Oracle обіцяють, що Oracle Code Assist зможе допомогти в оновленні Java версії в цілому проєкті.
  2. На блогах Oracle з’явилася серія з трьох статей (1, 2 і 3), яка порівнює патерн Saga з XA транзакціями. Автор намагається спростувати негативне ставлення до XA транзакцій, як до занадто складних. Він порівнює Java імплементацію патерна Saga з централізованим координатором і ХА транзакції на прикладі операції з 3-х сервісів.
  3. Oracle також показали вебінар, який знайомить зі специфікацією Jakarta для NoSql — JNoSql на прикладі проєкту з Helidon framework і базою даних Oracle NoSql.

☁️ AWS

  1. AWS CloudWatch Application Signals (Preview) — це комплексне рішення для моніторингу програм в runtime, яке надає можливість збирати метрики по latency (p99, p90, etc), request/error counts, бачити execution traces та інше. Цей сервіс, подібно до його конкурентів, таких як от Datadog, використовує instrumentation agent і не вимагає «видимих» змін в коді. В нещодавній статті на AWS Blogs розглядається використання цього сервісу для Java і Tomcat на прикладі славнозвісного PetClinic application.
  2. Також в AWS Blogs у цій статті нагадують про нетривіальний аспект AWS Lambda — виконання коду після повернення response з функції. Розглядаються 3 способи: асинхронний виклик іншої функції; response streaming, в якому відправляти response body можна до того як воно стає повністю готовим; і Lambda extensions, що виконуються як окремі від основної функції потоки/процеси.
  3. В AWS DynamoDB тепер можна обмежити on-demand таблиці в максимально допустимому автоматичному масштабуванні, аби уникнути ситуацій, коли внаслідок помилки кластер DynamoDB масштабується понаднормово.

☁️ Azure

  1. Стаття на Azure Blogs розглядає проблему виділення пам’яті для jvm в контейнерах. Проблема полягає у тому, що jvm за замовчуванням робить припущення, що вона не єдина програма, яка виконується в операційній системі, та старається займати пам’ять доволі консервативно. А це, своєю чергою, не дуже придатно для випадків, коли під jvm виділяється окремий контейнер. Як вирішення в Azure Container Apps використовується підхід automatic memory fitting, що розраховує виділення пам’яті на Metaspace, CodeCache та інші регіони jvm memory відносно деяких показників як, наприклад, jvm class count.
  2. З’явилася нова ревізія The Reliable Web App Pattern for Java від Azure. Нова версія хизується покращеннями в аспектах безпеки, масштабованості та Infrastructure as Code (IaC), які можна переглянути або в статті на Microsoft Devblogs, або відразу в git repository, що містить інструкцію з розгортання reference implementation на Azure порталі. Для людей, які хочуть познайомитись з Azure, ця імплементація може послугувати як хороший старт.
  3. Стала доступною перша GA-версія Semantic Kernel for Java v1 від Microsoft. Одна з основних можливостей — це використання анотацій @DefineKernelFunction і @KernelFunctionParameter над методами і параметрами для інтеграцій з AI агентами. В супровід цій новині також є декілька Hello World прикладів: створення Restaurant Bookings Sample, або Time Plugin використовуючи Java і сервіси Azure.
  4. На Microsoft Devblogs опублікована нова стаття про створення dev container для локальної розробки на java з Visual Studio Code. IntelliJ також підтримує dev container через plugin, який поки не має багато позитивних відгуків від користувачів, але цього місяця отримав доволі суттєве оновлення.

Ні місяця без скандалів в OpenAI. Цього разу із Скарлетт Йоганссон.

Голос нового ассистента від OpenAI — «Sky» підозріло подібний на голос акторки. І, вочевидь, це без її згоди 😏

З повним хвіттер-тредом можна ознайомитись тут.

Сам Сем Альтман, як бачимо, проблем в цьому не вбачає.

Друзі, дякуємо за увагу! Не забувайте лишати коментарі, вони надихають нас на створення нових випусків та допомагають робити цей дайджест ще цікавішим для вас.

Над дайджестом працювала команда Avenga: Іван Маглатій, Олег Чернигевич та Андрій Петрик.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую, гарний дайджест.

Я б ще додав, що довгоочікуваний String Templates або String Interpolation JEP (459) схоже вирішили взагалі прибрати з Java 23 навіть як preview, бо вирішили суттєво переглянути API після результатів preview попередніх версій.

Кому цікаво деталі, вони є в цьому листі Brian Goetz mail.openjdk.org/...​ts/2024-March/004010.html

Ми просто про це вже згадували в попередньому дайджесті dou.ua/forums/topic/48742

Вибачаюсь, старенький вже, багато інформації, важко згадати звідки її прочитав :)

Підписатись на коментарі