Эта неделя в мире Java (3 ноября)
Эта неделя на Хабре
Трейсы в 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
Статьи:
Релизы:
Альфы, беты, кандидаты:
Веб и 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).
Туториалы и статьи
Ограничения производительности 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.
Обсуждения
Подписывайтесь на два моих Telegram-канала:
⇛ Javawatch. Анонсы по Java: новости, митапы.
⇛ Откровения от Олега. Личный канал + чат практически без цензуры, где можно встретить ребят типа Баруха и всё это обсудить.