Блог создается при поддержке Axiom JDK и Failover Bar

Эта неделя в мире Java (21 ноября)

November 21, 2023 . 13 минут на чтение статьиЭта неделя ||| в мире Java ||| (21 ноября)

Все сенсации, интриги, расследования, которые вам нужны 21 ноября.

  • Брайан Гёц — гриб (видео под катом, интервью с @boomburum)
  • jHipster требует Java 21 и не согласен на меньшее
  • Живой мастер-класс по JUnit от JUnit-джедая
  • Депо поездов имени В.В. Спринга
  • Тонна фиксов CVE уязвимостей
  • Первые попытки поддержать CRaC
  • Новая поделка: Penna для логов в JSON
  • Обновы в Quarkus, Micronaut, Payara, OpenLiberty, Mojarra, Grails, Tomcat...

Интро

Javawatch

  • Договорились делать с Абашевым выпуски "Полезняшек от Разбора Полетов" в формате подкаста и дайджеста. Следующая планируемая запись — этот четверг. Будем держать в курсе

  • Договорились сделать мастер-класс по написанию расширений для JUnit с Ильёй (автор сообществ tg:@sreda_razrabotki и tg:@kydavoiti). С меня — площадка Failover Bar и обзор на Хабр, с Ильи — провести мастер-класс в рамках его сообщества "Среда Разработки". Подробности в анонсе в его Telegram-канале

  • Мой доклад "Как создается Java" прошел ревью у Гриши Петрова (@grigoryvp ) и официально proposed to targettargeted, HighLoad 2023, 28 ноября в 17:00 на треке OpenSource

  • Подписывайтесь на @javawatch в Telegram, чтобы не пропустить ништяки

Наши подкасты

Илья Старченко из pro.jvm засветил хороший подкаст про Loom

Эта неделя на Хабре

Новое в рассылке OpenJDK и JEP-ах

  • Согласно таймлайну, движемся к 7 декабря, которая означает фазу Rampdown Phase One. Это будет форк от мейнлайна openjdk/jdk, фиксить можно будет только текущие P1-P3 баги (и targeted, если есть время). Осталось две недели, часики тикают.

  • [amber] JEP 459: String Templates (Second Preview)

    • proposed to targettargeted, JDK 22
    • пруф в рассылке
    • Эта фича позволяет делать очень простую интерполяцию строк прямо в языке Java, без дополнительных библиотек:
    String name = "Joan";
    String info = STR."My name is \{name}";
    
  • [amber] JEP 463: Implicitly Declared Classes and Instance Main Methods (Second Preview)

    • candidateproposed to target, JDK 22
    • пруф в рассылке
    • Фича позволяет не писать класса вокруг main-метода, чтобы новичкам было проще изучать язык, а всем остальным — писать маленькие прототипы
    • Завершение сбора обратной связи: 28 ноября
  • [core-libs] JEP 457, Class-File API (Preview)

    • candidateproposed to target, JDK 22
    • пруф в рассылке
    • Фича позволяет то же самое, что и ASM, но в крайне стабильном виде, пригодном для внутреннего использования в разработке ядра JDK.
    • Завершение сбора обратной связи: 28 ноября
  • [amber] JEP 447, Statements before super(...) (Preview)

    • candidateproposed to target, JDK 22
    • пруф в рассылке
    • Фича позволяет в конструкторах писать код, до вызова this() и super() — он не должен ссылаться на инстанс, который создается в этом конструкторе
    • Изначальная идея и спецификация лежит здесь
    • Завершение сбора обратной связи: 22 ноября
  • [hotspot] JEP 423, Region Pinning for G1

    • candidateproposed to target, JDK 22
    • пруф в рассылке
    • Фича понижает латентность G1, включением пиннига регионов. Можно запинить произвольные регионы в ходе major и minor сборки. А чтобы не отключать сборку, можно реализовать JNI critical regions (любая ссылка на сайт Большого Шэ обязательна к прочтению!)
    • Завершение сбора обратной связи: 28 ноября

Тулинг

  • Третий и второй релиз-кандидат Gradle

    • Gradle — одна из двух основных систем сборки в Java-мире (вторая — Maven)
    • Заявлена полная поддержка JDK 21
    • Ускорена работа при первом запуске
    • Добавлена поддержка version catalog в предкомпилированных плагинах на Kotlin
    • Улучшено отображение ошибок
  • JDKMon 17.0.85

    • JDKMon - это утилита, которая мониторит и обновляет локальные инсталляции джавы
    • Добавлена поддержка CVSS 4.0 (Common Vulnerability Scoring System) and NVD API 2.0 (National Vulnerability Database).

