Эта неделя в мире Java (3 ноября)
November 03, 2023 . 7 минут на чтение статьиЕсли вам лень читать три тысячи тредов в рассылке OpenJDK и ленты с новостями сотен обновлений фреймворков, то этот дайджест - для вас.
Эта неделя на Хабре
- Трейсы в Spring Boot 3 с использованием Zipkin и Kafka в качестве транспорта. Конкретная техническая инфа, как это делать на Spring Boot 3, с кучей листингов кода, вплоть до содержимого pom.xml. Написано по опыту использования в Альфа Страховании: им нужно оформлять полисы по REST API.
- Жук, нумерология, хеш или ничо? Оптимизация работы с путями. Автор делится опытом оптимизации задачи по редактированию и поддержке в актуальном состоянии огромного количества данных типа "куда направить товар". Классическая задача программирования на практике логистики компании CDEK. SpringBoot и PostgreSQL.
- Байт-код — это просто! Как сделать DI по-настоящему быстрым. Два года назад в Яндекс Маркете начали делать свой легковесный DI-фреймворк Scout с выразительным Kotlin DSL. Он не генерирует код, а делает всю работу в рантайме. Переход с Dagger 2 сильно замедилил их приложение. Автор рассказывает опыт, как применение байткода всех спасло и сделало перформанс не хуже, чем в Dagger 2. Конкретные примеры кода.
- @Scheduled + @Async в Spring Boot. Зачем эти аннотации ставят вместе, в каких потоках происходит работа программы и как делать правильно.
- Java Unsafe API для низкоуровневого манипулирования памятью. Хороший гайд по Unsafe API, написанный понятным языком.
- Свежий подкаст Cloud.ru Tech про Java в 2023 году - выложен на YouTube.
Российская специфика:
- Жилье в 500м от сетевых продуктовых магазинов в Москве. Поиск удобных мест для ежедневной жизни и похода в продуктовый магазин, с OpenStreetMap, графическими картами и реализацией на Java.
- Создание сервиса авторизации через систему ЕСИА. Статья нужна тем, кто делает российские сервисы с использованием ЕСИА (единая система идентификации и аутентификации). Подтверждённая учётная запись в ЕСИА — своего рода электронный паспорт, с помощью которого можно получать доступ к разным сайтам, порталам и системам, не используя дополнительные средства регистрации и авторизации, например, логин и пароль. Написано по опыту работы в БФТ-Холдинге.
- На что способен КриптоПро JCP? Туториал по валидации отсоединенной электронной подписи. КриптоПро SVS - обертка над КриптоПро CSP. Веб-сервис REST и SOAP для проверки подписи, проверка валидности и квалифицированности сертификата. Yandex Cloud перестал поддерживать виртуальные машины Windows, и автору пришлось крутиться. Статья по опыту работы в SimbirSoft.
Митапы
Провели очередной Javawatch в Питере, в Failover Bar. В честь недели Хэллоуина обсуждали страшные истории: атаки по GeoIP, dependency confusion в репозиториях пакетов, как Марак сошел с ума и рисовал Залго в консоли, устройство и эксплуатацию Log4Shell, и тому подобное.
IDE и редакторы
-
Spring Tools 4.20.1. Автодополнение Spring Properties для Spring Boot теперь работает в 10(!!!) раз быстрее при первом использовании (так же быстро, как при втором и последующих вызовах дополнения). И другая полировка производительности Spring Boot. Собрали превью-билды для Eclipse 2023-12, который скоро выйдет. Качать здесь.
-
Свежий релиз Eclipse Theia 1.43. Добавили удаленную разработку по SSH (как в VSCode и IDEA). Улучшили поддержку TestControllers (это такое API для тестирования родом из VSCode) - Theia видит наличие в проекте тестов, и позволяет запускать в отдельном UI. Подняли уровень совместимости с плагинами от VSCode до 1.82, включая ленивую загрузку файлов локализации.
-
Свежий EAP IntelliJ IDEA: IntelliJ IDEA 2023.3 EAP 7. По идее, это последний EAP перед выпуском финальной версии (и соответственно, периодом, когда бесплатной Идеи временно не будет и ее придется покупать). Продолжает полироваться плагин для Kubernetes, улучшили автодополнеие статических методов в Java. Улучшили инспекцию по сравнению длины строки с константным числом в Java.
-
Amazon добавил свежие модели Code Llama и Mistral 7b в свой Amazon SageMaker JumpStart. Теперь в один клик можно делать приватные эндпоинты для генерации кода.
Spring
- Статьи:
- Новинки в Reactor Core 3.6.0. Виртуальные треды, улучшенная пропагация контекста, поддержка Multi-Release JAR (MRJ, JEP 238).
- Релизы:
- Альфы, беты, кандидаты:
Веб и Java EE
-
Helidon 4.0.0. Helidon Níma server, поддержка MicroProfile 6.0, побег с асинхронщины на блокирующие API.
-
Eclipse Serializer 1.0 - крутой сериализатор для работы с объектами сложной структуры
-
JHipster Lite 0.46.0 - много фиксов в скриптах и документации. Подробный ченжлог на Гитхабе.
-
Свежий Glassfish 7.0.10 - сервер приложений для Jakarta EE 10
-
Jakarta Data 1.0.0-M1 - BasicRepository с базовыми функциями над сущностями, функции insert и update для CrudRepository, и т.п.
GraalVM
- GraalVM for JDK 21 Community 21.0.1. Фиксы для октябрьского обзора безопасности от Oracle. Новый класс CEntryPointErrors для возврата ошибок при непонятных границах стека, краш при анкоммите неиспользуемой памяти, и краши при использовании ProcessBuilder на Mac. Подробнее здесь.
Тестирование
-
WireMock присоединяется к программе Testcontainers Official Modules Program и объявляет выпуск официального модуля Testcontainers для WireMock. На данный момент этот модуль предлагает реализацию для Java, Go и Python (дальше - больше).
-
WireMock – Stubbing with JSON Mappings - как писать заглушки для HTTP-запросов с помощью WireMock с использованием конфигов в формате JSON.
-
JUnit 5 Watcher Extension - новое расширение JUnit 5, которое собирает подробную статистику о выполнении тестов. Эти метрики крайне полезны для улучшения производительности всей тестовой сюиты.
-
Include Only Relevant Details In Tests как писать тесты так, чтобы их было легко читать. Выбрасывать ненужное!
-
Connecting to Testcontainers Services using Testcontainers Desktop - как подключиться к службе, запущенной с помощью Testcontainers, с использованием приложения Testcontainers Desktop.
-
Simplify Testing Golang Apps with testcontainers-go - использование Testcontainers при написании тестов для приложений на Go. Не совсем Java, конечно, но мы привыкли к Testcontainers в Java, а это не всегда так.
Подкасты
-
Свежий Bootiful Podcast (подкаст главного евангелиста Spring, Джоша Лонга). Гость - основатель GraalVM, Томас Вертингер.
-
И еще один Bootiful Podcast c Крейгом Воллсом, мистером Spring in Action.
-
Создание новых операций со стримами в видеоблоге Николая Парлога. JEP 461 предлагает
Stream::gather
иGatherer
- новую промежуточную мета-операцию, которую можно использовать для реализации всех видов конкретных операций, от старых (таких как map и sorted), до новых (типа flatMapIf и increasingSequence). В этом видео он кодит все эти операции. -
Plants, process and parties - интервью в честь релиза Kubernetes 1.28 aka Planternetes. Гость - Grace Nguyen, который был лидом этого релиза. Хост интервью - Craig Box (VP of Open Source в Kubescape).
-
Java, Microsoft and Software Development with AI - очередной подкаст Adam Bien на airhacks.fm. Время от времени его сайт лежит, это норма.
Туториалы и статьи
-
Ограничения производительности Loom от Адама Варски, разработчика Ox - библиотеки для работы со структурной многопоточностью с го-подобными каналами, которая основана на Project Loom, виртуальных тредах, новой структурной многопоточности (JEP 428), scoped values (JEP 429) и Scala 3. По ходу исследования выяснилось, что Kotlin довольно хорош, и догнать его непросто.
-
Внедряем Виталика!. Статья про то, как внедрять внешнюю информацию в общение с GPT с помощью LangChain4j, на примере работы с постами Виталика Бутерина.
-
Content Negotiation in Practice. Content Negotiation нужен для повышения доступности web API. Цель - согласовать формат для запроса и ответа между сервером и юзер-агентом. Процесс стандартизирован в RFC-9110, который предлагает три шаблона: проактивное (серверное) и реактивное (клиентское) согласование ответа, а также согласование запроса. В статье дается полный, подробный, хорошо продуманный туториал для Spring.
-
Introducing ingress2gateway - свежая статья в блоге Куба про упрощение апгрейдов в Gateway API.
Обсуждения
-
Twitter: Virtual thread supporting vs. Virtual thread-based Microservice framework. В Java 21 добавили виртуальные треды и заявили поддержку, а Helidon 4 на них основывается. В чем разница и что это значит? Тред с картинками.
-
Reddit: Проверка идеи String Template Processors (по JEP430) для SLF4J
Не забывайте подписаться на наши ресурсы, там есть ништяки:
- Откровения от Олега - Telegram-канал автора этого гайда
- Оправдания от Олега - Telegram-чат
- SmallTech Pro - Youtube-канал
- Telegram-канал Failover Bar - единственный в Санкт-Петербурге (а может, и в России вообще) бар для разработчиков. Мы здесь постоянно встречаемся и разговариваем про Java.