Java Digest # 9: Java 22, Tableflow, Valkey
🙋 Алоха, друзі!
Непростий березень вже позаду, а це означає що ми підзбирали для вас трішки новин зі світу 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.
Ось коротенький список, чого можна там очікувати:
- JEP 455, Primitive Types in Patterns, instanceof, and switch (Preview)
- JEP 468, Derived Record Creation (Preview)
- JEP 467, Markdown Documentation Comments
- JEP 466, Class-File API (Second Preview)
- JEP 465, String Templates
- JEP Draft 8325803, Flexible Constructor Bodies (Second Preview)
- JEP Draft 8326878, Vector API (Incubator)
- JEP Draft 8327844, Stream Gatherers (Second Preview)
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.
Наша підбірка цікавого контенту з ютубу за березень цього разу така:
- Performance oriented Spring Data JPA & Hibernate by Maciej Walkowiak
- A Decade of JDK Updates in OpenJDK
- Виявлено бекдор в інструменті стиснення xz Utils у версіях 5.6.0 та 5.6.1. Так виглядає, що виявили цей бекдор до того, як ці версії були використані у релізних версіях основних дистрибутивів Linux, уникнувши таким чином широкого впливу на реальний світ. Проблемні версії були виявлені у бета-версіях Fedora, Debian та у стабільному релізі Arch Linux. Проблема також актуальна для популярного менеджера пакетів HomeBrew для macOS, але була виправлена шляхом повернення до попередньої безпечної версії xz Utils. Раннє виявлення цієї вразливості запобігло потенційно катастрофічним наслідкам. Детальніше варто прочитати тут.
- Те, що Red Hat наймає McKinsey, аби допомогли їм «зрозуміти (...) практики розробки (...) з усієї індустрії програмного забезпечення» з метою стати «найкращою у світі організацією з розробки програмного забезпечення з відкритим кодом» — це щось, чого ми явно не очікували прочитати, а ви?
- Якщо ви, як і ми, вже познайомились з екстеншином pg_vector і дуже втішились, що ваша улюблена БД буде з вами в еру векторів і ембедінгів, то цей хвіттер-тред для вас.
- І для розширення горизонтів, ось вам стаття про протистояння Мамби і Трансформерів.
Сподобався дайджест? Поставте лайк та поділіться в коментарях ідеями, як нам варто покращувати майбутні випуски!
Серед авторів все без змін, над дайджестом працювала команда Avenga:
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів