Java Digest #4: Java 21 goes GA — готуємося до Java 22, Apache Spark 3.5, Play Framework ще живий?

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

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

Позаду насичений на події та новини вересень, який, без сумніву, був весь про очікування релізу Java 21. Чи було у світі Java щось окрім цього? Про ці та інші новини читайте в нашому вересневому випуску.

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

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

Тому швидесенько перед прочитанням йдемо міняти долари та кидати донат на допомогу нашим Захисникам.

Java 21 доступна. Уже і для всіх. І якщо ви досі цього не зробили, то відкривайте термінал (так-так, от прямо зараз) і запускайте команду

Зробили? Фух, тепер переходимо до новин.

Можна годинами говорити про зміни в найшвидшій, найновішій і найкращій (поки що) Java, але нехай це краще зроблять професіонали своєї справи.

José Paumard розповість про зміни в API:

Billy Korando розповість про покращення VM та GC:

Якщо цього забагато для вас, що ж, Біллі й тут потурбувався (спойлер на 2:49):

Josh Long теж не залишився осторонь виходу Java 21:

Якщо вам цікаво заглянути, а що ж буде після 21, рекомендуємо стежити за цими проєктами, адже вони й формують те, що в майбутньому називатиметься Java 25 (у 2025 році):

Також цілком ймовірна поява нового проєкту під кодовою назвою Babylon.

Ну і завершити цей блок хочемо статтею Per Minborg про покращення, які нам несе проєкт Panama.

Java 21 — це, звісно, добре, але що на нас чекатиме в березні 2024 в Java 22?

Наразі ще жоден JEP не був затаргечений в JDK22, проте, пофантазуймо: що могло б туди потрапити на основі останніх JEP-ів та JEP-кандидатів, які фіналізують фічі:

  • JEP 454 — пропонує фіналізувати Foreign Function & Memory API;
  • JEP Draft 8315945 — 7(!) інкубатор для Vector API;
  • JEP Draft 8277163 — прев’ю до Value Object (привіт, Вальгалла!);
  • JEP 401 — прев’ю до Null-Restricted Value Object Storage;
  • JEP Draft 8311828 — Unnamed Variables and Patterns. Це повинно дати змогу писати щось на кшталт: r instanceof _(int x, int y) чи r instanceof _.

Також чекаємо фікс type pollution у 22 Java.

Нагадаємо, що JDK22 варто очікувати 19 березня 2024 року.

А тепер маємо ось таку забавку.

Більша частина інформаційного простору зайнята довгоочікуваним виходом Java 21. Проте не треба забувати й про Spring. Кожен місяць багато фахівців працюють над поліпшенням екосистеми Spring, що має безпосередній вплив на нашу продуктивність. І вересень не є винятком, тож ми ретельно відібрали найважливіші новини минулого місяця.

У вересні ми очікували побачити перший Release Candidate для Spring Framework 6.1. Але команда Spring вирішила змінити свої плани та випустила Spring Framework 6.1 M5. Серед найцікавіших змін:

  • Додана підтримка Jetty 12. Нарешті немає потреби понижувати Servlet API до версії 5.0 під час використання Jetty із Spring Boot 3.x.

  • Sam Brannen додав підтримку «ідентифікаторів в лапках» для SimpleJdbcInsert. Ця зміна усунула необхідність вручну брати назви стовпців у лапки, якщо їхні назви конфліктували з ключовими словами бази даних.

Не забули випустити й оновлення для попередніх версій Spring Framework. Версії 5.3.30 та 6.0.12 уже доступні.

Добре, а як щодо Spring Boot? Не залишилися без оновлень й у вересні. Spring Boot 2.7.16, Spring Boot 3.0.11 та Spring Boot 3.1.4 містять виправлення помилок, поліпшення документації та оновлення залежностей. Також був випущений Third Milestone для Spring Boot 3.2.0. Ця версія містить усі зміни, додані до Spring Framework 6.1 M5, а також низку інших змін. Хотілося б акцентувати на цих:

  • додані автоконфігурації для роботи з Apache Pulsar. Більш детальна інформація доступна в документації;
  • у спринговий Docker Compose додали підтримку для Neo4J. Детальніше можна почитати тут.

Також хотілося б зауважити кілька додаткових фіч, які варто очікувати в фінальній версії Spring Boot 3.2:

  • Piotr Mińkowski зазначив, що Spring Boot 3.2 міститиме автоконфігурації для слухачів Kafka та RabbitMQ, які додають підтримку віртуальних потоків;
  • Maciej Walkowiak анонсував, що Spring Boot 3.2 міститиме Awaitility з коробки.

Piotr також рекомендує всім, хто цікавиться інтеграцією Spring Boot і gRPC, переглянути цей стартер. Він підтримує Spring Boot 3 й оновлюється частіше.

Повертаючись до інших оновлень, варто згадати Spring Data. Версії 2023.0.4, 2022.0.10, та 2021.2.16 містять оновлення залежностей та виправлення помилок і регресій. Зі свого боку Spring Data 2023.1.0-M3 додає декілька нових фіч. Найважливішим є додавання підтримки Single Query Loading, яка має дозволити отримувати граф сутностей за допомогою одного запиту (до побачення, N+1). Ви можете прочитати більше про це тут.

