Javawatch
Договорились делать с Абашевым выпуски "Полезняшек от Разбора Полетов" в формате подкаста и дайджеста. Следующая планируемая запись — этот четверг. Будем держать в курсе
Договорились сделать мастер-класс по написанию расширений для JUnit с Ильёй (автор сообществ tg:@sreda_razrabotki и tg:@kydavoiti). С меня — площадка Failover Bar и обзор на Хабр, с Ильи — провести мастер-класс в рамках его сообщества "Среда Разработки". Подробности в анонсе в его Telegram-канале
Мой доклад "Как создается Java" прошел ревью у Гриши Петрова @grigoryvpp ) и официально proposed to target ➔ targeted, HighLoad 2023, 28 ноября в 17:00 на треке OpenSource
Подписывайтесь на @javawatch в Telegram, чтобы не пропустить ништяки
Наши подкасты
Илья Старченко из 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 ноября
Тулинг
-
Третий и второй релиз-кандидат 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-мире
-
Появились новые методы конвертации 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"
Заявлена поддержка 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
Заявлена поддержка 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
Коммитов: 380
Звезд: 22
Форков: 2
Кстати, в России у нас есть специальный российский дистриубтив Java: Axiom JDK. Недавно вышла свежая версия Axiom JDK с поддержкой Java 21. Если вы используете AxiomJDK, попробуйте запустить на ней свежий Spring и поделитесь результатами!
Подписывайтесь на два моих Telegram-канала:
⇛ Javawatch. Анонсы по Java: новости, митапы.
⇛ Откровения от Олега. Личный канал + чат практически без цензуры, где можно встретить ребят типа Баруха и всё это обсудить.
Комментарии (4)
maybessss
21.11.2023 10:14+1>> Кстати, в России у нас есть специальный российский дистриубтив Java: Axiom JDK.
Но чтобы скачать его, заполните данные на форме?))olegchir Автор
21.11.2023 10:14Это коммерческий продукт, так что, попробовать его можно или через триал на 3 месяца для некоммерческого использования (который как раз выдают, после заполнения полей в форме). Или у себя на работе, если компания его уже использует. Его могут использовать объекты Критической Информационной Инфраструктуры (банки, государственные услуги, энергетика, медицина...) с требованием на сертификацию по ФСТЭК, так что, если вы работаете в одной из таких компаний, можно поинтересоваться у руководства или девопсов, есть ли у вас лицензии для разработчиков.
AntonSurikov
Круто, что все новости сразу в одной подборке) Оч удобно
olegchir Автор
Спасибо)
Чем дольше откладываешь следующий дайджест, тем больше новостей наваливает. А тут они все с этой Java 21 как с цепи сорвались.
Если честно, пока я эту стену теста дописал, уже жить не очень хотелось)) Но мужик сказал - мужик сделал. Само себя не напишет.