Блог создается при поддержке Failover Bar и Anarchic Pro

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

November 13, 2023 . 8 минут на чтение статьиЭта неделя ||| в мире Java ||| (13 ноября)

Если вам лень читать три тысячи тредов в рассылке OpenJDK и ленты с новостями сотен обновлений фреймворков, то этот дайджест - для вас.

Javawatch

  • Четверг - митап "Цифровая кафедра" КНИТУ-КАИ в Казани.
    • Олег: Java 21 (как для Joker, но в лайтовом формате)
    • Никита Соболев: 4 уровня знания языка
    • Иваном Глушков: OpenSource и ИИ
    • Айрат Хасьянов: организатор
  • Пятница - Цифротех
    • 10-минутный питч Axiom JDK
    • Рядом были такие ребята как Positive Technologies, Yadro, Ростелеком
    • Будем делать подкаст с Гвардейцами Позитива
  • Суббота - превью доклада на HighLoad
    • Тема: как разрабатывается Java.
    • Структура проекта OpenJDK, путь коммитера, популярные проекты, разбор контрибьюшенов.
    • Конечно же, пропиарить Хабр, как лучшее место общения про Java на русском языке.
  • Суббота - встреча мобильщиков, на который приехали популярные блоггеры Mobile Developer (в миру Алексей Гладков, 43.5 тысячи подписчиков на YouTube) и Android Broadcast (в миру Кирилл Розов, 22 тысячи подписчиков на YouTube). С меня была видеозапись интервью на 5 человек. Сам я хотел тоже напроситься, но потом понял, что уже совсем неадекватен, когда попытался подключить микрофон Blue Yeti Pro через micro HDMI.

+ Статья Helidon 4 вышел, а никто и не заметил, дабы почтить работу Мити Александрова.

Записи будут выкладываться по мере того, как их разрешают выкладывать организаторы, а я их успеваю редачить и заливать на YouTube.

Неделя на Хабре

  • Java Digest #6 / @evertimes x TINKOFF. Отличный дайджест со ссылками на видео и статьи. Вообще никак не пересекается с этим.

  • Присматриваемся к Kafka tiered storage / @mikeGolovanov. Эпохального размера гайд. В нем подробно рассказывается, что такое tiered storage и зачем это Кафке (в том числе то, что она не является полнофункциональной). Показана архитектура и основные компоненты. Дальше следует пример, в котором разворачивается однонодовая Кафка, поднимается Remote Storage Manager для работы с локальной файловой системой, и настраивается миллиард файлов конфигурации. Дальше создаем топик, тыкаем в него палочкой и осторожно наблюдаем работу tiered storage. Судя по "итогам", это была только присказка, а сказка будет впереди, в следующем мега гайде.

  • Инициализация WebSocket-клиента в автотестах на Java cо Spring Boot Starter WebSocket / @valeryvasilyev. Автор рассказывает свой опыт прикручивания библиотеки Spring Boot Starter Websocket к проекту автотестов на Java.

  • Введение в Apache Flink: осваиваем фреймворк на реальных примерах / @appp_master x МТС. Это начало цикла статей от Александра Бобрякова - техлида в команде МТС Аналитики, которая занимается Real-Time обработкой данных. Подробно рассказывается архитектура Flink, основы high availability и чекпоинтинга, совместимость состояний. Это может быть полезно любому Spring-разработчику, а для Flink-джунов естьпримеры стандартных ошибок и пути их решения.

  • Решение задач Yandex Cup 2023 на Java, часть 1 и часть 2 /@AndanteMQ. В первой части статьи была обширная дискуссия. Вторая статья оказалась просто заминусованной. Возможно, потому, что решение в ней оказалось неправильным. Но это по данным единственного комментария. Можно заглянуть внутрь и восстановить справедливость.

  • Helidon 4 вышел, а никто и не заметил / @olegchir/javawatch x AxiomJDK. Вышел самый быстрый на свете Java-фреймворк, который может составить конкуренцию Spring Boot, а никто и не заметил. А между прочим, его не последние люди делали, годами. Нужно исправлять эту ситуацию и рассказывать про Helidon больше. Эта статья построена на офциальном анонсе и исследовании перформанса от Мити Александрова.

  • Гайд по авторизации в Micronaut / @jz36 x X5Tech. Это продолжение предыдущей статьи про процесс аутентификации в Micronaut. Аутентификация без авторизации мертва, и в этом гайде нам рассказывают, что же делать. Коротко, по делу, с примерами. Бери и делай.

  • Пишем минимальный ActivityPub-сервер с нуля / @grishkaa. Что вообще такое ActivityPub, что должен уметь сервер для участия в федивёрсе, и как всё это реализовать (море JSON-ов и ссылок на дополнительное чтение и готовые проекты).

  • Цикл постов про Keycloak. Часть вторая: Контроль доступа на уровне приложения / @MGalaktionov. Супер короткое продолжение первой части. Заканчивается всё шок-контентом: видосом и плачущими кошаками и заметкой, что в конечном итоге было принято решение оставить ABAC на стороне приложения, а Keycloak использовать только для Identity пользователей.

  • Ускоряем запуск Spring Boot-приложений в контейнере / @MaxRokatansky x OTUS. Это рассказ про то, как вместе с Java и Spring Boot использовать технологию Linux Checkpoint/Restore in Userspace (CRIU), позволяющую во время выполнения делать снапшоты состояния процесса. Кстати, у нас в Axiom JDK тоже есть реализация CRaC (Coordinated Restore at Checkpoint), но мы пока не делали громких анонсов. Когда-нибудь напишу про это отдельно.

  • Предыдущий дайджест за 3 ноября. Как видите, я уложился в неделю! Учусь вести себя дисциплинированно и писать каждую неделю, но это очень, очень, очень сложно. Ради написания этого поста (и нескольких других вперед на неделю) я пропустил первый день конференции PiterPy... и кажется, это того стоило.

