Java Digest # 9: Java 22, Tableflow, Valkey

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

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

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

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

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

Java 22 уже тут! 🔥Минуло шість місяців відтоді, як було випущено Java 21, тож настав час освіжити платформу новим набором можливостей.

Проте, якщо ви віддаєте перевагу аудіовізуальному контенту, Billy Korando звісно ж записав для нас з вами двохвилинне відео про Java 22.

Цікаво детальніше розібратись, що ж додали у 22 і чим це відрізняється від того, що було у 21? Тоді запрошуємо почитати цей чудовий розбір з прикладами від Java Champion — Hanno Embregts.

Ну і куди без GraalVM? Ось до вашої уваги стаття у виконанні Alina Yurenko.

Якщо ви щасливий власник робочої машини на базі Apple Silicon — рекомендуємо вам не покращуватись до версії 14.4 macOS, а одразу до версії 14.4.1, інакше будете мати проблемки з роботою Java. Детальніше читайте тут.

Бажаєте мігрувати на VS Code? Тоді вам стане в нагоді ось цей гайд, який містить дуже детальний опис всього з картинками!

В Java 22 завезли дуже давно очікуване доповнення до Stream API — Gatherers. Ми вже згадували про це в одному зі своїх попередніх дайджестів. Цього разу вашій увазі представлено одразу два огляди цієї нової можливості: від Piotr Przybył та від Gunnar Morling.

Проте Java 22 — це вже історія. Поговорімо про Java 23 😅

Запланований на вересень 2024 року реліз GA включає лише один JEP для JDK 23 на цей час. Проте, аналізуючи численні кандидати та проєкти JEP, особливо ті, що були подані, можна припустити які саме додаткові JEP мають потенціал бути доданими в JDK 23.

Ось коротенький список, чого можна там очікувати:

Spring Framework 6.1.5, 6.0.18 та 5.3.33 були зосереджені передусім на усуненні CVE-2024-22259 (Увага! Attention! Pozor!) — вразливості, пов’язаної з UriComponentsBuilder. Це вже друга спроба розвʼязання проблем асоційованих з UriComponentsBuilder. У попередньому дайджесті ми обговорювали CVE-2024-22243, що також стосується вразливостей пов’язаних з атаками через відкрите перенаправлення та фальсифікацією запитів на боці сервера. Детальніше про інші зміни можна дізнатися тут.

Spring Boot 3.3.0-M3 пропонує низку нововведень, серед яких можна виділити наступні:

  • розширена підтримка Class Data Sharing (CDS);
  • починаючи з цієї версії, ресурси можуть бути завантажені як текстові значення, закодовані у форматі Base64 за допомогою префікса base64:. Це може бути корисним для завантаження ресурсів, таких як SSL сертифікати;
  • в актуаторі було додано новий ендпоінт (/actuator/sbom), який дозволяє переглянути всі доступні SBOMs (Software Bill of Materials).

Крім того, було випущено ще дві версії Spring Boot 3.2.4 та Spring Boot 3.1.10. Основна увага в них була спрямована на виправлення наявних помилок. Детальніше тут і тут.

У Spring Data 2024.0.0-M2 була додана можливість встановлювати специфічні для MongoDB атрибути для транзакції за допомогою @Transactional#label, а версії Spring Data 2023.1.4 та 2023.0.10 містять оновлення залежностей, виправленнями регресій і низку вдосконалень.

Команда Spring Security вирішила встановити новий рекорд, випустивши відразу шість (!!!) нових версій. Spring Security 6.3.0-M3, 6.2.3, 6.1.8, 6.0.10, 5.8.11 та 5.7.12 містять численні виправлення помилок, про які ви можете дізнатися тут. Вони також містять виправлення для CVE-2024-22257 (Увага! Attention! Pozor!). Ми наполегливо рекомендуємо оновитися до останніх версій.

У Spring Session 3.3.0-M3 додано можливість вибору TransactionManager за допомогою нової анотації @SpringSessionTransactionManager. Крім того, додана можливість обмежити кількість активних сеансів, які може мати один користувач одночасно (зокрема в кластерному середовищі) при роботі з WebFlux. Детальніше про нові зміни можна дізнатися тут.

Також було випущено Spring Session 3.2.2 та 3.1.5, які містять виправлення помилок, оновлення залежностей і ту саму нову анотацію, пов’язану з TransactionManager, про яку згадувалося раніше. Більше інформації про ці релізи можна знайти у примітках тут і тут.