У минулому випуску ми писали про Spring Modulith, а цього разу в нас аж 3 (!) новини:

  • Spring Modulith 1.1 M1 та 1.0.1 вже доступні до завантаження;
  • вийшла стаття про те, як Spring Modulith дозволяє легко публікувати події програми до брокерів повідомлень (наприклад, Kafka);
  • Oliver Drotbohm провів семінар, на якому детально розповів про Spring Modulith.

Оголошено про продовження комерційної підтримки Spring Boot 2.7.x з лютого 2025 року до серпня 2025 року. Детальніше можна ознайомитися тут.

Нові версії Spring Security містять виправлення для CVE-2023-34042. Ми рекомендуємо вам завжди оновлюватися до останніх версій.

Як і очікувалося, випущена нова версія Spring для Apache Pulsar 1.0.0-M2. Саме ця версія дозволила додати інтеграцію з Spring Boot 3.2.0-M3.

Spring Cloud Dataflow 2.11.0 додає підтримку Spring Boot 3.x, Spring Cloud Task 3.x та Spring Batch 5.x.

Також нові milestone отримали Spring Authorization Server 1.2.0-M1, Spring Batch 5.1.0-M3 та Spring Integration 6.2.0 Milestone 3.

Spring for GraphQL випустив нові версії. Крім того, команда оголосила, що версія 1.3 вийде в травні 2024 року.

Версія 4.20.0 Spring Tools 4 для Eclipse, Visual Studio Code та Theia вже доступна. Деталі тут.

Dr. David Syer працює над новим цікавим проєктом. Основна мета — розробити агрегатор специфікацій Open API. Якщо ви зацікавлені, будь ласка, перегляньте проєкт тут.

🔸 На блогах Azure і GCP з’явилися нові навчальні статті про використання Spring в їхніх хмарних середовищах. У Microsoft знову показали приклад використання Azure Spring Apps — повністю керованого сервісу, призначеного для управління інфраструктурою Spring програм, а у Google сфокусувалися на досягненні паритету між локальними і хмарними середовищами, тест-контейнерах та різних видах тестів, зокрема тести з нестабільним мережевим зв’язком.

🔸 Oracle і Microsoft розширяють свою співпрацю і будуть надавати сервіс Database@Azure — розміщення Oracle Exadata (хмарні бази даних Oracle) у центрах даних Azure у вигляді повністю інтегрованого Azure сервісу. Клієнти Oracle зможуть мігрувати свої бази на Azure, не змінюючи зобов’язання Oracle щодо підтримки. Дізнатись про те, як отримати доступ до цього сервісу, а також подивитися практичне демо, можна за посиланням.

🔸 Ще дві цікаві новини під’їхали від Oracle:

  • Широкій публіці представлений GraalOS — новий serverless-сервіс для користувачів OCI.
  • Graal Cloud Native 4 на базі Micronaut 4 теж уже доступний.

  • IEEE Spectrum оголосив свій щорічний список найкращих мов програмування і там без сюрпризів (єдине питання: що там взагалі робить C#? 💩).
  • Для всіх, хто #WeWantPostgresOn5432 в AtomicJar, вас почули — Testcontainers Desktop доступний для звантаження.
  • Якщо ви шукали альтернативу Hibernate і з якихось причин не зупинились на JOOQ, то ось вам ще одна альтернатива — MicroStream.
  • VSCode стає все зручнішим для Java-інженерів, ось список змін та покращень за серпень.
  • Якщо ви — молодець, і хочете, аби ваші workloads ранилися на Java 21, але використовуєте Lombok, то слід негайно оновитися до версії 1.18.30.
  • Після майже 4 років без major-релізів, Play Framework випускає версію 2.9.0 із підтримкою останньої версії Java та Scala 3. Також варто скоро очікувати реліз 3.0, де Akka буде замінена на Pekko.
  • Що нового в GraalVM 21 — читайте в статті Аліни Юренко (та й Аліну в твіттері теж читайте).
  • Hibernate випустив одразу 2 фінальні версії: 6.3.1 та 6.2.9.
  • Apache Spark 3.5 доступний для звантаження. 5 найкращих нових фіч від редакції:
  1. Arrow-оптимізація для UDF на Python.
  2. Новий ранговий фільтр для вирішення top-k проблем.
  3. Нова array_prepend функція.
  4. SPJ — підтримка часткової кластерної дистрибуції даних.
  5. Підтримка користувацьких таблиць у PySpark.
  • Якщо вам був необхідний додатковий аргумент, аби почати активно користуватися рекордами, то ось він від Per Minborg.
  • Версії 4.0.15 та 5.0.0.-alpha-2 Apache Groovy вже також доступні.
  • Цікава стаття від Leonardo Zanivan про те, чи може Java бути швидшою за Rust (спойлер: може).
  • Virtual Threads — це дуже крута фіча, яку Oracle відзначив окремим adoption guide.
  • Micronaut викотив чергову версію свого фреймворку — 4.1.2.
  • Цікава точка зору (і цікавий формат її викладу) про недоліки async\await підходу.

🔗Matt Raible виклав свої слайди з ChicagoJUG, де порівнює нативні REST API в різних фреймворках.

🔗 У минулий дайджест всі відео з JVMLS не влізли, будемо доганяти тут:

<

🔗 Цікава стаття від Snyk про створення менших docker images для Spring Boot застосунків за допомогою JLink.

🔗 Truffle Unchained від Christian Humer. Більше ніяких gu install.

🔗 Для користувачів IntelliJ IDEA є стаття про плагін для виявлення залежностей, що конфліктують.

🔗 Simon Verhoeven зробив для вас оглядову екскурсію по RestClient з Spring 6.1.

🔗 Цікава стаття з порівнянням швидкодії віртуальних потоків та реактивного підходу в SpringBoot.

🔗 Маєте бажання пришвидшити старт вашого Java-застосунку на Кубері? Piotr Minkowski опублікував статтю саме про це.

🔗 Запроєктувати проксі — доволі дефолтне питання на системне інтерв’ю, тут є його непоганий огляд і розбір.

🔗 Наш улюблений Java Language Architect опублікував статтю про Data Oriented Programming in Java.

🔗 GralVM оголосив про підтримку COBOL.

Вам мало новин про Java 21? На цей раз у цьому розділі порожньо 😅

Редакція зайнята відкриттям усіх ачівок в Baldur’s Gate 3.

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

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

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

головне, щоби він був регулярним. дякую

та ми ж тільки за) нажаль, статистика переглядів свідчить про не таку вже і велику зацікавленість комюніті