Новое в рассылке OpenJDK и JEP-ах

  • [panama] JEP 460: Vector API (Seventh Incubator): перешел в статус targeted для JDK 22. Раньше MemorySegments работали только поверх массива байтов, теперь - поверх массива любого примитивного типа. То есть, они до-реализовывают те функции, которые были временно убраны на предыдущей итерации.

  • [abmer] Новый кандидат JEP: 463: Implicit Classes and Instance Main Methods (Second Preview).

    • Позволяет сразу писать main-метод, без объявления класса. Нужно новичкам и для быстрых прототипов.
    void main() {
        System.out.println("Hello, World!");
    }
    
    • Изменения:
      • Решили отказаться от хитрой инструментации кода, и сказать на уровне языка, что файл без определения класса внутри него является объявлением неявного класса. Имя такого класса выбирается системой (компилятором/рантаймом).
      • В предыдущей версии пропозала, предлагалось выбирать правильный main-метод сложным способом. Новый алгоритм проще: если есть метод main с аргументом типа String[], то вызывается он. Иначе вызывается main без аргументов. Это позволяет решить неоднозначности: класс не может одновременно иметь статический метод и метод экземпляра с одним и тем же именем и набором аргументов.
    • Ссылка на JEP.
    • Обсуждение
  • [abmer] JEP 459: String Templates (Second Preview): перешел в статус proposed to target для JDK 22.

  • [abmer] Ответ Гёца, почему в String Templates используются обратные слеши (\{...}) вместо нормальных ${...}. Вкратце, им так проще: в джаве уже есть механизм эскейпинга через \, и зачем придумывать еще один? Тем более, что в Swift этот прием сработал.

  • [abmer] Интересный случай боксинга switch + null:

    Byte y = null;
    try {
        switch (y) {
            case byte x: System.out.println("converted");
            default: System.out.println("not converted");
        }
    } catch (NullPointerException ex) {
        System.out.println("Threw exception");
    }
    

    Здесь вылетит ошибка "threw exception", а почему - отвечает Гёц.

  • [loom] Обсуждение производительности поллера. Poller используется только для поллинга событий и парковки-распарковки виртуальных тредов. Но чтение и запись в буфер делаются через сами виртуальные треды, которые могут выполняться любым платформенным тредом. Возникает вопрос, не просаживает ли это преформанс, потому что теряется локальность данных. Нельзя ли делать все сетевые операции внутри платформенного треда, а в виртуальных тредах выполнять только пользовательский код (когда все данные для него уже готовы).

  • [leyden] Пулл-риквест прототипа AOT API для CDS.