Команда Spring Integration випустила одразу три версії — Spring Integration 6.3.0-M2, 6.2.3 та 6.1.7. Детальніше все за цим посиланням, а от з цікавого в 6.3:

  • Kotlin DSL тепер сумісний з майбутньою версією Kotlin 2.0;
  • модуль spring-integration-security було повністю вилучено на користь SecurityContextChannelInterceptor та SecurityContextPropagationChannelInterceptor з модуля spring-security-messaging проєкту Spring Security.
  • ObservationPropagationChannelInterceptor позначено як застарілий, оскільки він не забезпечує належної передачі стану спостереження між потоками, або навіть до постійного сховища. Замість цього, спостереження має бути активоване на MessageChannel та відповідному MessageHandler як підписнику цього каналу. Так інформація для трасування передається через заголовки повідомлень

​​Spring Cloud 2023.0.1 (aka Leyton) вже доступний до використання. Ви можете ознайомитися зі списком змін у цій публікації.

Версія Spring Modulith 1.2 M3 принесла три нові зміни:

  • тепер модулі можуть бути оголошені як відкриті, що надає іншим модулям повний доступ до внутрішніх елементів відкритого модуля. Це передусім призначено для сценаріїв, коли Spring Modulith вводиться в наявні проєкти з неоптимальною структурою;
  • Kotlin не підтримує безпосереднє анотування пакетів, оскільки він не має еквівалента package-info.java. Тепер анотації конфігурації на рівні пакетів, такі як @ApplicationModule або @NamedInterface, можуть використовуватися на типах, анотованих за допомогою @PackageInfo;
  • до анотації @ApplicationModuleListener додано поле condition, щоб надати можливість обробляти події, що відповідають певним критеріям.

Spring Authorization Server 1.3.0-M3 містить два важливих нововведення:

  • додано можливість аутентифікації клієнта за допомогою PKI Mutual-TLS;
  • зʼявилася підтримка OAuth 2.0 Token Exchange. Про це нововведення було опубліковано окремий пост, з яким ви можете ознайомитись тут.

Також стали доступними Spring Authorization Server 1.2.3, 1.1.6 та 1.0.6. Їхня основна мета — усунення проблеми CVE-2024-22258 (Увага! Attention! Pozor!).

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

Одразу три версії Spring for Apache Kafka 3.0.15, 3.1.3 та 3.2.0-M2 стали доступними для завантаження. Усі версії містять виправлення помилок, оновлення залежностей і документації.

Серед важливих нововведень 3.2.0-M2 можна відзначити підтримку неблокованих повторень при використанні анотації KafkaListener на рівні класу, новий API для виконання пошуку за зміщеннями, які розраховуються за допомогою функції, наданої користувачем, та низку покращень у підтримці інтерактивних запитів Kafka Stream. Додаткові деталі з усіх змін ви можете знайти за цим посиланням.

Spring for Apache Pulsar 1.1.0-M2 містить численні покращення, вдосконалення документації, виправлення помилок і оновлення залежностей. Серед новинок варто виділити додавання нового модуля spring-pulsar-test, що містить корисні інструменти для тестування ваших застосунків.

Версія Spring for Apache Pulsar 1.0.4 містить оновлення залежностей та виправлення помилки, через яку кеш продюсера ставав неефективним при налаштуванні реалізації інтерфейсу ProducerBuilderCustomizer. Більше деталей про цей реліз можна знайти тут.

Нові версії Spring HATEOAS 2.1.4, 2.2.1 та 2.3 M1 переважно містять виправлення помилок та оновлення залежностей. Якщо ви користуєтеся версіями 2.1.x або 2.2.x, ми радимо вам оновитись до найновіших версій, оскільки вони вже використовують нову версію бібліотеки JSONPath, яка містить виправлення для CVE-2023-51074 (Увага! Attention! Pozor!).

Spring Shell отримав дві нові версії — Spring Shell 3.1.10 та 3.2.3. Деталі за посиланням.

Також була випущена нова версія Spring Tools 4.22.0, про яку ви можете прочитати тут.

Пропонуємо переглянути нові відео з серії Spring Tips, які були випущені протягом останнього місяця:


🎬 Spring Batch Remote Partitioning, your easy button for data scale:

🎬 The JetBrains Exposed ORM for Kotlin:

🎬 Distributed Job Scheduling with Jobrunr:


Sam Brannen поділився цікавою новиною: оператор індексу із захистом від null для Spring Expression Language (SpEL) з’являється у Spring Framework 6.2!

