Всем привет! ? ? ?? Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом выпуске: первые JEP, направленные в JDK 23, введение в Graal VM, состояние экосистемы Java на 2024 год. Посмотрим несколько интересных релизов: мажорную версию Kotlin 2.0, открытие раннего доступа к IntelliJ IDEA 2024.2 и предрелизную версию Spring AI 1.0.0. Погрузимся в JDK Mission Control, познакомимся с дата-ориентированным программированием через серию статей авторства Nicolai Parlog и разберемся в том, какой JDK выбрать для всего проекта.

Главные новости

JEP 467 направлен в Java 23. Позволяет записывать комментарии к документации JavaDoc в Markdown, а не только в виде смеси HTML и JavaDoc @-тегов. Удобная функция для создания документации внутри Java, потому что работать с HTML-тегами визуально менее приятно, чем с Markdown.

JEP 477 в качестве Preview направлен в Java 23. Мы неоднократно писали об этой функции, основной ее посыл остался таким же: сделать Java проще для новых пользователей с целью увеличить сообщество. Улучшение позволяет писать упрощенные декларации для программ, состоящих из метода main, которые могут быть расширены по мере роста навыков.

JEP 479: Remove the Windows 32-bit x86 Port перешел в статус Candidate.
Удаление кода, связанного с Windows 32-bit, должно упростить сборку и тестирование инфраструктуры JDK. В 32-битной версии WIndows Project Loom не дает преимуществ, так как код, реализующий виртуальные потоки, по итогу использует потоки ядра. Удаление касается не всех 32-битных систем, а только Windows.

JEP 482: Flexible Constructor Bodies направлен в JDK 23 в статусе second preview.
Он может быть известен вам под названием Statements before super. При переходе в статус second preview его переименовали и добавили одно очень важное изменение: теперь можно инициализировать поля класса до того, как будет вызван super().

Вышел Kotlin 2.0. Центральный элемент новой мажорной версии Kotlin — новый компилятор K2. Этот компилятор в значительной степени ориентирован на мультиплатформенность. Он может компилировать исходники как в байт-код для JVM, так и в JavaScript, Wasm и нативный код, что увеличивает переиспользуемость кода. Кроме того, K2 ускоряет компиляцию кода и привносит новые языковые конструкции. С полным списком изменений можно ознакомиться на kotlinlang.org.

IntelliJ IDEA 2024.2 EAP Is Open! Немного интересных улучшений IntelliJ IDEA 2024.2, которые уже сейчас можно пощупать в раннем доступе:

  • Новая вкладка Performance в окне Run. Позволяет во время работы получать информацию о CPU и памяти для более эффективного выявления ботлнеков и утечек памяти.

  • Запуск тестов и выполнение некоторых советов IDE прямо во время индексирования.

  • Автоматическое разрешение конфликтов import-ов для Java и Kotlin.

SBOM support in Spring Boot 3.3 принес с собой поддержку SBOM (Software Bill of Materials). SBOM описывает компоненты, которые использует ваша система, это может быть полезным, например, для автоматизированного составления списков уязвимостей вашей программы.

Spring AI 1.0.0 M1 release — первая предрелизная версия Spring AI 1.0.0. Из значимых нововведений — API для создания промптов, похожий на RestClient и JdbcClient, поддержка новых моделей и векторных хранилищ, TestContainers.

Интересные видео

Module Imports in Java 23 - Inside Java Newscast #69 Очередной выпуск Java Newcast, где автор обсуждает книгу «Модульная система Java», которая была написана семь лет назад, но до сих пор актуальна. В Java 23 будет предварительный просмотр функции, основанной на модулях, которая может быть использована, даже если код не находится в модулях.

Introduction to JDK Mission Control Отличный туториал, посвященный JMC. Вы узнаете, что это за инструмент, как с его помощью анализировать поведение Java-приложения. Материал подан доступно и наглядно. В описании к видео есть ссылка на репозиторий с кодом примера, а также на сам JMC, чтобы закрепить полученные знания на практике. 

Полезные статьи

Hibernate ORM 6.6 - @ConcreteProxy Annotation - In Relation To. Небольшая заметка, которая рассказывает о новой функциональности Hibernate 6.6 — ConcreteProxy. Эта аннотация указывает на то, что в случае наследования сущностей Hibernate должен создавать прокси не на суперкласс, а на конкретного наследника.

Task scheduler in Java: background job processing with JobRunr. Введение в JobRunr — библиотеку для распределенного планирования задач в Java-приложении. Из главных особенностей, которые есть из коробки: поддержка запланированных, повторяющихся и одноразовых задач, возможность запуска на любой свободной ноде приложения, встроенный механизм ретраев, а также интеграция с Micronaut, Quarkus и spring. 

Андрей Орлов

Когда-то приходилось реализовывать подобную логику в приложении самостоятельно — и было очень интересно посмотреть на то, как это все круто и лаконично можно сделать без «велосипедов».

Типы совместимости в Schema Registry для Apache Kafka. Материал, который не относится к Java напрямую, но от этого не становится менее полезным. Автор достаточно подробно разбирает типы совместимости Avro-схем, объясняя, какие ограничения они накладывают, и приводя примеры на Java.

