Java Digest # 15: Java 23, road towards Spring 7, Debezium 3.0

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

Чесно кажучи, ми не знаємо, з чого почати! Вересень був дійсно насиченим, і не лише новий реліз Java спричинив такий ажіотаж.

Тож без зайвих слів переходимо до новин!

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

Ну а ми маємо можливість готувати цей матеріал виключно завдяки ЗСУ і бачити ви його зараз можете теж завдяки їм.

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

Java 23 вже тут, друзі!

Її чекали, і це було неминуче. Новий основний реліз найкрутішої мови програмування (за версією нашої редакційної команди).

І ось вам список функцій, які увійшли до релізу:

А хто ліпше підсумує, що стало кращим цього разу, ніж Ніколай Парлог?

А якщо це для вас занадто, ось відео від Billy Korando на 5 хвилин 🙂

У поєднанні з релізом JDK 23, Oracle Labs випустили GraalVM для JDK 23. Нові функції містять: імплементацію кількох JEP з JDK 23; новий збирач сміття типу mark-and-compact для старого покоління Serial GC, головною метою якого є зменшення максимальної кількості використаної пам’яті; а також новий перегляд ресурсів, що дозволяє розробникам бачити Java-ресурси, включені в нативний образ.

Для тих, хто пропустив презентацію Браяна Ґетца про те, що відбувається у розробці JDK, представлену в нашому останньому випуску, Ніколай вже підготував для вас короткий огляд (як завжди):

І також не забувайте, що триває постійна розробка проєкту Loom:

Оскільки Java 23 вже завершена історія, Марк Рейнхолд, головний архітектор Java Platform Group в Oracle офіційно запропонував графік випуску JDK 24:

  • Перша фаза стабілізації (відгалуження від основної гілки): 5 грудня 2024.
  • Друга фаза стабілізації: 16 січня 2025.
  • Перший реліз-кандидат: 6 лютого 2025.
  • Останній реліз-кандидат: 20 лютого 2025.
  • Загальна доступність: 18 березня 2025.

А чого очікувати в JDK 24? Давайте почнемо вивчати нові JEP-и.

JEP 475, який спрощує збирач сміття G1, зміщуючи розширення бар’єра пізніше в конвеєрі компіляції C2 JIT, перейшов зі статусу «Кандидат» до «Пропонованого в реліз» для JDK 24. Ця зміна спрямована на оптимізацію продуктивності C2 і перебуватиме на розгляді до 2 жовтня 2024 року.

JEP 486, який зараз в статусі «Кандидат», має на меті остаточно вимкнути клас SecurityManager, який був визнаним застарілим у JDK 17 в рамках JEP 411. Цей крок усуває можливість використання надалі, хоча і дає змогу розробникам тимчасово його вмикати.

JEP 472, Prepare to Restrict the Use of JNI, був запропонований у реліз JDK 24. Цей JEP пропонує обмежити використання небезпечного Java Native Interface (JNI) у поєднанні з обмеженими методами в API функцій і пам’яті (FFM). Стратегія вирівнювання, яка розпочалася з релізу JDK 23, змусить Java Runtime показувати попередження про використання JNI, якщо користувач FFM не активує небезпечний рідний доступ через командний рядок. Очікується, що в релізі після JDK 23 використання JNI буде генерувати винятки замість попереджень.

Чернетка JEP 8291976, Support HTTP/3 in the HttpClient, пропонує оновити JEP 321, HTTP Client, який був представлений у JDK 11, щоб підтримувати протокол HTTP/3. Це дозволить застосункам і бібліотекам взаємодіяти з серверами HTTP/3 та отримувати переваги HTTP/3 з мінімальними змінами в коді.

А якщо ви з тих, хто любить йти попереду всіх — ось Build 18 попередніх збірок JDK 24, щоб ви могли поекспериментувати.

Ще один місяць, ще одна порція новин про Spring! Ось що нового і цікавого в екосистемі Spring цього місяця.

Майкл Мінелла оголосив, що їхня команда вирішила продовжити комерційну підтримку Spring Boot 2.7 до кінця 2026 року. Метою надання додаткових 16 місяців підтримки є дозволити всім пріоритизувати будь-які потреби в оновленнях відповідно до інших пріоритетів.