Spring

  • Spring Framework

    • Spring — главный фреймворк в Java-мире
    • Spring 6.1 GA
      • What's New, Release Notes
      • Появились новые методы конвертации response body к нужному типу, используя конвертеры из ClientHttpResponse
      • Улучшенна валидация методов на элементах в контейнере
      • Добавлена поддержка паттерн-матчинга на именах методов в ControlFlowPointcut
    • Spring 6.0.14 и 5.3.31: десятки багфиксов
    • Ахтунг. Spring Boot 2.7.18 и 3.0.13 будут последними поддерживаемыми в опенсорсе релизами для веток 2.7.x и 3.0.x.
  • Spring Data

    • Spring Data — зонтик проектов, задачей которых является дать понятную и "ощущающуюся как настоящий Spring" модель для программирования данных. Включая штуки типа автовайрящихся репозиториев, объектных оберток над запросами, и аудита запросов в пару строчек кода.
    • Spring Data 2023.1.0, aka "Vaughn"
      • Release notes
      • Заявлена поддержка JDK 21
      • Добавлена поддержка virual threads через конфигурацию экзекутора (как везде в Spring)
      • Реализована поддержка Kotlin inline value classes
      • Проведена начальная работа в сторону поддержки CRaC (coordinated restoring and checkpointing)
      • Проведена начальная работа по улучшению Single Query Loading для Spring Data JDBC
      • Документации переведена на Antora.
    • Вышли плановые обновления Spring Data: 2023.0.6, 2022.0.12 and 2021.2.18.
  • Вышла свежая версия JHipster Lite 0.48.0

    • JHipster Lite помогает сгенерировать проект, включив в него не всю Spring-помойку, а только нужное. Полученный код использует гексагональную архитектуру, разделение на сервисный код и бизнес-логику, и другие ништяки, связанные с чистотой кода.
    • Ченжлог
    • Минимальная версия Java поднята до 21
    • Добавлен модуль для управления лицензиями
    • Добавлены аттрибуты name и description в @BusinessContext и @SharedKernel, чтобы иметь возможность генерировать документацию
  • Вышла библиотека Spring Security 6.2

    • Spring Security — это главная библиотека для "всего про безопасность" в экосистеме Spring
    • Ченжлог
    • Если в контексте есть бин CorsConfigurationSource, то параметр конфигурации .cors() теперь включается автоматически. Подробности.
    • Добавлен метод AbstractConfiguredSecurityBuilder.with(…​) чтобы применять конфигураторы, которые возвращают билдеры. Подробности.
    • Упрощена конфигурация компонентной модели OAuth 2 Client. Подробности.
    • Добавлен сервлетный паттерн для AuthorizeHttpRequests. Подробности
    • Реализованы статус коды для редиректов
    • Реализован парсинг запросов HTTP Basic
    • Добавлен OAuth 2.0/OIDC Back-channel Logout. Подробности.
    • Реализован Security Context Propagation
  • Вышла библиотека Spring for Apache Pulsar 1.0.0

    • Spring for Apache Pulsar (или иначе — spring-pulsar) занимается реализацией идей Spring применительно к messaging-решениям на базе Apache Pulsar. Pulsar — это распределенное решениe для cloud-native мессаджинга и стриминга данных.
    • Ченжлог