Тулинг

  • IntelliJ IDEA 2023.3. Полная поддержка Java 21 и море фиксов.

  • Первый релиз-кандидат Gradle 8.5.0

    • Позволяет работать с JDK 21 (раньше были проблемы с зависимостью на устаревший Kotlin)
    • Улучшения в Kotlin DSL
    • При первом использовании, на треть быстрее, чем Gradle 8.4
  • JDKMon 17.0.81. Утилита JDKMon напина Герритом Грюнвальдом из Азула, и позволяет качать и обновлять установленные версии JDK. Теперь информацию о JEP-ах можно открывать прямо из JDKMon в браузере, а информация про количество модулей и размер на диске отображается в окне подсказки.

  • Eclipse JKube 1.15. Это такая коллекция ништяков, которая позволяет билдить приложения через Docker/JIB/S2I, и генерить ямлы для развертывания в Кубе и Опеншифте, пользуясь набором библиотек и плагинов для Maven/Gradle. В свежей версии:

    • Поддержка Spring Boot 3 + Native Image
    • Helm values.yaml fragments
    • Обновление базовых образов
    • Тонна багфиксов
  • Wildfly 30 обновлен до Java 21 и Jakarta 10. Подробная разбивка по Core/Web/Micro-профилям есть в релиз ноутах.

Spring

Остальное

  • Quarkus 3.5.1 и 3.2.8. Сплошные багфиксы, из интересного - починка уязвимости CVE-2023-5720: через плагин Gradle утекали данные о переменных окружения.

  • Apache Camel 3.14.10 - патч для LTS-версии Верблюда. Одновременно вышел Camel Quarkus 3.2.2, чтобы держать зависимости синхронизированными.

  • JHipster 8.0.0

  • Grails 6.1.0

  • Micronaut Core 4.1.11

  • EasyMock 5.0.1, 5.1.0, 5.2.0

Облака

  • Новая распределенная система обучения нейронок Gemini от AWS, которая позволяет быстро восстанавливаться от ошибок с помощью чекпоинтинга в оперативной памяти

  • Новые фичи Azure Cosmos DB

  • Новые уровни цен в Azure

Очумелые ручки

  • Koncierge 0.0.1 ALPHA - ты описываешь структуру проекта высокоуровневым Java-кодом, после чего генеришь из этого ямлы для куба.

  • Свежая версия Jactl 1.3.0 - скриптового языка для Java-приложений реального времени (sic!). Таких как игровые движки, движки баз данных или карточный процессинг. Никогда не блокирует ивент луп, синтаксис - Java/Groovy со флёром Perl, чекпоинтинг и восстановление состояния после падения (кто сказал Эрланг?), лицензия Apache 2.0.

  • Jailer Database Tool v15.3 - довольно крутая графическая утилита для просмотра реляционной базы данных и вычленения из нее кусков, которые полезны для локальной отладки. Включая топологическую сортировку, переход по реляционым связям, и тому подобное. Пять тысяч коммитов на Гитхабе, 104 форка, 2.5 тысячи звезд.



Не забывайте подписаться на наши ресурсы, там есть ништяки:

  • CodCraft - Youtube-канал от автора этого гайда
  • Оправдания от Олега - Telegram-чат автора (общий, про всё на свете)
  • Javawatch - Telegram-канал про Java
  • Telegram-канал Failover Bar - единственный в Санкт-Петербурге (а может, и в России вообще) бар для разработчиков. Мы здесь постоянно встречаемся и разговариваем про Java.