Spring Framework 6.2 очікується в листопаді. У зв’язку з цим майбутнім випуском Юрген Хоеллер вирішив, що це вдалий момент, щоб поділитися інсайтами про плани команди щодо Spring Framework 7.0. Зацікавлені в тому, що нас чекає далі? Ознайомтеся з деталями тут.

Цей текст можна включити до розділу про Java та ШI, але оскільки він тісно пов’язаний із Spring, заслуговує на увагу саме в цій секції. Пам’ятаєте класичний застосунок Spring Pet Clinic? Oded Shopen вдихнув у нього нове життя, додавши ШI-асистента. У двох своїх статтях (Частина I та Частина II) він показує, що було змінено для взаємодії з додатком природною мовою. Це чудовий приклад поєднання вебзастосунків та ШI.

Крістіан Цзолов також поділився статтею про нову функцію Spring AI Advisors, яка робить ШІ-застосунки більш модульними та простими в обслуговуванні. Якщо вас цікавить розвиток AI в екосистемі Spring, обов’язково ознайомтеся з цим матеріалом!

Наша команда нещодавно виявила новий експериментальний проєкт під егідою Spring, що називається Spring gRPC. Якщо ви зацікавлені в інтеграції gRPC з Spring, за цим ним точно варто спостерігати.

Тепер загляньмо в останні релізи в екосистемі Spring. Команда Spring Framework оголосила про наявність першого реліз-кандидата Spring Framework 6.2. Нові функції зосереджені на вебкомпонентах і обміні повідомленнями, а також містять оптимізації для підвищення ефективності Spring. Додаткову інформацію можна знайти тут.

Spring Boot 3.4.0-M3 був випущений і тепер доступний до завантаження. Нові зміни включають поліпшення спостережуваності та оновлення для Spring для Apache Pulsar. Крім того, введено підтримку для депрекації та заміни класів автоматичної конфігурації.

Випущено версії Spring Modulith 1.3 M3, 1.2.4 і 1.1.9. Дві останні містять звичайні виправлення помилок та незначні поліпшення, а версія-мілестон 1.3 M3 приносить кілька помітних змін.

Spring AMQP 3.2-M3 доступний. Найзначніша зміна — це впровадження властивостей exchange та routingKey в RabbitMessageSenderContext для покращення відображення в рамках Open Telemetry. У жовтні команда Spring планує випустити RC1 з подальшими поліпшеннями для Open Telemetry.

Spring Batch 5.2.0-M1 теж вже вийшов. Основні зміни містять:

  • Підтримку підказок запитів у JPA item readers.
  • Підтримку класів даних у JDBC item readers.
  • Налаштовуваний роздільник рядків у RecursiveCollectionLineAggregator.
  • Поліпшення реєстрації завдань.

Spring for Apache Pulsar 1.2.0-M2 доступний. Помітні нові функції містять:

  • Політику запуску контейнера повідомлень — тепер можна налаштувати політику збоїв запуску контейнера слухача повідомлень для зупинки, продовження або повтору.
  • Налаштування фабрик контейнерів повідомлень (Spring Boot) — в майбутньому Spring Boot 3.4.0-M3 буде впроваджено загальний налаштувальник фабрики контейнерів повідомлень (PulsarContainerFactoryCustomizer<T extends PulsarContainerFactory<?, ?>>), який можна використовувати для подальшого налаштування автоматично сконфігурованих фабрик контейнерів слухача повідомлень, що підтримують @PulsarListener, @PulsarReader і @ReactivePulsarListener.

Вийшов Spring Authorization Server 1.4.0-M2. В цьому оновленні додано новий зручний метод для анулювання OAuth2Token.

Команда Spring for Apache Kafka оголосила про доступність Spring for Apache Kafka 3.3.0-M3 та випустила патчі GA для версій 3.2.4 та 3.1.9.

Spring for Apache Kafka 3.3.0-M3 версія додає можливість налаштування ведення журналу DeadLetterPublishingRecovererFactory та дозволяє визначати метод @DltHandler в батьківському класі класу, анотаційованого @KafkaListener.

