Эта неделя в мире Java (21 ноября)
November 21, 2023 . 13 минут на чтение статьи
Все сенсации, интриги, расследования, которые вам нужны 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 target ➔ targeted, HighLoad 2023, 28 ноября в 17:00 на треке OpenSource
-
Подписывайтесь на @javawatch в Telegram, чтобы не пропустить ништяки
Наши подкасты
Илья Старченко из pro.jvm засветил хороший подкаст про Loom
Эта неделя на Хабре
-
- Мощный туториал. Дает понимание, как можно думать о разработке мультиплеера с Java-спецификой
- Продолжение предыдущей статьи про разработку браузерки
-
Серия туториалов "Генерация контрактов OpenApi или прикладной API first" / @Saint_Cheshire
- Гайд по генерации в Spring Boot приложении
- oneOf, anyOf, allOf
- С единственным на данный момент комментарием: "Господи, спасибо тебе за протобаф"
-
Сквозь дебри разработки, или как я пытался написать приложение / @AlexUnderTheLulz.
- Эмоциональный рассказ о том, как ощущается Andoird-разработка на шкуре обычного человека, со скришотами и постмортемом: "Итак, пациент скорее жив, чем мёртв"
-
Добавление micrometer-метрик для взаимодействий по SOAP / @Kinski
- Актуатор уже из коробки предоставляет http_client_requests и http_server_requests по REST. Но для SOAP это не подойдет, и нужно написать свой огород для JAX-WS
-
Две некрофильских статьи про фичи текущего стабильного релиза IDEA / @olegchir
-
Spring и Hibernate простыми словами: обзор для новичков / @ProductStarMain
- Что такое Spring, что такое ORM, что такое Spring Boot и его преимущества. В общем, новичковый туториал
-
Ссылка на предыдущий дайджест в цепочке
Новое в рассылке OpenJDK и JEP-ах
-
Согласно таймлайну, движемся к 7 декабря, которая означает фазу Rampdown Phase One. Это будет форк от мейнлайна openjdk/jdk, фиксить можно будет только текущие P1-P3 баги (и targeted, если есть время). Осталось две недели, часики тикают.
-
[amber] JEP 459: String Templates (Second Preview)
- proposed to target ➔ targeted, 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)
- candidate ➔ proposed to target, JDK 22
- пруф в рассылке
- Фича позволяет не писать класса вокруг main-метода, чтобы новичкам было проще изучать язык, а всем остальным — писать маленькие прототипы
- Завершение сбора обратной связи: 28 ноября
-
[core-libs] JEP 457, Class-File API (Preview)
- candidate ➔ proposed to target, JDK 22
- пруф в рассылке
- Фича позволяет то же самое, что и ASM, но в крайне стабильном виде, пригодном для внутреннего использования в разработке ядра JDK.
- Завершение сбора обратной связи: 28 ноября
-
[amber] JEP 447, Statements before super(...) (Preview)
- candidate ➔ proposed to target, JDK 22
- пруф в рассылке
- Фича позволяет в конструкторах писать код, до вызова
this()
иsuper()
— он не должен ссылаться на инстанс, который создается в этом конструкторе - Изначальная идея и спецификация лежит здесь
- Завершение сбора обратной связи: 22 ноября
-
[hotspot] JEP 423, Region Pinning for G1
- candidate ➔ proposed 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
- Улучшили Kotlin Symbol Processing
- Обновили Kotlin до 1.9.20
- Обновили Netty до 4.1.101
- 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
- Eclipse Vert.x — тулкит для разработки эффективных, параллельных и асинхронных, реактивных приложений для JVM
- Ченжлог
- Устаревшие и удаленные API
- Заявлена поддержка JDK 21 и Virtual Threads
- Реализовано создание динамических SQL-соединений
- Добавлена возможность без перезагрузки сервера ротировать SSL-сертификаты
- HTTP-клиенты и пулы SQL-соединений теперь создаются через паттерн Builder
-
Вышли обновления 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
- Добавлена поддержка Generational ZGC для Jetty 12 в классе JettyConnectionMetrics
- Появился новый класс JmsInstrumentation для реализации обсервабилити по спецификации Jakarta Messaging
- 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
- Адрес: https://github.com/hkupty/penna
- Коммитов: 380
- Звезд: 22
- Форков: 2
Не забывайте подписаться на наши ресурсы, там есть ништяки:
- Откровения от Олега - Telegram-канал автора этого гайда
- Оправдания от Олега - Telegram-чат
- 1red2black - Youtube-канал
- Telegram-канал Failover Bar - единственный в Санкт-Петербурге (а может, и в России вообще) бар для разработчиков. Мы здесь постоянно встречаемся и разговариваем про Java.