Java Digest # 10: java.util.Date deprecation, Microsoft Java Developers Conf 2024, OpenAI & StackOverflow

🙋 Алоха, друзі! Травень вже за вікном, а отже ми знову підготували для вас підбірку цікавого зі світу Java за попередній місяць (ну майже). Березневий дайджест можна прочитати тут, а хто вже бачив його, з тими вйо до новин!

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

Після нещодавньої Java 22, здається, настав час трохи перевести подих і подивитися на пройдений шлях.

Dalibor Topić (Oracle) згадує часи коли Sun оголосила, що Java стане опенсорс, та розповідає про появу OpenJDK (на той час версій 6 та 7), пошук і заміну maintainers для версій OpenJDK в Java-ком’юніті, становлення OpenJDK як reference implementation від Oracle і подальший перехід на Fast-Release Cadence Model, що працює і досі.

Georges Saab (Oracle) також згадує про перехід на шестимісячний цикл релізів, а ще говорить про наявні pain-point та проєкти, які їх адресують.

На завершення можна ще переглянути recap Java 21 Language Features and Beyond і нагадати собі про деякі затверджені або майбутні JEP: jshell, unnamed classes, pattern matching, string templates та інші.

Менш ніж за тиждень після оголошення кандидатом, JEP 473 Stream Gatherers (другий перегляд) був підвищений від Candidate до Targeted для JDK 23. Цей JEP пропонує другий раунд перегляду після попереднього раунду, а саме JEP 461, який був представлений у JDK 22. Це дозволить зібрати додаткові відгуки та набути більше досвіду з цією функцією без змін для користувачів порівняно з JEP 461.

JEP 476 Module Import Declarations (Preview) був підвищений зі статусу проєкту JEP (чернетка 8315129) до кандидата. Ця попередня функція пропонує покращити Java, додаючи можливість лаконічно імпортувати всі пакети, які експортує модуль, з метою спрощення повторного використання модульних бібліотек без необхідності розміщення імпортованого коду у модулі.

Gavin Bierman оновив інформацію щодо String Templates для JDK 23. Він вказав, що через відсутність чіткої згоди щодо нового дизайну, поточний дизайн шаблонів не буде включений, як попередньо переглянута функція в JDK 23, а розробка продовжуватиметься. Він також закликав розробників продовжувати експериментувати з шаблонами у JDK 22 і ділитися враженнями.

Також зʼявився новий великий проєкт під кодовою назвою Brisbane. Проєкт «Брисбен» передбачає створення провайдера Java Cryptographic Extension (JCE) для середовищ, що регулюються FIPS 140.

Vector API запропоновано реінкубувати (восьмий раз, Карл) для Java 23 у вигляді JEP 469.

Збірка 21 раннього доступу до JDK 23 вже доступна разом з оновленням від збірки 18, які містять виправлення різних проблем. Додаткові деталі про цей випуск можна знайти тут.

Nicolai Parlog записав нове відео, яким він хоче принести баланс силі примітивам, а також жаліється (спойлер — ні), що Java в’яне.

В 68-му випуску Inside Java Newcast нам розповідають про можливості markdown для JavaDoc.

JavaDoc Hits the Markdown on Comments — Inside Java Newscast #68

Gavin King поділився новиною, що в Jakarta Persistence 3.2 прийняли рішення задепрекейтити java.util.Date (нарешті).

З’явився новий Java Mission Control 9 з оновленим UI, новими налаштуваннями та іншим. Слід зазначити, що jdk 17 тепер є мінімальною вимогою для JMC, але сумісність з даними Java Flight Recorder (JFR) не змінилась і новий JMC може і далі працювати зі старішими записами даних JFR.

Нове-старе відео з конференції ØREDEV, яке тепер стало доступним, нагадує про моніторинг у JVM з Java Flight Recorder. У відео Joakim Nordström (Oracle) розглядає декілька функцій JFR, серед них:

— реагування в коді на JFR events, наприклад, jdk.CPULoad. Повний список — тут;

— створення своїх event, розширюючи клас jdk.jfr.Event і конфігуруючи його анотаціями з модуля JFR;

— або ж використовувати JFR в unit тестах. Так, наприклад, можна перевірити, що за тест жодного разу не був викликаний finalizer.

