Java Digest #7: в очікуванні Java 22, #1BRC, Spring не відпочиває

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

🙋 Алоха, друзі!

Ми повертаємось до вас після зимових канікул. За час нашого байдикування у світі Java та навколо нього відбулось багато цікавого, тож вйо до новин!

До речі, попередній дайджест можна прочитати тут.

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


JEP 455 отримав нарешті своє призначення і був запропонований на включення в JDK 23. Цей JEP розвиває історію в межах Project Amber, додаючи можливість використовувати примітивні типи у всіх типах патернів, а також розширює можливості instanceof та switch для роботи з ними. Aggelos Biboudis опублікував оновлення драфту специфікації до цієї фічі.

Ron Pressler разом з Alex Buckley подали драфт JEP 8323072 — Deprecate Memory-Access Methods in sun.misc.Unsafe for Removal. У ньому пропонується видалити (в майбутньому) усі методи горезвісного sun.misc.Unsafe, які працюють з прямим доступом до пам’яті.

JDK 22 ось вже видніється на горизонті, білди раннього доступу доступні за посиланням тут. Загальна доступність цієї версії JDK запланована на 19 березня 2024.

А оскільки JDK 22 вже знаходиться в другій Rampdown-фазі, то нових JEP-ів туди більше не завезуть, поїзд поїхав (хіба через Late-Enhancement Request Process, але це вкрай малоймовірно).

Тож в березні нас очікуюсь 12 наступних фіч:

Якщо ж JDK 22 занадто мейнстримно для вас, то ось, будь ласка, EA збірка № 6 JDK23.

Oracle Labs випустили черговий реліз GraalVM for JDK 21 Community 21.0.2, який містить виправлення в рамках Critical Patch Update для січня 2024. Більш детально читайте в реліз-ноутах.

Spring Boot 3.3.0-M1 вже доступний для завантаження і містить 105 змін. Більшість з них стосуються оновлення документації, підвищення версій залежностей та виправлення помилок, але є також кілька цікавих нововведень, які варто відзначити:

  • Починаючи з цієї версії, вебсервер Undertow використовуватиме віртуальні потоки, якщо їх увімкнено. Ви можете ввімкнути їх за допомогою параметра spring.threads.virtual.enabled.
  • Додано низку параметрів для налаштування резервного кластера для Apache Pulsar. Використовуючи ці параметри, ви можете налаштувати клієнт Pulsar на автоматичне перемикання на інший кластер у разі виникнення проблем із підключенням. Ви можете переглянути всі доступні параметри за допомогою префікса spring.pulsar.client.failover.
  • Зʼявилися автоконфігурації для JwtAuthenticationConverter та ReactiveJwtAuthenticationConverter, які автоматично налаштовуються у випадку, якщо присутній хоча б один із наступних параметрів: spring.security.oauth2.resourceserver.jwt.authority-prefix, spring.security.oauth2.resourceserver.jwt.principal-claim-name, spring.security.oauth2.resourceserver.jwt.authorities-claim-name.
  • Версія 3.3 продовжує розвивати підтримку Micrometer і OpenTelemetry. Було додано підтримку анотації @SpanTag і низку інших змін, про які ви можете прочитати тут.

Також у січні були випущені дві підтримуючі версії для Spring Boot, а саме: Spring Boot 3.2.2 та Spring Boot 3.1.8. Основний акцент був зроблений на виправленні помилок і оновленні версій залежностей. Додаткові подробиці можна знайти тут і тут.

Увага! Attention! Pozor!

Редакція наполегливо рекомендує всім нашим читачам оновити свої вебпроєкти до останніх версій Spring Boot, оскільки в попередніх була виявлена вразливість, яка могла призвести до їх недоступності. Детальнішу інформацію про вразливість можна знайти тут.

Як і очікувалося, були представлені нові версії Spring Framework: 6.1.3 та 6.0.16. Обидві версії використано як базові в раніше згаданих Spring Boot версіях 3.2.2 та 3.1.8. Детальний перелік змін доступний за посиланням.

Не повідомляючи про це у своєму блозі, команда Spring Security випустила Spring Security 6.3.0-M1. Окрім виправлень помилок і оновлень залежностей, ця версія також містить деякі нововведення. З найцікавішого: в RoleHierarchyImpl додано новий фабричний метод, який дозволяє встановлювати ієрархію без використання сеттерів, до анотації @EnableMethodSecurity додано новий атрибут offset, а до HandlerMappingIntrospector додано кешування для підвищення продуктивності. Детальний опис змін можна знайти тут.