☁️ AWS

  • Amazon Coretto 22 доступна для завантаження.
  • На AWS Blogs з’явилася стаття про використання Spring Boot з СRaC (Coordinated Restore at Checkpoint) для того, щоб скоротити startup time. В цьому прикладі до 0.3 сек на противагу 12 сек без CRaC. Для CI/CD процесу використовуються AWS CodeCommit, CodePipeline i ECR, а програма розгортається на EKS.
  • З’явилась нова версія spring-cloud-aws 3.1.1. Оновлення і виправлення торкаються SQS, SES, DynamoDB та інших сервісів, детальніше в release notes.
  • Ця стаття на AWS Blogs порівнює 3 патерни структуризації AWS Lambda: Single responsibility, Lambda-lith і CQRS. Одна з основних відмінностей полягає у гранулярності лямбд, але стаття також розглядає й інші аспекти.
  • Standard support перестане бути доступним для AWS Aurora 2 для Mysql 5.7 після 31 жовтня 2024. Користувачам рекомендується перейти на AWS Aurora 3 для Mysql 8.0 і у цій статті на AWS Blogs описується перші кроки, які слід здійснити для цього. В іншому випадку Aurora DB перейде на extended support який має більшу ціну.

☁️ Azure

  • Стала доступною нова версія Microsoft Semantic Kernel for Java v1.0.0-rc2 — сервісу, який за допомогою azure openai перетворює словесну команду у виклик коду співставляючи intent команди з description коду. Новина є на Microsoft devblogs, java приклади є на github, а більш змістовний і детальний опис сервісу є в документації.

☁️ OCI

  • В Oracle з’явилося відео про App Stack — набір Terraform Script для автоматичного розгортання Java програм на Serverless платформі. Якість звуку, на жаль, залишає лише бажати кращого, тому ось ще посилання на github quickstart.
  • Oracle пропонує імплементацію Saga Pattern для сервісної архітектури, де координатором виступає Oracle DB з вбудованою messaging platform TxEventQ. У цій схемі сервіси ініціюють і беруть участь в транзакції комунікуючи з Oracle DB по стандарту LRA (Long Running Action), а сервіси отримують команди від координатора через message broker, наприклад, про те, що сталась помилка і потрібно виконати transaction revert. Докладніше про це можна почитати у новій статті на Oracle Devblogs, де крім тексту є також відео та посилання на приклади коду.

☁️ GCP

  • Eclipse Temurin 22 вже доступний, але ще не для всіх платформ. Стежити за прогресом по платформах можна за цим посиланням.

  • Вітаємо (із запізненням, вимбачте) Scala і все Scala-ком’юніті з днем народження! Scala стукнуло 20! 🥳

  • А ось і роадмапа Scala на 2024.
  • Один з улюблених інструментів нашої команди — Debezium отримав версію 2.5.3. Що там всередині — читати тут.
  • Компанія Confluent представила широкій публіці свою нову розробку — Tableflow. Ідея цього продукту — зробити надзвичайно простим процес перенесення даних Apache Kafka безпосередньо до вашого дата лейку, складу даних чи аналітичного двигуна у вигляді таблиць Apache Iceberg.
  • Micronaut отримав версію 4.3.6. Детальніше — тут.
  • Після доволі неочікуваних змін в ліцензійних угодах Redis, Linux Foundation оголосило про створення open-source аналогу Valkey, який буде базуватись на Redis 7.2.4.
  • Доволі цікаві роздуми про перспективи стрім-процесінгу і його подальшого розвитку від Kai Waehner.
  • Новий codelab на основі LangChain4j по GeminiAI опублікував Guillaume Laforge.

Наша підбірка цікавого контенту з ютубу за березень цього разу така:

  • Виявлено бекдор в інструменті стиснення xz Utils у версіях 5.6.0 та 5.6.1. Так виглядає, що виявили цей бекдор до того, як ці версії були використані у релізних версіях основних дистрибутивів Linux, уникнувши таким чином широкого впливу на реальний світ. Проблемні версії були виявлені у бета-версіях Fedora, Debian та у стабільному релізі Arch Linux. Проблема також актуальна для популярного менеджера пакетів HomeBrew для macOS, але була виправлена шляхом повернення до попередньої безпечної версії xz Utils. Раннє виявлення цієї вразливості запобігло потенційно катастрофічним наслідкам. Детальніше варто прочитати тут.
  • Те, що Red Hat наймає McKinsey, аби допомогли їм «зрозуміти (...) практики розробки (...) з усієї індустрії програмного забезпечення» з метою стати «найкращою у світі організацією з розробки програмного забезпечення з відкритим кодом» — це щось, чого ми явно не очікували прочитати, а ви?
  • Якщо ви, як і ми, вже познайомились з екстеншином pg_vector і дуже втішились, що ваша улюблена БД буде з вами в еру векторів і ембедінгів, то цей хвіттер-тред для вас.
  • І для розширення горизонтів, ось вам стаття про протистояння Мамби і Трансформерів.

Сподобався дайджест? Поставте лайк та поділіться в коментарях ідеями, як нам варто покращувати майбутні випуски!

Серед авторів все без змін, над дайджестом працювала команда Avenga:

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

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