Эта неделя в мире Java (21 ноября)
Javawatch
Договорились делать с Абашевым выпуски «Полезняшек от Разбора Полетов» в формате подкаста и дайджеста. Следующая планируемая запись — этот четверг. Будем держать в курсе
Договорились сделать мастер-класс по написанию расширений для JUnit с Ильёй (автор сообществ «tg:@sreda_razrabotki» и tg:@kydavoiti). С меня — площадка Failover Bar и обзор на Хабр, с Ильи — провести мастер-класс в рамках его сообщества «Среда Разработки». Подробности в анонсе в его Telegram-канале
Мой доклад «Как создается Java» прошел ревью у Гриши Петрова @grigoryvpp) и официально proposed to target ➔ targeted, HighLoad 2023, 28 ноября в 17:00 на треке OpenSource
Наши подкасты
Илья Старченко из pro.jvm засветил хороший подкаст про Loom
Эта неделя на Хабре
Разработка высоконагруженного игрового WebSocket сервера на Java, Netty с поддержкой BattleRoyale/Matchmaking / @tfkfan
Мощный туториал. Дает понимание, как можно думать о разработке мультиплеера с Java-спецификой
Продолжение предыдущей статьи про разработку браузерки
Серия туториалов «Генерация контрактов OpenApi или прикладной API first» / @Saint_Cheshire
Сквозь дебри разработки, или как я пытался написать приложение / @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 ноября
Тулинг
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
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
Проведен забавный 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-инструментации объявлены устаревшими и стали первыми кандидатами на удаление. Принято решение больше не предоставлять абстракций поверх транспортов, во всех инструментирующих проектах
Очумелые ручки
Кстати, в России у нас есть специальный российский дистриубтив Java: Axiom JDK. Недавно вышла свежая версия Axiom JDK с поддержкой Java 21. Если вы используете Аксиому, попробуйте запустить на ней свежий Spring и поделитесь результатами!
Подписывайтесь на два моих Telegram-канала:
⇛ Javawatch. Анонсы по Java: новости, митапы.
⇛ Откровения от Олега. Личный канал + чат практически без цензуры, где можно встретить ребят типа Баруха и всё это обсудить.