Всем привет! ? ? ? ? Мы — Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске вас ждет обновление Kora, Intellij IDEA, null-safety в Java без регистрации и СМС. Посмотрим видео с прошедшего JVM Language Summit, затронем тему исключений. Не забудем и про безопасность наших приложений, и про логи. Считаем, что этот выпуск можно считать рекордным по количеству упоминаний Project Valhalla: аж 9 упоминаний!
Главные новости
Добавлены:
Модуль S3 Client экспериментальный.
Модуль Liquibase.
Опция конфигурации для указания файлов миграции в модуль Flyway.
Опция конфигурации размера сообщения сервера gRPC.
Дополнительный Javadoc.
Исправлены:
Логирование тела в HttpClientTelemetry, которое не читалось до конца.
Порядок выполнения перехватчика gRPC.
Фиксация записи Kafka Consumer только после пакетной обработки.
Длительность смещения KafkaAssignConsumerContainer.
Смешивание кодегена Openapi, ссылающегося на поля oneOf в корневом типе.
Вышла IntelliJ IDEA 2024.2. Несколько самых интересных изменений:
Запросы из репозиториев Spring Data JPA теперь можно выполнять прямо в IDE.
Добавлена подсветка синтаксиса, автодополнение и подсказки для cron-выражений, если они используются для реализации шедулеров в Spring, Quarkus или Micronaut.
Многие фичи IDE стали доступны прямо во время индексации проекта.
Добавлена (пока в бете, нужно включать в настройках) интеграция с компилятором K2 для более быстрой и стабильной работы с Kotlin-кодом.
Новый UI теперь установлен по умолчанию. Старый доступен в виде плагина.
Диалоговое окно Search Everywhere теперь содержит возможность отобразить превью найденного текста в коде.;
Появилась возможность запускать шедулеры Spring во время дебага вручную, что избавляет от необходимости ждать их старта по расписанию.
Улучшена работа с логерами в Java — добавлена подсветка параметров, инспекции и автоматические рефакторинги.
Рекомендуем посмотреть видеообзор от JetBrains, и интересный обзор выпустили авторы Amplicode.
JEP draft: Null-Restricted and Nullable Types — появился draft JEP с поддержкой null safety в Java. Синтаксис ожидается такой:
Foo! означает что тип — null-restricted, то есть в набор значений null не входит.
Foo? означает что тип — nullable, то есть в набор значений входит null.
По умолчанию для Foo не определена возможность быть null. То есть null может возникнуть, но, был ли он преднамеренным, неизвестно. Очень интересно синтаксис выглядит для массивов. Foo?[]! означает следующее: сам массив— []! null-restricted, а вот элементы массива — Foo? nullable. Для параметризованных типов, соответственно, это будет выглядеть так: Predicate!<Foo?>. Стоит отметить, что это draft и синтаксис может поменяться.
Так как null-restricted-типы не могут быть null, а сейчас в Java все объекты по умолчанию инициализируются null, все null-restricted-типы нужно будет инициализировать. Например, null-restricted-поле класса нужно обязательно инициализировать либо на месте, либо через конструктор, а для массива String![]! нужно будет проинициализировать все элементы значениями, не являющимися null.
Появятся новые ошибки компиляции, предупреждения и новые возможности схлопотать NPE в рантайме.
Костя Польщиков
В JEP еще много всего интересного — советую его прочитать. Этот JEP один из ключевых для Project Valhalla, про него, кстати, вышло видео с прошедшего JVMLS. Найти это видео можно в материалах ниже.
JEP 484: Class-File API. JEP про Class-File API переехал в статус Candidate. Он посвящен предоставлению стандартного API для анализа, создания и преобразования файлов классов Java.
JEP draft: Primitive Types in Patterns, instanceof, and switch (Second Preview). JEP, посвященный примитивным типам в паттернах, instanceof и switch, ушел на второе превью. Ранее он уже появлялся в качестве превью фичи в JDK 23.
bld 2.1.0 release. Несколько выпусков назад мы рассказывали про новый инструмент для сборки Java, bld, основная особенность которого — описание сборки на Java. С того времени он цветет и пахнет, у него уже есть плагин для Intellij, а в последнем релизе появилась поддержка Java-модулей, а также Jpackage-, Jmod- и Jlink-операций.
MicroProfile 7.0 Released. Вышла версия 7.0 спецификации MicroProfile. В этом мажорном релизе MicroProfile Metrics заменено на Telemetry 2.0, добавили Jakarta EE 10 Core Profile как зависимость, и не только.
Интересные видео
Project Babylon — Code Reflection #JVMLS. Project Babylon — это кодовое название проекта, разработанного командой Java в Oracle, цель которого — создание нового Java-компилятора, способного работать с динамическими языками программирования. Этот проект — часть более широкого плана по развитию платформы Java и расширению ее возможностей для поддержки языков с динамической типизацией, таких как JavaScript, Python, Ruby и других.
Владимир Ситников — Бросить нельзя поймать: основы и детальная механика Java-исключений
Владимир раскрывает тему исключений в своем фирменном стиле — заглянем под капот и узнаем, как использовать этот механизм максимально эффективно. В докладе вас ждет байт-код, оптимизации и флаги JVM и, конечно, бенчмарки. Очень практично и полезно. Как минимум вы точно узнаете, что делать с OutOFMemoryError, StackOverflowError и InterroptedException ?
Valhalla - Where Are We? #JVMLS. Как несложно догадаться по названию, видео посвящено состоянию крупнейшего рефакторинга Java, который длится уже 10 лет. В видео рассказали, что такое Project Valhalla и зачем он нужен, историю проекта, на какой стадии он находится в данный момент и, самое важное, какие JEP приближают проект к завершению.
Best of Java Performance — Inside Java Newscast #75. Брайан Гетц представил обновление Valhalla, которое включает в себя рефакторинг Java и эксперименты с виртуальными машинами.
Java Initialization 2.0 #JVMLS. В видео обсуждается инициализация переменных в Java и Valhalla. В Java инициализируются локальные переменные, поля и массивы. В Valhalla инициализация переменных важна для обеспечения инвариантов. О том, как инициализация работает для оптимизации в Valhalla, можно узнать в этом ролике.
Полезные статьи
Advanced JShell Usage. JShell позволяет оценивать код Java и создавать прототипы программ с внешними зависимостями. Рассказывается о работе с JavaFX в JShell с использованием предопределенных скриптов или созданием собственных.
Spring Boot 3.3 Boosts Performance, Security, and Observability. О небольших нововведениях производительности, безопасности и наблюдаемости приложений, которые принес с собой Spring Boot 3.3.
Hacking a JVM Application with IntelliJ IDEA’s Debugger. В этом туториале автор показывает, как можно изменить поведение JVM-программы без доступа к ее исходному коду, используя только отладчик Intellij IDEA. В примере он меняет поведение игры так, чтобы при получении урона у игрока не убывала полоска здоровья. Это очень полезное знание, которое может помочь в сложной ситуации.
Creating Cloud-native Java Applications with the 12-factor App Methodology.
Хороший материал, посвященный 12 факторам. Автор рассматривает каждый фактор через призму cloud-ориентированности. А точнее, cloud-ориентированности с помощью Open Liberty — среды выполнения Java-приложений от IBM. Практически каждый фактор сопровождают ссылки на интерактивные туториалы на сайте Open Liberty, на которых можно попрактиковаться.
Are Critical Vulnerabilities Lurking in Your Java Ecosystem?
90% Java-приложений потенциально содержат критические уязвимости. Причина пугающей статистики — повсеместное использование сторонних open-source-библиотек. Уязвимость в одной библиотеке, которая, возможно, даже подтягивается транзитивно, может скомпрометировать все приложение. При этом контролировать огромное число сложно связанных между собой зависимостей в Java-приложении — непростая задача. А обновление или отказ от такой библиотеки для некоторых проектов может занять недели и месяцы, особенно если проект старый и давно не дорабатывался. В статье приводятся полезные практики, которые позволят минимизировать риски и выстроить среду для быстрого и эффективного устранения пробелов в безопасности.
How to Integrate Jakarta Data with Spring and Hibernate. Статья от Vlad Mihalcea о том, как в приложениях на Spring Boot и Hibernate использовать новую спецификацию Jakarta EE — Jakarta Data.
Structured Logging in Spring Boot 3.4. Начиная со Spring Boot 3.4, поддерживается структурированное логирование, из коробки позволяющее писать логи в форматах Elastic Common Schema или Logstash.
JDK 23 and JDK 24: What We Know So Far. Материал содержит список всех JEP, которые войдут в Java 23, разбитый по категориям и проектам JDK. Кроме того, статья предлагает посмотреть на JEP, которые, вероятнее всего, войдут в мартовский релиз Java 24 в 2025 году.
Любопытный подкаст
Episode 282 — Classic — Кунг-фу Неплохой разговорный выпуск. Особый интерес вызвал разбор концепции Fair Source на примере Sentry. Грубо говоря, это readonly Open Source. Ты можешь посмотреть исходный код проекта, но вот выкачать и собрать из него рабочий билд уже нельзя. Очень заинтересовала статья «Кунг-фу спикера» про словесные трюки и приемы речевой борьбы. Полезно не только для выступлений на конференциях, но и в повседневной жизни.
Просто интересное
postgres.new: In-browser Postgres with an AI interface В статье рассказывается про postgres.new — браузерный postgresql, взаимодействовать с которым можно через встроенный чат на естественном языке.
Джавовые события
5—7 августа прошел JVM Language Summit. На ютуб-канале Java начали появляться видео:
Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске! Спасибо, что прочитали! Ждем обратную связь в комментариях. Увидимся через месяц ?
Neuronix
Вы бы описывали что это за Kora такая. Пришлось сходить и посмотреть. Оказался очередной "убийца" спринга