Java Runtimes: Insights From the Spring Boot Point of View — о том, на что стоит обратить внимание при выборе JDK, если вы используете в разработке фреймворк Spring Boot. Автор рассматривает выбор JDK с трех разных точек зрения — разработчика, DevOps и SecOps — и приводит соответствующие факторы. Например, поддержка нативных образов, CRaC, SBOM. Стоит отметить, что не все эти факторы специфичны для Spring Boot, поэтому, даже если вы не используете его в разработке, статья все равно будет полезна. Кроме того, в конце приведена удобная табличка с перечислением всех ключевых факторов и их поддержки со стороны JDK от различных поставщиков.

Calling Microservices in Java: Part 1. Заметка о различных вариантах реализации HTTP-вызовов в Java. Рассматривается четыре варианта: ванильная Java, Apache HttpClient, Spring-овые RestTemplate и WebClient, а также Feign. В конце приводится несколько полезных советов по реализации HTTP-вызовов в принципе.

Using Bootify for a Spring Boot Prototype with Thymeleaf. Небольшая статья про Bootify, сайт-инструмент, который позволяет в пару кликов сгенерировать простое CRUD-приложение на Spring Boot с фронтендом, БД, миграциями БД и всеми нужными зависимостями.

Guide to Graal VM. GraalVM — это виртуальная машина Java, написанная на самой Java. Основная фича — Ahead-of-Time (AOT) компиляция ваших Java-приложений в нативные приложения, при этом GraalVM может работать и в классическом режиме с интерпретацией байт-кода и JIT-компиляцией. Статья будет отличным вводным материалом — если еще не знакомы с технологией, то советуем прочитать. В начале рассказывают про GraalVM и преимущества, которые он предоставляет, затем небольшой бенчмарк со сравнением с популярными VM для Java. Не забыли рассказать и про моменты, когда классические VM могут быть более выигрышными, а на десерт показали, как нативная компиляция ускоряет старт Spring Boot приложения. Cпойлер: на простом Hello World GraalVM справляется в 35 раз быстрее.

Data Oriented Programming in Java - Version 1.1. Вышла серия статей от Nicolai Parlog про дата-ориентированное программирование. Расскажем немного про каждую статью. 

В этой статье обсуждаются новые возможности языка Java, такие как типы паттернов, улучшения switch, записи и паттерны записей, запечатанные типы и другие паттерны. Эти функции могут существенно влиять на программирование, когда используются вместе, и предлагают новые подходы к проектированию.

Model Data Immutably and Transparently - Data Oriented Programming v1.1.1
В статье обсуждается принцип моделирования данных неизменяемо и прозрачно, что является — это ключевойым элемент в ориентированном на данные программировании (DOP). Этот принцип помогает избежать ошибок, связанных с изменением состояния объектов, используемых различными подсистемами. Приводятся примеры, показывающие, как неизменяемые данные и прозрачность могут повысулучшить надежность кода. 

Model Data, the Whole Data, and Nothing but the Data - Data Oriented Programming v1.1.1
В статье рассматривается принцип моделирования данных в ориентированном на данные программировании (DOP), который заключается в моделировании данных, всех данных и только данных. Обсуждается использование записей (records) и запечатанных типов (sealed types) для достижения этой цели. Примеры включают простую торговую платформу, где товары (книги, мебель и электроника) представлены как записи.

Просто интересное

2024 State of the Java Ecosystem. Компания New Relic, занимающаяся мониторингом различных приложений, выложила небольшую статью с описанием состояния экосистемы Java на 2024 год. Наиболее популярные версии Java сейчас — это 17, 11, 8, а на Java 21 приходится всего 1,4% приложений от общей массы. 68% Java-приложений используют от 1 до 4 ядер, порядка 32% Java-приложений помещаются в 1 ГБ памяти. Еще больше чисел и графиков смотрите в самой статье.

Modules Make javac Easy — про компиляцию и сборку Java-приложения не самым популярным способом в текущее время через javac. Также рассказывается про непопулярный механизм модулей в Java и про то, как они облегчают сборку через javac. В статье есть примеры кода, подготовлен репозиторий с проектом и командами. 

Modules Make javac Easy: Part. 2, Dependencies and Tests.
Здесь автор рассказал про то, как добавлять зависимости в проект и запускать тесты, не покидая терминал. Так же, как и с первой частью, если решите поразвлекаться, подготовлен репозиторий с кодом и Spring Boot приложением.

Константин Польщиков

Статьи про Modules Make javac Easy интересны, если никогда не собирали ваши приложения через javac или уже забыли, как это. При этом сборка выглядит сложнее, чем через Maven или Gradle, есть немного заморочек с конфигурацией, но при этом мы работаем напрямую с javac и такой подход может оказаться более гибким.

Джавовые события

Прошла конференция KotlinConf’24. Доступна запись кейноута и несколько интервью, которые можно найти в плейлисте KotlinConfersations'24. 

Спасибо @IvanVakhrushev что поделился этой новостью ? 

Увидимся через месяц ? Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!

Комментарии (1)