Java Digest #5: Devoxx в Антверпені, AWS Bedrock, Oracle Java Platform Extension для VS Code
🙋 Алоха, друзі!
У жовтні ми оговтувалися від релізу Java 21, а Devoxx Belgium зібрав в Антверпені справді зірковий склад цього року і не давав нікому розслабитись у жовтні, щодня випускаючи кілька нових записів.
Попередній дайджест можна прочитати тут.
Але пам’ятайте, що це стало можливим винятково завдяки ЗСУ, і читати ви його зараз можете теж завдяки їм. Тому швидесенько перед прочитанням пішли міняти долари та кидати гривні на допомогу нашим захисникам.

Оскільки Java 21 — це вже буденність, і всі встигли на неї мігрувати, нумо дивитися, що нас очікує далі.
Щоб добити pattern-matching, JEP 455 пропонує додати можливість використовувати примітивні типи в Patterns, switch та instanceof
, а JEP 457 має доповнити JDK новими можливостями Classfile API
. Більш детально у відео Brian Goetz:
.
Nicolai Parlog в 56 випуску свого Java Newcast теж розповідає про Classfile API:
Возночас JEP 456: Unnamed Variables and Patterns був промоутнутий до статусу targeted і, ймовірно, буде доданий в JDK 22.
Early-access Build 20 JDK 22 вже доступний для завантаження. Більше деталей, що туди увійшло, можна прочитати в release notes.
Oracle представив Oracle Java Platform Extension for Visual Studio Code. Це розширення надає повнофункціональну розробку на Java (цикл редагування, компіляції, дебагу, тестування) для Maven- та Gradle-проєктів у VSCode.
В черговому епізоді Sip of Java Billy Korando детальніше розповідає про Sequenced Collections in Java 21:
А також Billy цього місяця випустив відео про Generational ZGC:
Якщо тема GC вам цікава, то ось ще відео про G1:
І завершити тему GC хотіли б статтею про тюнінг GenZGC.
Ми вже згадували про це раніше, але Gatherers переходять в статус превʼю. На наш смак, це вже дуже давно очікуване доповнення Stream API.
А в новому випуску Java Cafe ставлять крапку в вічному питанні на співбесіді:
У жовтні ми були свідками виходу багатьох реліз-кандидатів, що свідчить про активну підготовку екосистеми продуктів Spring до випуску Spring Framework 6.1 і Spring Boot 3.2. Уже наступного місяця ми матимемо можливість сповна насолодитися всіма новинками, які були висвітлені в наших попередніх випусках, а нижче ви можете знайти всі важливі зміни, які сталися протягом жовтня.
Минулого місяця було випущено не один, а цілих ДВА реліз-кандидати Spring Framework. Основна увага була акцентована на підготовці до випуску Spring Framework 6.1, у рамках якого проводилися виправлення помилок та внесення інших незначних покращень. Із цікавого: підвищення мінімально необхідної версії Jackson до 2.14 та зміни, повʼязані з метаданими доступності, які необхідні для повної підтримки майбутньої версії GraalVM. Більш детально з усіма оновленнями ви можете ознайомитися тут і тут.
Чи є щось цікавіше, ніж новини про Spring Framework? Спробуймо відгадати разом. Це щось, що має слово Spring у назві та закінчується на Boot. Spring Boot 3.2.0-RC1 приніс 128 змін різного характеру. Хочеться звернути увагу на декілька ключових. По-перше, підтримка вкладених файлів JAR була поліпшена шляхом видалення підтримки Java 8. Крім того, було додано підтримку SSL-бандлів для автоконфігурації Kafka та RabbitMQ. А для Netty і Tomcat також була додана підтримка перезавантаження SSL-бандлів.
Не варто забувати й про актуальні версії. У жовтні вийшов Spring Framework 6.0.13, а також Spring Boot 3.0.12 та Spring Boot 3.1.5, які базуються на ньому. Якщо з якихось причин ви ще не перейшли на Spring Boot 3, можете вже зараз оновити свій проєкт до версії Spring Boot 2.7.17.
Spring Security отримав зразу пʼять версій: 5.8.8, 6.0.8, 6.1.5, 6.2.0-RC1 та 6.2.0-RC2
. Нововведення в реліз-кандидатах містять: автоматичне вмикання .cors()
, якщо присутній бін CorsConfigurationSource; спрощення конфігурації клієнтської моделі OAuth2; підтримка Servlet Path
для класу AuthorizeHttpRequestsConfigurer
.
Spring Data 2023.1 під кодовою назвою Vaughan отримав свій перший реліз-кандидат. З новенького:
- Додана можливість вибирати параметри читання для всього репозиторію, або вибраних методів пошуку / агрегації. Також додана підтримка крапок у назвах полів документа MongoDB.
- Інфраструктура конвертерів для JDBC і R2DBC, що розвивалися паралельно протягом довгого часу, не враховуючи один одного. Розробники переглянули цю інфраструктуру, що дозволило використовувати одну і ту ж абстракцію для обох модулів.
- Зʼявилася підтримка асинхронного кешування для Redis під час використання драйвера Lettuce.