Вийшов Spring Integration 6.4.0-M3. Ось деякі помітні покращення:

  • Підвищена продуктивність і зниження використання пам’яті для динамічних реєстрацій інтеграційних потоків.
  • Першокласна підтримка IndexAccessor з SpEL та реалізація JsonIndexAccessor.
  • Можливість налаштування генератора імені файлу для ZipTransformer.

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

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

Oracle оголосила про бета-реліз Oracle Code Assist — інструмента, спрямованого на підвищення продуктивності розробників завдяки інтелектуальним підказкам коду. Крім того, вони впровадили підтримку NetSuite SuiteScript, що дозволяє розробникам інтегрувати автоматичне доповнення коду та керівництво безпосередньо в середовищі NetSuite.

Amazon нещодавно оголосили про альфа-реліз Storage Browser для Amazon S3, що надає кінцевим користувачам простий інтерфейс для доступу до даних, збережених у S3. Проєкт доступний у бібліотеках AWS Amplify JavaScript і React. Storage Browser є компонентом з відкритим вихідним кодом Amplify UI React, який клієнти можуть додати до своїх вебдодатків, щоб забезпечити кінцевих користувачів простим інтерфейсом для доступу до даних, збережених у S3.

Використовуючи цей новий інтерфейс, розробники можуть надати авторизованим користувачам можливість переглядати, завантажувати та завантажувати дані в бакеті зі своїх додатків.

Microsoft оголосила про загальну доступність (GA) Java-платформи в Azure Container Apps. Ця служба дозволяє використовувати Spring Cloud Service Registry, Spring Cloud Config, а також надає глибокий моніторинг за допомогою Spring Boot Admin.

Amazon Coretto 23 також вже доступна.

Версія 0.35.0 LangChain для Java містить нові інтеграції: моделі чату та ембеддингів з GitHub Models; завантажувач документів із Google Cloud Storage; модель ранжування з Google Vertex AI Ranking API; модель ранжування з ONNX Reranker; сховище для ембеддингів з Tablestore; а також ембеддинги та ранжування з Voyage AI. Інші важливі зміни містять: підтримку моделей вбудовування, можливість підрахунку токенів і структуровані вихідні дані з Google AI; а також підтримку оглядовості в Ollama.

Нове рішення для локального запуску інференсу великих мовних моделей (LLM) у Java без нативних залежностей привертає увагу завдяки своїй продуктивності на GraalVM Native Image. Це рішення обіцяє простий процес встановлення, зберігаючи при цьому вражаючу швидкість. Проєкт буде представлений на конференції Devoxx Альфонсо Петерссеном, який поділиться інсайтами щодо практичних впроваджень машинного навчання на GraalVM.

AWS опублікувала звіт про досвід клієнтів, які використовують агент Amazon Q Developer для оновлення Java-проєктів до новіших версій Java, Spring та інших бібліотек. Q Developer може бути корисним для старих проєктів, які не мають достатніх ресурсів розробників для оновлення. Підтримувані бібліотеки наведені в документації.

З’явився новий проєкт, спрямований на оцінювання моделей для автоматизованого ремонту програмного забезпечення за допомогою штучного інтелекту під назвою repairbench. Він оцінює моделі, використовуючи колекції відтворюваних помилок, такі як Defects4J та GitBug-Java, і відображає результати у вигляді таблиці лідерів. Проєкт детально описаний у науковій статті, а його код доступний на GitHub.

Vert.x 4.5.10 — нове мінорне оновлення — стало доступним на початку вересня. Окрім того, у новому блозі представлено огляд майбутніх оновлень для vertx-http-proxy, включно з механізмом для модифікації HTTP-запитів і відповідей за допомогою інтерсепторів, таких як HeadersInterceptor, PathInterceptor, QueryInterceptor, BodyInterceptor. Також додана можливість застосовувати інтерсептори до пакетів рукостискання WebSocket.

Debezium 3.0 офіційно випущено, що принесло значні оновлення для можливостей change data capture (CDC). Основні покращення містять розширену підтримку хмарних середовищ, покращене управління ресурсами та підвищену продуктивність. Оновлення також додає підтримку нових баз даних, таких як Apache Cassandra, і покращення для існуючих конекторів, таких як PostgreSQL та MySQL. Крім того, з’явилося вдосконалене управління еволюцією схем та обробкою типів LOB (Large Object). Ці зміни роблять Debezium 3.0 більш надійним для інтеграції даних у реальному часі в сучасних додатках.