Та я сам випадково тут.. побачив у фейсбуці) Потрібно подумати як це зробити відомим і де.
Тут може потрібно не так багато, головне щоб регулярно. Якщо люди будуть знати, що тут по джава часто щось виходить, то і ходити будуть частіше

та самі перегляди тут красновмовні. 1 дайджест −5к, 2й — 2к, цей (4й) навіть до 1,5 не дотягує)

Прямо зараз дивлюсь вашу «Heroes of System Design & Magic»))
Може на DOU не так часто ходять. Я сам тут зрідка. Ось щось таке змістовне по Java, як на мене в Укрїні взагалі не зайнята ніша.
У Нємчинського трохи можна знайти по патернам, трохи про ентерпрайз патерни на YT каналі.
Знаю ще Bobocode дуже крутий матеріал, те що викладають, але не так багато, бо це їхній хліб. Кор, спрінг.
Ще вас знаю, та й того, що проходив колись інтерв’ю. Тоді не пристав на пропозицію, але от прямо коли саме інтерв’ю було змістовне. Позитивні емоції лишились лише.
Доречі, не підкажете хороших ресурсів по системному дизайну? Засидівся, час для інтерв’ю прийшов мабуть та і подивитись хто що ще як робить.

Дуже дякую за таку Вашу оцінку. В доповіді я ресурсами наприкінці ділюсь. Але якшо порекомендувати шось одне, то ось — www.amazon.com/...​ders-Second/dp/B08CMF2CQF

Дякую, чудовий дайджест!

Око зачепилось за

Зі свого боку Spring Data 2023.1.0-M3 додає декілька нових фіч. Найважливішим є додавання підтримки Single Query Loading, яка має дозволити отримувати граф сутностей за допомогою одного запиту (до побачення, N+1). Ви можете прочитати більше про це тут.

Варто зазначити, що це стосується Spring Data JDBC, який оманливо схожий на Spring Data JPA, але працює геть інакше. А ще була (і є) третя технологія — Spring JdbcTemplate — дивіться, не переплутайте.

Прощатися з N+1 проблемою — це смілива заява. Хотілося би тестів, бенчмарків і коментарів DBD. Я, на жаль, не так глибоко в темі SQL, як би хотілося, але мені здається, вирішити проблему Cartesian Product за допомогою Window/Analytic Functions не так просто, і не так потрібно.

Дякую за уточнення! Ви абсолютно праві. В оригінальній статті з самого початку зазначено, що ця «фіча» зараз розробляється для Spring Data JDBC. Але однією з цілей є і підтримка Spring Data R2DBC.

Попереду у авторів ще багато проблем та викликів, але вони досить позитивно налаштовані на їх вирішення. І Ви не єдиний, хто хотів би побачити тести та бенчмарки :)

Дякую, автори провели величезну роботу, як завжди дізнався з огляду багато нового. З того, про що взнав з Вашого огляду і що збираюся використовувати вже — Spring Modulith. Якраз нещодавно розв’язували всі ті ж самі проблеми, але використовуючі фічі Hibernate. Добре, що тепер є стандартний шлях, не привязаний до конкретної імплементації ORM.

єдине питання: що там взагалі робить C#?

Ахахаха, дуже смішно

Для Петрика: це був сарказм

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