Крім цього, були випущені проміжні версії Spring Data 2023.0.5, 2022.0.11 та 2021.2.17. Нічого особливого виділити не можемо. Усі вони містять виправлення помилок і відповідні оновлення залежностей для підпроєктів.
Spring Cloud Dataflow отримав версію 2.11.1. Основна увага в цьому релізі зосереджена на оновленні версій залежностей і виправленні вразливостей CVEs.
Spring Cloud Stream Applications v2022.0.0 вже є доступним до завантаження. Цей реліз має перехід на Spring Boot 3.1.x і Spring Cloud 2022.0.x (де це можливо).
Команда Spring Modulith випустила зразу дві версії. Версія 1.0.2 переважно містить виправлення помилок і перехід на Spring Boot 3.1.5, а ось версія 1.1 RC1 вносить низку нововведень. З основних можна згадати такі: оновлення до Spring Boot 3.2 RC1 / Spring Framework 6.1 RC1; додана суворіша фільтрація бінів під час використання @ApplicationModuleTest; тепер для кожного базового пакета створюються синтетичні модулі. Більш детальну інформацію можна знайти тут.
Вийшов перший реліз-кандидат для Spring Authorization Server 1.2.0. У ньому був доданий багаторазовий обробник помилок автентифікації. Також стали доступні версії 1.1.3, 1.0.4 та 0.4.4.
Новий Spring Vault 3.1.0-RC1 оновився до Spring Framework 6.1.0-RC1 та додає декілька інших нововведень.
Другий майлстоун Spring Shell 3.2.0 додає першу експериментальну підтримку Terminal UI, як показано на гіфці нижче:
Також вийшли Spring Shell 2.1.13, 3.0.8 та 3.1.4. Детальніше можете ознайомитися тут.
Spring Batch 5.1 RC1 спрямований на покращення досвіду для нових користувачів. Були покращенні інструкції та приклади по роботі з Spring Batch, а також зазнав значних змін процес баг репортінгу. Детальніше тут.
Можна було б завершити тут, але у нас є ще дві цікаві новини для вас.
Soby Chacko разом з колегами випустили серію статей, яка присвячена роботі з транзакціями в Spring Cloud Stream Kafka. Ця серія висвітлює багато низькорівневих деталей написання транзакційних програм з використанням Spring Cloud Stream і Apache Kafka. Ось посилання на останню статтю. Усі попередні можна знайти на її початку.
Juergen Hoeller та Sébastien Deleuze розповіли на Devoxx про нововведення, які нас очікують в Spring Framework 6.1 та Spring Boot 3.2. Крім того, вони поділились інформацією про різні механізми, які допоможуть підвищити ефективність використання ресурсів у проєктах. Якщо ви віддаєте перевагу статтям, ось короткий виклад їхнього виступу. А якщо відео, то ви можете знайти його тут.
- Якщо вам досі не вдалося переконати свого проджект-менеджера чи тімліда в необхідності міграції на (хоча б) Java 17, покажіть їм це відео:
- Ricardo Ferreira розповідає, як використовувати Java в комбінації з AWS Bedrock:
- AWS lambda тепер має base image для попереднього перегляду java 21 на ecr — тег 21-preview.2023.10.17.19. Можливо, GA буде готовий до кінця року, а поки можна тестувати image і залишати фідбек. Також на QCon SF відбулась презентація про особливості роботи lambda «під капотом», текстову версію якої можна прочитати тут.
- Якщо вам потрібно покращити час, за який стартує ваша докеризована джава програма, то в AWS з’явилася стаття, що показує як це можна зробити в aws fargate на прикладі Spring і Quarkus. Використовуючи технологію Seekable OCI (SOCI) і jar величиною близько 875 MB, покращення в часі коливаються між 13% і 25% порівняно з традиційним використанням контейнерів.
- Microsoft створили серію відео, які на прикладі java-проєкту (ось він на github), доступно показують основні принципи та патерни для програм у хмарах: інфраструктурну надійність, безпеку, оптимізацію витрат, а також circuit break, кешування тощо. Код містить Terraform скрипти, якими проєкт можна створити на Azure.
- Також є нове відео про Azure Functions, у якому розказують про покращення для Java, що відбулися у 2023: підтримку Dependency Injection, покращені tracing i profiling та інше.
- AWS step functions зазнав змін у користувацькому досвіді: змінений UI створення state machine з готовими шаблонами, з’явилася можливість змінювати конфігурації, dsl і дизайн в одному вікні редактора і виконувати темплейт відразу з того ж вікна.
- Аби перевірити, чи ви відповідаєте архітектурним стандартам Well Architected Framework, тепер можна використовувати спеціальний сервіс — AWS Well-Architected Tool. Він має шаблони з питаннями, на які вам треба буде відповісти, і ви отримаєте звіт з того, що у вас добре, а що варто покращити. Є різні шаблони, які спеціалізовані під різні типи аплікацій (Lenses), або, наприклад, можна створювати свої шаблони та ділитися ними в інших акаунтах вашої організації.
- Приблизно місяць тому AWS показав вражаючі цифри про трафік на DynamoDB під час одного з найактивніших розпродажів на Amazon — 216 мільйонів викликів на секунду з затримкою менше 1 мс у пікових навантаженнях. Тепер Google виклав статтю, де прямо в заголовку порівнює свій Cloud Spanner з DynamoDB і додає в тексті наступне: три мільярди викликів на секунду в пікових навантаженнях, підтримка звичних реляційних схем з ACID і т.д., та ще й краща ціна. Цитуючи статтю: up to 2x better read throughput per dollar compared to Amazon DynamoDB for similar workloads.
- Нещодавно Azure PubSub був розширений підтримкою для socket.io, а цього місяця документація поповнилася статтею про аутентифікацію. Ця підтримка все ще в стані preview і поки що концентрується на перенесенні деяких задач з ваших програм на керовані сервіси Microsoft, наприклад, broadcast з серверів до клієнтів.
- Як зробити GCP функцію зі значно меншим розміром у порівнянні зі стандартним java runtime від Google можна подивитися тут.
- Oracle каже, що аби покращити безпечність даних на вашому (і їхньому) хмарному середовищі, не треба так аж дуже розбиратися у шифруванні, firewall, iam та інших нудних речах. Треба просто гарно попросити їх ШІ (ну, майже). Як Oracle хоче використовувати NLP — можна подивитися у цьому відео.
- Стала доступною версія Hydra 1.0 — розширення для PostgreSQL, яке додає можливість створювати таблиці з розміщенням даних колонками для аналітичних задач (olap). Hydra дає можливість як створити нові таблиці, так і перетворити старі таблиці на колонко-орієнтовані, дозволяє використовувати спеціалізовані індекси (типу gin, rum, etc.) та наводить заміри швидкості, де порівнює себе з різними row-oriented сховищами. Це та інше можна дізнатися у першоджерелі.
- Якщо вам хочеться знайти заміну Intellij, то Visual studio працює над кращою інтеграцією IDE з Gradle. Більшість завдань IDE буде делегувати через Build Server Protocol на Build Server for Gradle, розроблений в співпраці Microsoft i Gradle Enterprise. Дізнатися, що вже підтримується через BSP, а що планується, можна в офіційній новині, а стежити за release notes можна на github.
- Вийшла нова версія для Prometheus Java Client — 1.0! Попередня версія була аж 0.16.0 з 2022 року і називалася Prometheus Java Simpleclient. У новій версії є підтримка histograms, opentelemtry і нове ім’я — Prometheus Java Client. Короткі release notes є на github, розширений блог пост — ось тут, а ще є відео виступу автора github — Fabian Stäber на нещодавній конференції PromCom. Коли Spring Boot оновить версію — поки не відомо.
- З’явився новий реліз Gradle — 8.4, у якому серед всіляких оптимізацій, виправлень і іншого є java 21. WARNING! УВАГА! POZOR! Нова java ще НЕ підтримується повністю, більше деталей у release notes. Поки невідомо чи Gradle 8.5 буде підтримувати java 21 повністю через залежність на реліз Kotlin, але подивитися, що наразі планується в 8.5 RC1, можна на github.
- Одразу дві новини від Micronaut команди: версія 4.1.5 уже доступна, а також ви, можливо, захочете проапгрейдитись, якщо ви користуєтесь OAuth2.