PostgreSQL 17 був нещодавно випущений і містить оптимізації продуктивності, вдосконалений EXPLAIN та SQL/JSON, підтримку інкрементних резервних копій та інші поліпшення. Ці оновлення покращують загальну швидкість бази даних, роблять аналіз запитів більш інформативним, а також спрощують роботу з JSON-даними та резервними копіями.

З огляду на зацікавленість у новинках, варто також ознайомитися — або нагадати собі — про внутрішні механізми роботи PostgreSQL. Для цього пропонуємо огляд композитних та часткових індексів і їхнього впливу на продуктивність, аналіз того, як PostgreSQL обробляє оновлення, а також статтю про підводні камені балансування навантаження на читання/запис у проміжному шарі, як-то приховані модифікації в, на перший погляд, запитах SELECT, балансування транзакцій та інші аспекти.

На Gatling було опубліковано нагадування про основні функції HTTP/2 та про те, як їх використовувати при навантажувальному тестуванні. Хоча ці публікації зосереджені на продуктивності, вони також можуть допомогти покращити розуміння механізмів низькорівневої комунікації між сервісами.

У новій публікації в блозі Netflix обговорюють WebSocket-сервер — Pushy. Він регулярно справляється з високими навантаженнями, обробляючи сотні тисяч повідомлень на секунду. У статті детально розглядаються питання масштабування, балансування навантаження нових і перерозподілу з’єднань, які існують, перезавантаження вузлів сервера та пов’язані з цим сплески повторних з’єднань. А також деякі проблеми безпеки.

Scala 2.13.15 вже доступна! Це оновлення покращує сумісність з JDK 23, підтримує Scala 3.5, вдосконалює крос-компіляцію та міграцію Scala 3, поліпшує попередження та лінти.

У вересневому випуску Kafka Monthly Digest 2024 підкреслюються ключові оновлення, включно з випуском Apache Kafka 3.7.0, який забезпечує покращену масштабованість і підвищену продуктивність. Також розглядаються останні функції та виправлення помилок у компонентах Kafka, таких як Kafka Streams та Kafka Connect. Крім того, у дайджесті згадуються майбутні заходи спільноти, значущі обговорення та корисні ресурси для розробників, які працюють з Kafka в продуктивних середовищах.

Реалізація планувальника Linux на Java може здаватися божевільною ідеєю, але тепер це можливо. Що допомагає використовувати можливість ядра Linux sched_ext для динамічного завантаження планувальників потоків ядра, eBPF та Java-бібліотеку hello eBPF. У відео від Йоганнеса Бехбергера, автора hello eBPF, описується реалізація, а стаття на mostlynerdless.de розглядає це більш детально.

Netflix випадково опублікувала статтю, в якій описує використання eBPF для виявлення «шумних сусідів». Вони інструментують черги планування, щоб виміряти час, який процеси проводять у черзі перед тим, як бути відправленими на CPU.

Отже, штучний інтелект обіцяв нам краще життя, де ШI займається мистецтвом, поки люди перуть білизну... або, можливо, навпаки?
У будь-якому разі, поговорімо про Copilot, який обіцяв інженерам захоплюючі «плюшки»:

Але чи насправді він такий хороший?

Дослідження показало, що ШI-асистенти для написання коду, такі як GitHub Copilot, незначно покращують продуктивність чи якість коду. Незважаючи на свою популярність, дослідження виявило, що розробники, які використовують ці інструменти, не завжди відчувають очікувані поліпшення ефективності чи точності. У деяких випадках користувачі навіть поставали перед труднощами в розумінні та підтримці коду, згенерованого ШI.

«Насправді дослідження показало, що розробники, які використовували Copilot, ввели на 41% більше помилок у свій код.»

Однак дослідження визнало, що інструменти штучного інтелекту можуть бути корисними для таких завдань, як вивчення нових мов програмування чи генерація шаблонного коду. Навіть якщо вони не підвищують безпосередньо продуктивність.

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

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

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

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

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