Веб-фреймворки

  • Вышел свежий зонтик релизов Payara Platform / November 2023

    • Payara — один из основных серверов приложений для Jakarta EE / Java EE
    • Появился генератор проектов, аналогичный Spring Initializr, Payara Starter
    • В зонтике заявлено несколько релизов
    • Исправлена уязвимость CVE-2023-41699
      • Уязвимость типа Open Redirect: перенаправление на недоверенный сайт
    • Maven Bundle Plugin добновлен до версии 5.1.9
    • У команды start-domain появился флаг --warmup. Команда будет прерываться после завершения post-boot действий. Работает, если нет никакого приложения для развертывания и нужно, чтобы проверить, что домен правильно настроен, без необходимости запускать сервер.
    • Реализована раздельная настройка таймаутов для старта-стопа-перезапуска
  • Вышел Open Liberty 23.0.0.11

    • Open Liberty — легковесный фреймворк для создания cloud-native приложений с использованием стека MicroProfile
    • Реализованы новые метрики для MicroProfile Metrics 5.0, 4.0 и 3.0. Их можно добавлять в дашборды разных утилит, и это не потребует дополнительных вычислительных ресурсов (потому что они общие):
      • Process CPU Utilization Percent
      • Heap Utilization Percent
      • GC Time per Cycle
      • Connection Pool in Use Time per Used Connection
      • Connection Pool Wait Time per Queued Request
      • Servlet Elapsed Time per Request
      • REST Elapsed Time per Request
    • В server.xml больше не нужно инклудить файлы по-отдельности, можно подключить вообще все файлы конфигурации через директиву include
    • Починили CVE-2023-46158. Это уязвимость в IBM WebSphere Application Server Liberty версий 23.0.0.9-23.0.0.10, которая приводит к деградации безопасности из-за неправильной работы с протуханием ресурсов
  • Вышел Micronaut Framework 4.2.0

    • Micronaut — один из основных легковесных некстген-фреймворков с поддержкой GraalVM Native Image
    • Улучшили Micronaut Core
    • JDK 21 добавлена в список Micronaut Launch
    • Появилась поддержка Gradle with Kotlin DSL
  • Вышел Grails Framework 6.1.0

    • Старый, проверенный в бою фреймворк для разработки веб-приложений на Groovy и Spring Boot
    • Ченжлог
    • Починили уязвимость CVE-2022-1471
      • Починили обновлением до SnakeYAML 2.2
      • Уязвимость позволяла запускать произвольный код на удаленном сервере, при десериализации классов с помощью SnakeYAML Constructor()
    • Отркфакторили связь с Sitemesh Plugin, чтобы не мешать все в одну кучу
  • Вышел Quarkus 3.5.2

    • Quarkus — один из основных легковесных некстген-фреймворков с поддержкой GraalVM Native Image
    • Ченжлог
    • Починили уязвимость CVE-2023-21971
      • Уязвимость позволяла скомпроментировать коннекторы MySQL. Это можно было использовать для DDoS или выполнения вредоносного кода на стороне базы данных
    • Проведен забавный Windows-ненавистнический рефакторинг в тестах: только для Windows отключили два теста, Http2RSTFloodProtectionTest и CustomManifestArgumentsTest, потому что они нестабильно работали при создании нескольких стримов в рамках одного соединения. Там же отключили аннотацию JUnit @TempDir в классе RestClientCDIDelegateBuilderTest, потому что это почему-то плохо работает на CI/CD. Виновата ли винда или руки — вопрос открытый :)
  • Связанная с Quarkus новость: вышел JobRunr 6.3.3

    • JobRunr — библиотека для фоновой обработки, распределенная и использующая персистентное хранилище данных
    • Ченжлог
    • Реализовали отдельные конфигурации для build time и runtime в Quarkus
    • Исправили проблему неправильных имен. Раньше, вместо изначального имени, в Quarkus использовались синтетические классы, получаемые через ClientProxy. Из-за этого не загружались бины. Теперь загружаются.
  • Вышел Apache Tomcat версий 11.0.0-M14, 10.1.16, 9.0.83, 8.5.96

    • Apache Tomcat — наиболее дефолтный в мире сервлет-контейнер, которым под капотом пользуется половина фреймворков в мире, и который может работать как самостоятельный сервер
    • Добавлена проверка, что IOException при чтении запроса всегда запускает обработку ошибок, вне зависимости от того, хочет ли пришложение обрабатывать эту ошибку
    • Починили Tomcat Connector, который отказывался принимать новые соединения или приводил к падению JVM при релоаде конфигурации TLS через TLSCertificateReloadListener
    • StatusManagerServlet научили отдавать статистику в JSON
    • Версию 11.0.0-M14 научили использовать Foreign Function & Memory API вместо старого Tomcat Native. Поддержка OpenSSL включается добавлением класса OpenSSLLifecycleListener к элементу Server. И работает это, конечно, только на версиях Java 22 и старше.
  • Вышла Mojarra 4.0.5

    • Mojarra — реализация спецификации Jakarta Faces. Mojarra 3.0 считается легаси, 4.0 — текущей реализацией, 5.0 — находится в разработке
    • Ченжлог
    • Отменили рефакторинг: переместили пере-инициализацию Weld из класса ConfigureListener назад в родной FacesInitializer из-за проблем с обработкой исключений
    • Поправили несовпадение между спецификацией и реализацией константного поля jakarta.faces.WEBAPP_CONTRACTS_DIRECTORY, объявленного как WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME в классе ResourceHandler
    • Чтобы починить UnsupportedOperationException в getExceptionHandler() (внутри InitFacesContext) добавили новый класс ExceptionHandler
  • Вышла Piranha 23.11.0

    • Piranha — набор контейнеров, которые позволяют распилить Jakarta на куски и положить в контенер только нужные компоненты, а не всю Jakarta-помойку, состоящую из десятков спецификаций и реализаций. Этим уменьшается размер контейнера, потребляемая им память и другие ресурсы
    • Ченжлог
    • Добавлена начальная поддержка Coordinated Restore at Checkpoint (CRaC) в Piranha Core Profile
    • Со странички на GitHub поудаляли ссылки на метрики типа: Maintainability, Lines of Code, Code Coverage, Code Smells. Зачем бы это?
  • Вышел Eclipse Vert.x 4.5.0

  • Вышли обновления Project Reactor

    • Project Reactor — библиотка для реактивного программирования с использованием спецификации Reactive Streams, позволяющая создавать неблокирующие приложения для JVM
    • Project Reactor 2023.0.0, ченжлог. В основном, обновления зависимостей
    • Project Reactor 2023.0.13, ченжлог. В основном, обновления зависимостей

