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

e6feab998be5a6069e7a095318f112c8.jpg

Javawatch

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

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

  • Мой доклад «Как создается Java» прошел ревью у Гриши Петрова @grigoryvpp) и официально proposed to targettargeted, 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 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 ноября

Тулинг

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: новости, митапы.
⇛ Откровения от Олега. Личный канал + чат практически без цензуры, где можно встретить ребят типа Баруха и всё это обсудить.

© Habrahabr.ru