Крім того, Spring Security 6.3 додасть пасивну JDK серіалізацію/десеріалізацію для підтримки «плавних» оновлень. У цій статті ви можете прочитати про проблеми, що стали передумовою для появи цих змін.

В Spring Authorization Server 1.3.0-M1 покращено логування помилок для недійсного або протермінованого коду авторизації, додано підтримку мультитенантності за допомогою компонента шляху емітента та розширена можливість валідації скоупів. Більш детальну інформацію можна знайти тут.

Spring Data 2023.1.2 та 2023.0.8 вже доступні для завантаження. Ці випуски містять оновлення залежностей, виправлення регресії та ще деякі покращення. Обидві версії вже використовуються у найновіших версіях Spring Boot.

Для Spring Modulith було випущено одразу три версії: 1.0.5, 1.1.2 та 1.2 M1. Головні зміни в цих релізах стосуються виправлення помилок і дрібних поліпшень у реєстрі публікацій подій, екстерналізації подій і загальної конфігурації. Докладну інформацію можна знайти у списках змін до кожної з версій.

Останнє оновлення Spring Cloud Commons 4.1.1 розвʼязує проблему з реєстрацією BeanPostProcessors, коли компоненти, анотовані @LoadBalanced, створюються за допомогою автоконфігурації.

Spring Cloud Dataflow 2.11.2 оновився до Spring Boot 2.7.18 та включає виправлення для CVE-2023-6378 (Увага! Attention! Pozor!).

Spring for Apache Kafka 3.1.1 вже доступна для використання. Це перша версія, випущена після того, як засновник проєкту Гері Рассел вирішив піти на пенсію. Основна увага була зосереджена на вдосконаленні наявної функціональності та виправленні помилок. У Spring Boot ця версія використовується починаючи з версії 3.2.1.

Ще один проєкт, яким керував Гері Рассел, також отримав свій перший реліз після його відходу, а саме: Spring AMQP. У версії 3.1.1 усю документацію було переміщено до Spring Antora, усі синхронізовані блоки в коді замінено екземплярами Lock (та Conditional) для відповідності вимогам використання віртуальних потоків, а також додано механізм для включення більш використовуваних модулів у ObjectMapper з коробки. Як і в попередньому випадку, ця версія використовується у Spring Boot з версії 3.2.1.

Spring for Apache Pulsar також отримав нову версію під номером 1.0.2. Головною зміною є поява в проєкті модуля BOM (spring-pulsar-bom), який спрощує процес використання Spring for Apache Pulsar у ситуаціях, коли Spring Boot не використовується. Також оновлено деякі залежності до новіших версій. У Spring Boot ця версія додана починаючи з версії 3.2.2.

Spring Session 3.3.0-M1 пропонує Reactive Redis Indexed реалізацію ReactiveSessionRepository з підтримкою подій сесій та пошуку сесій за основним іменем.

Нова реалізація використовує відмінний підхід до зберігання та витягування інформації про вторинні індекси, а також до стратегії закінчення сесій.

Spring Web Services отримав версію 4.0.10. Додано підтримку для jar:nested в SchemaFactoryUtils, видалено дублюючі декларації залежностей для HTTP Client та оновлено Spring Framework до 6.0.16.

Також вийшла нова версія Spring Tools 4.21.0 для Eclipse, Visual Studio Code, та Theia. Детальний опис змін тут.

Spring Shell отримав відразу дві версії 3.1.8 та 3.2.1. Обидві версії містять виправлення помилок і оновлення до останніх версій Spring Boot.

Переходимо до новин, не пов’язаних безпосередньо з оновленнями в екосистемі Spring.

Joris Kuipers поділився історією міграції проєкту з Spring Cloud 2.4 на Spring Cloud 3.x. В статті детально описуються основні відмінності, які були помічені на основі міграції проєкту до Spring Cloud 3.x.

Maciej Walkowiak випустив нову версію свого проєкту WireMock Spring Boot. Ця бібліотека значно спрощує роботу з Wiremock, тому редакція рекомендує ознайомитися із цим проєктом, якщо ви ще цього не зробили.

З часу нашого попереднього випуску Josh Long випустив чотири відео із серії Spring Tips. Ознайомитися з ними можна нижче:

Spring Tips: Spring’s Application Event Subsystem:

Spring Tips: DataSources;

Spring Tips: Spring Data JDBC:

Spring Tips: Spring AI:

  • Услід за jdk-21.0.2-ga з’явилися і нові версії Coretto, TemurinMicrosoft OpenJDK. Також AWS заявили про плани припинити підтримку Java v1.x
  • На каналі MicrosoftAzureDevelopers з’явилася серія відео про міграцію Java Tomcat програм на Azure App Service, а саме: VM Migration за допомогою Azure Migrate, конфігурацію GitHub Actions Workflow і Monitoring швидкодії, помилок тощо.
  • У Google нещодавно з’явилися два ресурси про оптимізацію швидкодії Java. Перший — коротке відео, яке знайомить з темою оптимізації на етапах build time, start time, runtime і торкається tracing, jib, CRaC, class data sharing, native image compilation i graalvm. Другий — стаття про startup time в Google Kubernetes Engine, де можна дізнатись зокрема про image streaming, zstd compression і ContainerD image layers reuse.
  • AWS Lambda SnapStart for Java — оптимізація швидкодії внаслідок створення snapshot, який можна перевирокористовувати, став доступний ще в декількох регіонах: UAE, Europe і Asia Pacific.
  • За останніх два квартали до Java-бібліотек для Azure Cosmos DB додавались нові можливості, виправлення та стабілізації. Найважливіші з них підсумували в цій статті на Microsoft blogs.
  • Про сортування даних в DynamoDB в контексті всіх даних в таблиці, замість сортування в межах одного partition key, розказують у цій статті на AWS blogs.
  • Спосіб реалізації версіонування даних в CosmosDB зі збереженням минулих версій для аудиту, історії та інших подібних вимог описано у цій статті на Microsoft blogs.
  • Google адвокатує використання бази даних Spanner для non-relational моделей даних. У новій статті на Google blogs описані деякі концепти NoSQL баз даних і способи їх перенесення в Spanner. Також є ще нова стаття про використання емульованого Spanner в testcontainer для локальної розробки і автоматизації на прикладі GitHub Actions.
  • До AWS ECS i Fargate тепер можна додавати EBS volume per task з можливістю не видаляти його після task termination, більше за посиланням.
  • Розгортання Kafka і Zookeeper на AWS EKS з динамічною зміною кількості брокерів і ребалансінгом стає можливим завдяки двом проєктам — strimzi та DoEKS. Strimzi використовує Kubernetes Operator для адміністрації Kafka-кластеру. DoEKS — Data on Amazon EKS — це набір темплейтів для розгортання дата платформ, як-от: Kafka, Spark, Cassandra та інших на AWS EKS. Приклад такого розгортання Kafka з тестами скейлінгу і швидкодії можна подивитися на AWS blogs.
  • Приклад використання сервісів Amazon Managed PrometheusGrafana з’явився на AWS blogs. У ньому будують об’єднану Observability-систему, що збирає метрики з CloudWatch i AWS Distro for OpenTelemetry з декількох AWS-акаунтів і on-prem локацій в один централізований акаунт з AWS Prometheus i AWS Grafana.

  • Був випущений перший реліз-кандидат Quarkus 3.7, який містить доволі цікаві нові можливості: підтримку Linkedin OIDC, підтримку @MeterTag анотації Micrometr та багато іншого. За деталями тицяйте тут.
  • Hibernate випустив версію 6.4.2, яка містить багато дрібних і не дуже покращень, за деталями — сюди.
  • Не відстає від старшого брата і Hibernate Reactive 2.2.1 Final. Серед цікавого: підтримка Order з Hibrante 6.3, а також можливість викликати upsert() методу (який визначений в StatelessSession) на всіх базах даних. Більш детально тут.
  • П’ятий альфа-реліз Apache Groovy вже доступний. Також доступний і Apache Groovy 4.0.18.
  • Був випущений 12-й альфа-реліз Apache Maven 4.0.0.
  • Також спеціально для всіх цих «джава-повільна-скептиків» рекомендуємо не проходити повз #1BRC — The One Billion Row Challenge. Результати та опис доступні в репо Gunnar Morling, а блог на InfoQ дуже гарно все підсумовує.

🔗 Java’s Plans for 2024 — Inside Java Newscast #61

🔗 Performance optimizations for Java applications

🔗 Code Review, you said? by Venkat Subramaniam

Друзі, нам важлива ваша думка! Поділіться в коментарях ідеями, як нам варто покращувати цей дайджест та які новини в ньому вам цікаво читати?

Над дайджестом працювала команда Avenga:

👍ПодобаєтьсяСподобалось16
До обраногоВ обраному4
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

Дякую за спробу, але дуже слабо ((((

дякую за Ваш коментар

а як би ви зробили? справді цікаво..

Дяка за дайджест! Дуже багато цікавої інформації ❤️

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