🔗Guillaume Laforge розповідає про LangChain4J у своєму блог-пості.
🔗Цікавить що таке Concurrent Undo Cycle? Читайте в статті.
🔗Однозначний must see цієї осені:
🔗Цікава дискусія Nicolai Parlog та Brian Goetz:
🔗Огляд новинок Spring Security 6 від Laurențiu Spilcă:
🔗Victor Klang розповідає про приховані можливості стрімів:
🔗Adam Warski розповідає про обмеження в перформанс Loom-а.
🔗Paul King розважається з Groovy та ChatGPT.
🔗Окрім того, Paul запостив свої слайди про кластеризацію віскі за допомогою Groovy та Apache Ignite.
🔗Також в жовтні Paul розповідав про roadmap Apache Groovy в цілому і чого (а головне коли) чекати від Groovy 5.
🔗Stuart Marks теж на Devoxx розповідав про:
🔗Scala 3 мейнтейнери очікують ваших інпутів, які error massages дратують вас, або, як мінімум, не допомагають.
🔗Adam Bien розповідає про cost-driven архітектуру:
🔗А Databricks випустив статтю про Sketch-Based Approximate Distinct Counting для Apache Spark.

- Ми, як і Jonathan Ellis (в якого ми побачили це у твіттері), не знали про таку різниці в поведінці ConcurrentHashMap::computeIfAbsent та інших ConcurrentMap (зокрема ConcurrentSkipListMap).
- Для всіх користувачів JPA в комбінації з Hibernate, ловіть підказку від Robert Niestroj. Типово Hubernate буде оновлювати всі поля для сутності, для якої виконується UPDATE, але з анотацією @DynamicUpdate це можна виправити.

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