Якщо ви сумнівались, чи правильно ви використовуєте всі можливості Java 21, то стаття Jonathan Vila саме для вас.

Чи знайомі ви з Spring Academy? Ця онлайн-платформа є повноцінним навчальним ресурсом для розробників, які працюють з Spring, пропонуючи різноманітні гайди та курси. На початку квітня команда Spring повідомила, що доступ до Pro Content на платформі Spring Academy тепер буде безкоштовним, відмовляючись від необхідності платної підписки. Якщо ви прагнете покращити свої знання або готуєтесь до сертифікації, Spring Academy стане відмінним вибором для старту. Ознайомитися з наявними матеріалами можна за посиланням.

У попередніх двох випусках ми вже звертали вашу увагу на вразливості, повʼязані з UriComponentsBuilder. Ця проблема залучила значну увагу спільноти, яка активно долучається до пошуку нових способів атак. Минулий місяць не став винятком, адже було виявлено третю ітерацію вразливості під номером CVE-2024-22262 (Увага! Attention! Pozor!). Основною метою оновлень Spring Framework 6.1.6, 6.0.19 та 5.3.34 було усунення цієї проблеми. Детальніше про інші зміни можна дізнатися за цим посиланням.

Команда Spring повідомила про активну роботу над версією Spring Framework 6.2 та випустила Spring Framework 6.2.0-M1. Варто зазначити, що Spring Boot 3.3, реліз якого запланований на травень, все ще буде базуватися на Spring Framework 6.1.x. Використання Spring Framework 6.2 почнеться з версії Spring Boot 3.4. Пропонуємо вам ознайомитися з новим розділом «Що нового у версії 6.2» в документації.

Також була запущена серія статей, які детально описують нововведення у Spring Framework 6.2.

У першій статті серії, Stéphane Nicoll розповідає про дрібні зміни, на які спільнота чекала досить довго:

  • Перша зміна була запропонована ще у 2008 році. Починаючи з Spring Framework 6.2.0-M1, стало можливим екранувати покажчик місця заповнення (${...}) за допомогою спеціального екранованого символу (за замовчуванням це зворотна коса риска).
  • Також додано підтримку резервних компонентів. Для цього було введено нову анотацію @Fallback, яка діє в парі з анотацією @Primary. Ця анотація забезпечує додаткову гнучкість, дозволяючи користувачам подавати свої версії компонентів, одночасно забезпечуючи наявність стандартної реалізації.
  • Ще однією довгоочікуваною зміною є ініціалізація компонентів у фоновому режимі. В анотації @Bean зʼявився новий атрибут bootstrap, який дозволяє вказати, що компонент має бути створений у фоновому режимі. З особливостями роботи ви можете ознайомитися в документації.
  • Зʼявилася підтримка TaskDecorator для запланованих завдань.
  • Spring Framework 6.2.0-M1 розширює підтримку для тестування ваших вебзастосунків за допомогою MockMvc та AssertJ.

У квітні також була опублікована друга стаття з серії присвяченої нововведенням у Spring Framework 6.2. В ній Simon Baslé розглядає нові можливості для тестування ваших застосунків, а саме перевизначення компонентів у тестах. Ви можете ознайомитися з трьома новими анотаціями та новим механізмом для створення власних реалізацій за посиланням.

Spring Boot отримав три нові версії. Spring Boot 3.2.5 та Spring Boot 3.1.11 містять виправлення помилок, зміни в документації та оновлення залежностей. Детальніше тут і тут. Також було випущено Spring Boot 3.3.0-RC1, що вказує на наближення релізної версії. До ключових змін можна віднести появу підтримки Prometheus Client 1.x та автоматичне налаштування підтримки SSL для вбудованого вебсервера з SNI. Про інші зміни можна дізнатися за посиланням.

Стали доступними Spring Security 5.8.12, 6.1.9, та 6.2.4. У всіх випадках релізи в основному складаються з виправлень помилок, оновлень залежностей та поліпшень документації. З виходом Spring Security 6.3.0-RC1 ми рекомендуємо ознайомитися з розділом «Що нового» у документації версії 6.3, там ви знайдете багато цікавого.