Тестирование

  • Обновились Testcontainers for Java 1.19.2

    • Testcontainers for Java — библиотека для JUnit, позволяющая быстро поднимать временные экземпляры баз данных, браузеров для Selenium и всего остального, что запускается в Docker и полезно в целях тестирования
    • Для native-image включены аргументы --enable-http и --enable-https для HttpWaitStrategy
    • Новый shutdown hook для отправки SIGTERM в Moby Ryuk чтобы отрубаться раньше знаения в 10 секунд по-умолчанию
    • Поддержка Elasticsearch в виде образа с DockerHub
  • Вышел Arquillian 1.8.0.Final

    • Arquillian — библиотека для тестирования Java-микросервисов
    • Починили утечку в RemoteExtensionLoader
    • Обновили Jetty 8.1.2 -> 9.4.51, чтобы пофиксить недавние проблемы с безопасностью

Разное

  • Вышел Apache Camel 4.2.0

    • Apache Camel — один из старейших и жирнейших фреймворков для интеграции всего со всем
    • Ченжлог. Куча фиксов, обновления зависимостей, документации и прочая банальщина
    • Добавили поддержку OAuth 2.0, через Camel HTTP
    • Добавили поддержку автовайринга Spring с помощью аннотации @Primary, через Camel Spring
    • Появилась возможность выбирать: использовать ли в Micrometer старые имена, или подключиться на новые конвенции, через Camel Micrometer
  • Вышли релизы Micrometer Metrics

    • Micrometer — фасад для обсервабилити, которым пользуется большинство популярных инструментов в этой области
    • Micrometer Metrics 1.12.0, version 1.11.6, version 1.10.13, version 1.9.17
    • Micrometer Metrics version 1.2.0, version 1.1.7, version 1.0.12
      • Класс SpanTagAnnotationHandler сделали опциональным, чтобы фреймворкам удобно было это сочетать с TimedAspect
      • Появился новый метод getDuration() в интерфейсе FinishedSpan
      • Абстракции HTTP-инструментации объявлены устаревшими и стали первыми кандидатами на удаление. Принято решение больше не предоставлять абстракций поверх транспортов, во всех инструментирующих проектах

Очумелые ручки

  • Вышла новая версия Penna 0.7.1
    • Penna — легковесный и быстрый JSON-логгер для JVM с фасадом slf4j, который пишет структурные логи в stdout
    • Заявлена поддержка Virtual Threads и JDK 21
    • Блогпост о том, как автор мучился с Virtual Threads
    • GitHub


Не забывайте подписаться на наши ресурсы, там есть ништяки:

  • CodCraft - Youtube-канал от автора этого гайда
  • Оправдания от Олега - Telegram-чат автора (общий, про всё на свете)
  • Javawatch - Telegram-канал про Java
  • Telegram-канал Failover Bar - единственный в Санкт-Петербурге (а может, и в России вообще) бар для разработчиков. Мы здесь постоянно встречаемся и разговариваем про Java.