Java Digest #2: Java 21 не LTS (поки що), Micronaut 4.0, Semantic Kernel for Java

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

🙋 Алоха, друзі! Липень не був таким насиченим на джава-події, як червень, проте це не завадило нам зібрати для Вас цей дайджест.

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

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

☕ Java 21 — не LTS ... поки що

У попередньому дайджесті (який ви можете почитати тут) ми необережно назвали майбутній реліз 21 джави — LTS. За що нам одразу прилетіло в коментах.

Але чи були ми аж такі неправі і як є насправді давайте будемо розбиратись.

TL;DR — Java 21 не LTS. Але вона може стати такою ¯\_(ツ)_/¯

Денис Макогон формально дав вичерпну з юридичної точки зору відповідь у коментарях 👇

І можна було б розходитись, якби не реакція Oracle, адже ми були далеко не єдині, хто називав 21 джаву — LTS.

Nicolai Parlog оперативно випустив відео на цю тему:

В цьому місці розпочинається класичний твітер-срач, бо не останні люди в ком’юніті почали відповідати на це відео Nicolai:

І Gunnar Morling, і Dr. Kabutz посилаються на ось цей мейл-тред, в якому ніхто інший, як Mark Reinhold власною персоною називає Java 21 наступною LTS версією. ¯\_(ツ)_/¯

Позиція редакції дайджеста: eventually Java 21 отримає приставку LTS і ніхто не перестане її так називати, хай це не до кінця коректно з формально-юридичної точки зору (проте тут слід бути обережним — в Oracle першокласні юристи).

👾 Micronaut 4.0

Навздогін Spring Boot 3.1 Micronaut випускає чергову мажорну версію свого фреймворку — 4.0, з оновленнями можна ознайомитись тут.

Для себе ж відзначаємо першокласну підтримку GraalVM рантайму, expression language і (куди ж без них) підтримку virtual threads. Але ніхто не розповість про нові фічі мікронавта краще, ніж його батько-засновник Greame Rocher — читати твіттер-тред тут.

UPD. Поки ми писали цей дайджест, вийшов Micronaut 4.0.1 🙂

♨️ Spring Updates

Spring 6.1 презентує світу RestClient, який покликаний замінити RestTemplate, що вийшов далекі 14 років тому в Spring 3.0. Свого часу редакція цього дайджесту була дуже не задоволена можливостями і зручністю використання (наявних тоді) HTTP-клієнтів і коли Java 11 явила світу новий рідний клієнт, ми, недовго думаючи, написали свій зручний (нам) open-source врапер, з яким ви можете ознайомитись тут.

Цього місяця в екосистемі продуктів Spring відбулися оновлення:

  • Spring Boot 3.1.2, Spring Boot 3.0.9 та Spring Boot 2.7.14 вже доступні. Основну частину змін становлять виправлення помилок та зміни в документації.
  • Spring Framework 5.2.25.RELEASE, 5.3.29 та 6.0.11 вже доступні до використання. Основна увага, як і в усіх проміжних версіях, зосереджена на виправленні помилок і покращенні документації.
  • Spring Web Flow нарешті додав підтримку Spring Framework 6 та Jakarta EE.
  • Команда Spring Data випустила нові версії свого продукту. Оновлення включають багато змін до версій підпроєктів.
  • Увага, це не навчальна тривога! Користувачі Spring HATEOAS у звʼязці з WebFlux, біжіть оновлюватися на останні версії. Вони містять виправлення для CVE-2023-34036 та виправлення регресії в генерації метаданих відображення AOT.
  • Spring Cloud 2021.0.8 (aka Jubilee) розширив можливості Spring Cloud LoadBalancer, а також включає багато змін до повʼязаних з Spring Cloud підпроєктів.
  • Реліз Spring for GraphQL 1.2.2 виправляє ряд помилок та змін в документації. Якщо ви стикнулися з проблемою отримання назви операції з тіла запита, то ваші молитви були почуті.
  • Нові версії Spring Security включають виправлення для CVE-2023-34034 та CVE-2023-34035.
  • Oh, boy! Команда Spring Data не байдикує. Крім випуску проміжних версій, описаних вище, вони випустили Spring Data 2023.1.0-M1. Підтримка Java 21, віртуальних потоків та багато іншого вже чекає на вас.
  • Вже зовсім скоро ми побачимо релізну версію Spring 3.2.0. Під кінець місяця команда випустила Spring Boot 3.2.0-M1, яка включає багато нових цікавинок. Віртуальні потоки, новий RestClient, зміни в логуванні — все це вже доступно для перегляду.
  • Spring Framework 6.1 отримав M2 та M3 версії. На додачу до нового RestClient, вони містять удосконалення анотації @Scheduled. Тепер ви можете вказувати, який TaskScheduler використовувати для кожної із задач.
  • Spring Batch 5.1.0-M1, яка зʼявилася цього місяця, включає підтримку віртуальних потоків, нові синхронізовані декоратори та багато іншого.
  • Також не сидить без діла команда, відповідальна за Spring Session. В цьому місяці вони випустили нову версію, що додає підтримку використання різних стратегій для створення ідентифікаторів сесії.
  • Не відстає і команда Spring Integration. Spring Integration 6.2 Milestone 1 привносить новий модуль для Debezium, підтримку віртуальних потоків та покращень у Java DSL.

Чи хотіли ви коли-небудь побачити візуалізацію компонентів (Spring Beans) у вашому проєкті та їхні зв’язки? Якщо відповідь ствердна, то розроблений Juan Antonio Breña проєкт — це те, на що ви чекали.

🌩️ Java in Clouds

— Josh Long випустив статтю про написання «розумних» Spring-застосунків за допомогою Azure Open AI.

— Ви коли-небудь чули про Amazon DynamoDB local? Цей інструмент може бути доречним у процесі локальної розробки чи тестування, оскільки не вимагає доступу до AWS. Цього місяця вийшла нова версія, яка додає підтримку Spring Framework 6 та Micronaut Framework 4.

Примітка редакції дайджеста: якщо є потреба працювати не тільки з DynamoDB, ми рекомендуємо спробувати LocalStack, який також використовує цей інструмент для роботи з DynamoDB.

— Також на початку місяця стали доступні нові версії Spring Cloud Azure. Підтримка Spring Boot 3.1, новий «стартер» для Azure Event Grid та багато іншого було додано для поліпшення життя розробників.

— Стало краще. Microsoft представили значні вдосконалення Azure Spring Apps Enterprise, спрямовані на спрощення робочих процесів розробки та операцій для Java Spring.

🎮 Other news

  • OpenJDK JDK 20.0.2 General-Availability Release вже доступний тут.
  • 19 липня Bruno Borges презентував нову java open-source бібліотеку від Microsoft для роботи з AI — Sematic Kernel. Бібліотека дозволяє розробникам використовувати потужність AI при написанні коду на Java. Вона сумісна з Java 8 і новіше, що забезпечує гнучкість і доступність для широкого кола розробників Java.
Таким чином Microsoft продовжує свою експансію у світі AI, а для Java відкриваються нові горизонти в python-dominated світі. Якщо Вам цікава тема AI в комбінації з Java, рекомендуємо також звернути увагу на цей проєкт.
  • Scala Center оновив свій план роботи на Q3 та опублікував звіт про свою діяльність за Q2.
  • Databricks в рамках роботи на Delta Lake project анонсували Delta Lake 3.0 з підтримкою «нового» (на базі Parquet, звісно ж) формату даних UniForm.
  • В продовження теми BigData, LinkedIn представив світу свою платформу для менеджменту цих самих великих даних під назвою OpenHouse. Піти в open-source планують у 2024.
  • Quarkus оголосив про випуск версії 3.2.0 (UPD. остання версія) з рядом нових функцій безпеки та не тільки. Найбільш значущою новиною є те, що ця версія отримала статус LTS.
  • AWS додав підтримку Apache Spark з Java 17 для EMR on EKS.
  • Хоч редакція дайджесту стримано-негативно ставиться до Kotlin, ось вам дві новини про нього:

1) вийшла версія 1.9.0 і оновився roadmap платформи в цілому;
2) JetBrains презентували Kotlin Notebook.

  • Свою першу версію випустив Apache Pekko. Paul King в блог-пості робить порівняльний аналіз між акторами в Pekko і GPras.
  • З 21 по 24 серпня буде проходити SpringOne.
  • Відкрився CFP на DevoxxUA -> подавайте свої доповіді тут!
  • А ще, вітаємо наших друзів з CofeeJUG з Днем Народження 🎉 і бажаємо багато крутих івентів в майбутньому!

🔗 На почитати (і на подивитись)

🔗 Чи здавалось вам, що в стримах чогось не вистачає? Ви не одні такі і є всі шанси, що стрим скоро отримає такі очікувані доповнення.

🔗 Дайджест був би не дайджестом, без нового відео від Billy Korando. Цього разу про JFR.

🔗 Микола-Богдан Винницький продовжує свою нерівну боротьбу з таймстампами.

🔗 Цікава стаття про підходи до health-check за допомогою Spring Cloud Gateway від Ignacio Lozano.

🔗 Victor Rentea виклав свої слайди з DevBcn 2023 про профілювання java-застосунків.

🔗 Jean-Christophe Sirot опублікував цікаву статтю, де виклав PoC для dagger.io.

🔗 Думаєте, як здешевити свій клаудний пейчек? Gradle ділиться власним досвідом.

🔗 Piotr Minkowski ділиться досвідом логування в Spring Boot за допомогою Loki.

🔗 Згадуваний вже сьогодні Gunnar Morling презентував SDK для побудови кастомних пайплайнів в Decodable.

🔗 Ionut Balosin провів цікавий аналіз енергоспоживання різних віртуальних машин JVM. Як і очікувалося, GraalVM native images показали найкращі результати.

🔗 І якщо Ви досі не підписані на н’юзлетер від swirl.ai, то ось вам непогана причина зробити це.

🤖 Off-top

ChatGPT, який мав замінити всіх і вся, раптово отупішав. Якщо ще в березні модель була здатна визначити чи є число простим у 488 випадках із 500, то вже у червні вчені отримали тільки 12 з 500 правильних відповідей. А це, на секундочку, 97,6% проти 2,4%. Чому так (spoiler alert: він ніколи і не був «розумним») можна прочитати тут.

Очікувано, OpenAI продовжує розвивати свій продукт і наступною великою фічою стають індивідуальні інструкції.

P.S.

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

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

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

Класний дайджест, дякую.

У спрінгу окрім RestClient ще JdbcClient дуже кросівий завезли (нарешті)
github.com/...​ng-framework/issues/30931

Із появою virtual threads треба бути обачним і дуже чітко розуміти як саме працює клієнт. Якщо в конфігурації можна вказати executors service, то буде матися наувазі, що кожний запит буде оброблюватися у відповідному потоці (тип і походження залежить від фабрики, логічно).

Із JDBC ситуація трохи складніша. Від того, що існує багато типів пулів залежить конфигурація фабрики потоків. Наприклад, UCP не має власного executor service і тому з‘єднання наслідує поток в якому воно було створено (тобто, хочеш віртуальний поток — запускай з‘єднання у таком потоці). Тому, якщо є бажання користуватися спрінговими клієнтами і віртуальними потоками одночасно, то треба бути дуже обачним, бо 100% нативної підтримки нового класу потоків в Spring ще нема.

Спробував OpenJDK 20 General Availability Release. Якщо коротко — IntelliJ та Gradle стали споживати менше пам’яті на 5% і 20% відповідно у JVM-проєктах на Kotlin 1.9. Тестувати Minecraft було якось ліньки UwU

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