Реліз Spring Data 2024.0.0 заплановано на середину травня, тому ми рекомендуємо ознайомитися з повним списком ключових нововведень, які вже доступні у версії Spring Data 2024.0.0-RC1, що була випущена у квітні. Також стали доступними Spring Data 2023.1.5 та 2023.0.11, які містять оновлення залежностей та виправлення помилок.

Були випущені Spring Authorization Server 1.3.0-RC1, 1.2.4 та 1.1.7, які містять оновлення залежностей. Нові можливості у версії 1.3.0-RC1 містять: додавання підтримки токенів доступу, прив’язані до клієнтських сертифікатів з використанням взаємного TLS; підтримка методу автентифікації клієнта взаємного TLS із самопідписаним сертифікатом; та надання більшої гнучкості в тому, коли показувати сторінку згоди. Більше деталей про ці релізи можна знайти в примітках до релізу версій 1.3.0-RC1, 1.2.4 та 1.1.7.

Головним нововведенням Spring for Apache Pulsar 1.1.0-RC1 стала поява підтримки транзакцій для @PulsarListener та PulsarTemplate. До інших змін можна віднести оновлення залежностей та покращення документації. Аналогічно, Spring for Apache Pulsar 1.0.5 була випущена для оновлення залежностей.

Spring for GraphQL 1.3 RC1 містить багато нових змін, серед цікавих можна відзначити наступні:

  • За основу взято GraphQL Java 22, який містить багато нововведень, серед яких значні покращення продуктивності.
  • Тепер можна налаштувати кодек Jackson для ендпоінтів GraphQL окремо від того, який використовується для HTTP та вебендпоінтів. Це може бути важливо для відображення відповідей GraphQL за потребою (наприклад, з нульовими значеннями) без впливу на регулярні HTTP-ендпоінти.
  • WebSockets тепер підтримують регулярне надсилання повідомлень PING для підтримки активності, якщо не було надіслано жодних інших повідомлень. На сервері це активується через налаштування spring.graphql.websocket.keep-alive. На клієнтській стороні це активується через конструктор клієнта.
  • Додана підтримка використання анотацій @SchemaMapping та @BatchMapping на типах інтерфейсів схеми.

Spring for Apache Kafka також отримав три версії. Spring for Apache Kafka 3.0.16 та 3.1.4 містять виправлення помилок та оновлення залежностей, детальніше тут і тут. Spring for Apache Kafka 3.2.0-RC1 містить ряд нових змін, а саме:

  • З версії 3.2, анотація @PartitionOffset підтримує SeekPosition.END, SeekPosition.BEGINNING, SeekPosition.TIMESTAMP.
  • Додано можливість вказати, чи повинен споживач залишати групу під час зупинки Kafka Streams.

Основною темою Spring Modulith 1.0.7, 1.1.4 та 1.2-RC1 стала оптимізація стартерів, щоб уникнути їх включення до скомпільованого JAR-файлу. З іншими змінами ви можете ознайомитися за цими посиланнями: 1.0.7, 1.1.4 та 1.2-RC1.

Spring Functions Catalog 5.0.0-M2 містить виправлення помилок, оновлення залежностей та нові функції, такі як заміна модулів TensorFlow на Deep Java Library через значні зміни в підтримці TensorFlow, а також покращення постачальника файлів.

Stream Applications 2024.0.0-M1 містить оновлення залежностей і низку інших змін, які можна знайти тут.

Також були випущені нові версії для проєктів Spring HATEOAS, Spring Tools та Spring Shell. З основними змінами можете ознайомитися за цими посиланнями: Spring HATEOAS, Spring Tools та Spring Shell.

З моменту публікації нашого попереднього випуску, Josh Long випустив шість відео із серії Spring Tips. Ознайомитися з ними можна нижче:

🎬 Hello, Java 22!

🎬 The Spring Expression Language

🎬 GRPC

🎬 Spring Cloud Gateway for Spring MVC

🎬 Beans, Beans: What’s in a Spring bean?

🎬 Vector Databases with Spring AI

Maciej Walkowiak написав чудову статтю про динамічні проєкції в Spring Data JPA.

Christian Tzolov опублікував у блозі статтю про наявну підтримку мультимодальності в Spring AI та плани щодо її подальшого розширення.

☁️ AWS

  • Як виявилось, якщо хтось дізнається назву вашого S3 bucket, спробує туди щось покласти і отримає помилку AccessDenied, то за запит все одно будете платити ви, тому що в AWS є ціна за запити, яка нараховується навіть якщо запит було відхилено. Це стало активною темою для обговорення внаслідок статті на Medium від Maciej Pocwierz і на неї навіть довелося зреагувати команді AWS, які зараз обіцяють виправити цю проблему.
  • Команда Disney Streaming розказує про те, як вони використовують Java з AWS lambda у цій статті. Вони згадують експерименти з Dagger2 (compile-time dependency injection framework), а потім з комбінацією GraalVM і Micronaut. Micronaut має анотацію @ReflectiveAccess, яку команда використовує для спрощення конфігурації reflection в reflect-config.json.

☁️ Azure

  • У Microsoft розказують, чого слід очікувати Java-розробникам від Azure в наступні пів року. Серед планів є розширення підтримки java 21 для Azure Functions, нові можливості розгортання на Azure Container Apps та більше.

☁️ GCP

  • Google оголосила про нову програму підтримки українських стартапів — Ukraine support fund. Заявки приймаються до 5 червня.
  • В Google є новий codelab про інтеграцію ШІ в Java-проєкти за допомогою продуктів з GCP. Codelab починається з введення в загальні концепції ШІ через призму Vertex AI з Gemini LLM і проходить по основних сценаріях використання LLM в Java-коді за допомогою LangChain4J framework. Або, якщо вас цікавить лише приклади коду, то вони доступні на GitHub.

☁️ OCI

  • Oracle продовжують популяризувати свій варіант виконання Distributed Transaction з Oracle Database в ролі координатора в цьому відео. OracleDB здатна виконувати таку роль завдяки Transaction Event Queue, що є частиною бази даних і дозволяє асинхронно комунікувати з учасниками транзакції. У відео розглядаються топологія сервісної архітектури з OracleDB і приклад Java-коду на специфікації MicroProfile LRA.

В кінці березня пройшла конференція Microsoft Java Developer Conference 2024 (Microsoft JDConf 2024) і відео з конференції почали з’являтися на YouTube-каналі Microsoft. Ось на які теми були деякі з презентацій:

🔸 JVM

  • Огляд проєкту Valhalla.
  • Аналіз плюсів і мінусів graalvm, CraC і Class data sharing для Spring в контексті пришвидшення часу розгортання програм.
  • Огляд кількох технологій для оптимізації часу на startup: кешинг результатів JIT компіляції, перенесення JIT компілятора на окремий сервер, AOT компіляції та CraC.

🔸 Java EE

  • Інтро у світ JakartaEE з Microprofile та Openliberty для розробки хмарних сервісів. Для оптимізації часу старту сервісів розглядається Semeru JVM від IBM з технологією InstanctON (подібною на CraC) і Semeru Cloud Compiler, а також використання цього всього в Kubernetes з KNative.
  • Демо cloud-native мінісервісу на Java EE з MicroProfile та OpenLiberty як вебсервера. Якщо вам цікаво спробувати цей набір технологій на ділі, то на сайті OpenLiberty можна згенерувати проєкт на кшталт Spring Initializr.
  • Демо Java EE-проєкту в Azure на Jboss Enterprise Application Platform та з фокусом на Azure deployment за допомогою плагіну Maven/Gradle.
  • Демо новинок Jakarta EE Concurrency 3.1 для Jakarta EE 11: анотації Schedule та Inject для ManagedExecutor з віртуальними потоками, а також нові Contextual Flows для ReactiveStreams, які дозволяють задати свій Executor на рівні Subscriber для тих ситуацій, де API не дозволяє задати Executor на рівні Producer, як приклад, reactivestreams.client.MongoCollection. Код і текстовий опис демо доступні на GitHub.

🔸 Java-екосистема

  • Vaadin — фреймворк, що дозволяє створювати Web UI за допомогою лише Java-коду. Код розмітки для вебсторінок створюється автоматично з аналізу серверних Java-компонентів і відразу має гарний вигляд і на desktop, і на mobile. В презентації розглядаються базові вебкомпоненти для crud-сторінок і базові dashboards. Відео — ось тут, а якщо вам хочеться спробувати Vaadin на ділі, то ось їх web editor.
  • Розширення для Maven, що візуалізує таймлайн процесів на прикладі великих монолітних модульних проєктів. Це розширення має допомогти вам зрозуміти, що відбувається в build-процесі й, можливо, дозволити оптимізувати його.
  • Імплементація Change Tracking з Azure Functions і Azure SQL, в якій зміни даних в БД слугують тригером для запуску функції, що отримує оновлені дані для, наприклад, оновлення інших data storage чи якогось аналізу даних.
  • Дві доповіді про сучасну Java-розробку в Visual Studio Code: одне — про щоденне використання IDE для девелоперських задач, і ще одне — про свіжі вдосконалення підтримки Spring в Visual Studio Code в трьох сферах: написання коду, отримання даних про програму в runtime та оновлення версій залежностей.

🔸 Тестування швидкодії

  • Jmeter DSL для написання performance testing-скриптів на Java. Jmeter DSL використовує Jmeter Engine і дозволяє відмовитись від UI Editor, який зберігає налаштування тестів в громіздких XML-файлах.
  • Демо Azure Load Testing. Цей сервіс робить load test-процес простішим, керує інфраструктурою для тесту і в нього можна передати свої JMeter-скрипти.

🔸 ШІ

  • Основні концепції ШІ та приклад використання AzureOpenAIChatClient на Spring, якому можна поставити якесь питання та отримати відповідь від Azure OpenAI.
  • Огляд деяких компонентів Spring AI: ChatClient, ETL Pipeline для імпорту даних у векторні БД і генерування коду за допомогою команди spring ai add --description.
  • Створення Kubernetes ConfigMap i Deployment для OTEL Collector в Quarkus-проєкті за допомогою GitHub Copilot.
  • Gunnar Morling, як завжди, на висоті, тож ми рекомендуємо до прочитання його статтю про Денормалізацію Change Event стрімів для Document Stores.
  • Maciej Walkowiak ділиться досвідом використання UUID як основних ключів для PostgreSQL.
  • Стикались із проблемою брати Kafka чи ні для роботи з Google BigQuery? Kai Waehner написав відмінну статтю саме для вас.
  • Світ побачила версія Debezium 2.6.1.Final, за деталями — сюди.
  • Зі снепшота 24w14a для Minecraft дізнаємось, що тепер гра вимагає Java 21.
  • Hibernate випустив версію 7.0.0.Alpha2. Зверніть увагу, що міграція в майбутньому на цю версію може бути непростою — baseline Java 17 і Jakarta Persistance 3.2.
  • Micronaut випустив версію 4.4.1, детальніше — тут.
  • Thomas Segismont випустив статтю про покращення перформанс-метрик у Vert.X 5.0.
  • ArchUnit 1.3.0 вже доступний.
  • Amazon Q тепер доступний з вашої IDE.
  • Одна з найкращих Java-бібліотек для роботи з ШІ Langchain4j релізнула версію 0.30.0.
  • RedHat випустив статтю, як за допомогою ChatGPT можна генерувати рути для Apache Camel.

OpenAI та StackOverflow об’єднують зусилля, щоб підсилити найкращі у світі LLM. Так принаймні вказано в їхньому комюніке. Спільнота, звісно ж, має з цього приводу свою неповторну думку.

Також варто зазначити, що віднедавна модератори StackOverflow відчувають певний дискомфорт, оскільки користувачі видаляють свої відповіді після оголошення про партнерство з OpenAI. В результаті вони почали призупиняти акаунти, які долучаються до цього флешмобу. Важливо зазначити, що «право на забуття» більше не застосовується до ваших відповідей, згідно з Умовами та положеннями StackOverflow, які надають їм спеціальний дозвіл зберігати всі відповіді. Також відновлення окремих публікацій із резервних копій здається складним.

А що ви думаєте про цей союз? Are developers going extinct soon?

І взагалі, старайтесь не позоритись в інтернеті.

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

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

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

👍ПодобаєтьсяСподобалось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

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