Всем привет! ? ? ? ? Мы — Java-разработчики Т-Банка: Андрей, Арсений, Константин, Константин и Роман. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся ими со всем сообществом.
С Новом годом, дорогие читатели! Надеемся, праздник прошел весело и без последствий ? В этом выпуске: Spring Cloud 2024.00, ранние версии JDK 24 и 25. Spring, Micronaut и Quarkus тоже не забыли обновиться. Не забудьте посмотреть про боли в PostgreSQL, целых два выпуска Java 24 Newscast и про великий Java рефакторинг, Project Valhalla. Почитайте целый набор статей про вызов внешних функций и доступ к Memory API. А в самом конце оторвитесь под рок-хит, написанный на Java, и вспомните английский алфавит с помощью Java-аннотаций.
Немного о том что мы сделали мы за 2024 год:
написали 12 дайджестов
обозрели 2 релиза Java
рассказали про 51 JEP
количество статей, видео и других материалов, которые мы нашли, даже посчитать не получилось
Немного о том что сделали наши читатели за прошлый год:
53,6К человек почитало нас в прошлом году
335 раз наш дайджест сохранили в закладки, надеемся что вы достали его оттуда
207 раз мы получили оценку «Нравится»
Горячие JEPы
JEP draft: Remove the Terminally Deprecated Applet API предлагает удалить устаревший и более не поддерживаемый API для апплетов Java. Поскольку современные браузеры и текущие версии JDK не поддерживают апплеты, а инструмент appletviewer удален в JDK 11, сохранение этого API стало бессмысленным. Предлагается удалить весь пакет java.applet и связанные с ним классы в других пакетах. Это изменение не должно существенно повлиять на приложения, так как API для апплетов уже давно не используется.
Свежие релизы
Oracle Labs выпустила версию 0.10.4 Native Build Tools — проекта GraalVM, содержащего плагины для взаимодействия с GraalVM Native Image. В этом выпуске добавили важные улучшения: обеспечение потокобезопасности для accessFilter входного потока, определенного в классе AgentConfiguration, а еще — улучшения в создании SBOM для Native Image. Подробная информация доступна в журнале изменений.
Вышел Spring Cloud 2024.0.0 с кодовым названием Moorgate. Этот релиз включает исправления ошибок и обновления для списка подпроектов:
Spring Cloud Kubernetes 3.2.0
Spring Cloud Function 4.2.0
Spring Cloud OpenFeign 4.2.0
Spring Cloud Stream 4.2.0
Spring Cloud Gateway 4.2.0
Выпуск основан на Spring Boot 3.4.0. Подробнее можно прочитать в официальном блоге Spring.
IBM выпустила версию 24.0.0.12 Open Liberty, которая содержит:
Поддержку MicroProfile 7.0.
Улучшенную обработку SameSite и корректную поддержку SameSite=None для cookies.
Исправление уязвимости CVE-2024-7254, связанной с модулями grpc-1.0 и grpcClient-1.0, предотвращающее возможность повреждения SGROUP-тегов при обработке ненадежных данных Protocol Buffers.
Более подробная информация доступна на Open Liberty Blog.
Вышла версия 3.17.3 Quarkus, в которой обновлены зависимости и исправлены проблемы, включая:
NullPointerException из метода mappingToNames() класса BuildTimeConfigurationReader, вызванный SmallRye Config PropertyName.
Решение регресса времени запуска в консоли JLine при использовании JDK 23 и JDK 24 путем добавления флага -Djdk.console=java.base.
Подробности можно найти в Quarkus Blog.
Apache Camel 4.9.0 включает исправления ошибок, обновления зависимостей и новые функции, такие как:
Поддержка OAuth2 для кэширования и обновления токенов в компоненте Camel HTTP.
Миграция Smooks Camel Cartridge в основную кодовую базу.
Дополнительная информация представлена в примечаниях к выпуску и на странице «Что нового».
Ранние версии JDK 24 и JDK 25 доступны для тестирования по следующим ссылкам:
Выпущены Spring Framework 6.1.16 и 6.2.1, содержащие:
Обновление класса UndertowHttpHandlerAdapter для асинхронной обработки запросов.
Добавление аннотации @Contract к методу isEmpty() класса ObjectUtils.
Эти версии войдут в предстоящие релизы Spring Boot 3.4.1 и 3.3.7. Подробности можно узнать в примечаниях к выпуску.
Вышла версия 4.7.2 Micronaut Framework, которая содержит:
Micronaut Core 4.7.8.
Исправления ошибок и обновления для модулей Micronaut GCP, Micronaut Data, Micronaut Test и Micronaut Oracle Cloud.
Подробности доступны на официальном сайте Micronaut.
Вышел бета-релиз Hibernate ORM 7.0.0. Beta3, который содержит:
Миграцию на спецификацию Jakarta Persistence 3.2 для Jakarta EE 11.
Данная версия теперь основывается на JDK 17.
Улучшенные проверки модели домена.
Переход от Hibernate Commons Annotations (HCANN) к новому проекту Hibernate Models.
Подробности о миграции можно найти в руководстве по миграции и списке изменений.
Главные новости
«Группа Астра» представила новую открытую среду разработки OpenIDE, разработанную совместно с Haulmont и Axiom JDK. Она основана на IntelliJ IDEA Community, но избавлена от проприетарных компонентов и размещена на российских серверах. OpenIDE поддерживает Java и Kotlin, планируется интеграция с Go, TypeScript и Rust. Релиз намечен на март 2025 года. Среда нацелена на снижение санкционных рисков и удобство работы российских разработчиков.
Announcing Spring AI MCP: A Java SDK for the Model Context Protocol
Анонсирован Spring AI MCP. Это Java SDK, которое будет частью экосистемы Spring и привносит поддержку Model Context Protocol. Этот протокол призван стандартизировать то, как приложения предоставляют контекст для LLM.
Интересные видео
Михаил Жилин — Как PostgreSQL может сделать больно, когда не ожидаешь? Михаил очень подробно рассматривает три разные неочевидные проблемы, которые могут возникнуть при использовании PostgreSQL. Особенно если речь идет о высоконагруженных системах. Думаю, лучше всего содержание доклада отобразит мем
Владимир Плизга — Путеводитель по анализу памяти JVM-приложений Задача — приложение выдает OOM на запрос. Как понять, в чем проблема? Владимир сначала дает теоретическую базу, необходимую для эффективного анализа, а затем демонстрирует, как с помощью Eclipse MAT и плагина C SQL можно диагностировать проблему. Шаг за шагом мы приходим к решению, попутно узнавая возможности этих инструментов. В конце есть еще несколько полезных советов для различных ситуаций. Доклад очень практичный, однозначно рекомендуется к просмотру.
Java 24 Language & API Changes - Inside Java Newscast #81
Java 24 Performance Improvements & Deprecations - Inside Java Newscast #82 Уже традиционный новогодний Inside Java Newscast, посвященный тому, что нас ждет в новой версии Java. Причем аж в двух эпизодах. Мы уже делали обзор JEP-ов в прошлом выпуске, но здесь, в видеоформате, многие аспекты становятся куда понятнее.
Valhalla - Java's Epic Refactor Слышали про проект Valhalla и всегда хотели узнать, что это такое, но лень читать статьи? Тогда это видео для вас! В нем один из архитекторов Java — Brian Goetz — подробно расскажет, что такое Valhalla, как проект устроен и какой прогресс у него был и будет. Для читателей, которые забыли, что такое проект Valhalla, напомним, что Valhalla — это долгосрочный проект в рамках Java, направленный на улучшение производительности и гибкости языка, особенно в контексте работы с памятью и типами данных. Основная цель проекта — добавление новых типов данных, которые позволяли бы работать с более низкоуровневыми, но эффективными конструкциями.
Полезные статьи
The Foreign Function and Memory API — вышел интересный набор гайдов про вызов внешних функций и API памяти, разбитый на 6 частей, немного слов о каждом.
Access Off-Heap or On-Heap Memory with Memory Segments — туториал объясняет, как использовать API MemorySegment и Arena для работы с памятью вне кучи в Java. Это позволяет ускорить доступ к данным и эффективно взаимодействовать с нативным кодом, предоставляя контроль над выделением и освобождением памяти. Полезно для задач, где важна производительность или требуется работа с C-библиотеками.
Invoke a C Library Function объясняет, как вызвать функцию из C-библиотеки, например strdup, в Java с использованием Foreign Function and Memory API. Это полезно для взаимодействия Java с нативным кодом, особенно в высокопроизводительных системах или при работе с существующими C-библиотеками.
Access Native Data Types рассказывает, как с помощью Java Foreign Function & Memory API можно описывать и работать с нативными структурами данных, такими как C-структуры. Приводятся примеры работы с MemoryLayout и VarHandle для управления полями структуры, выполнения операций с ними и использования памяти эффективно, включая обработку массивов и выделение слайсов.
How to Handle a Call from Native Code Back to Java Code объясняет, как из Java вызывать функции на нативных языках, которые требуют указателей на функции, таких как qsort. Используется механизм upcall stub, чтобы передать Java-метод в качестве указателя функции. Приведен пошаговый пример: создание метода для сравнения элементов, связывание с функцией qsort, создание указателя функции из Java-метода и выполнение вызова qsort. В конце показан полный рабочий пример сортировки массива.
Troubleshoot Calls to Native Library Functions — статья описывает работу с функциями нативных библиотек в Java через API Foreign Function & Memory (FFM). Рассматриваются вызов функций, возвращающих указатели (например, malloc), управление памятью с помощью MemorySegment.reinterpret, обработка ошибок через errno и использование ограниченных методов, которые требуют специальных настроек JVM для безопасного доступа.
Generate Java Bindings with Jextract объясняет, как использовать инструмент jextract для создания Java-обвязок для нативных библиотек, написанных на C или C++. В ней описывается, как jextract обрабатывает заголовочные файлы и генерирует Java-код, который взаимодействует с нативными библиотеками через API для работы с внешней памятью и функциями (FFM API), представленный в JDK 22. Руководство проводит пользователя через процесс установки и запуска jextract с нужными параметрами командной строки, а также показывает, как интегрировать сгенерированный Java-код в проект, используя пример отрисовки чайника с помощью библиотеки freeglut. Также рассмотрены расширенные функции, такие как фильтрация символов и трассировка нативных вызовов.
Task schedulers in Java: modern alternatives to Quartz Scheduler рассказывает о современных способах планирования задач в Java. Они сравниваются с проверенным временем и достаточно старым и имеющим ряд недостатков Quartz Scheduler.
Efficient Distributed Unique Timestamp Identifier Generation — автор рассказывает о способе генерации уникального распределенного идентификатора, основанного на времени, с использованием чистой Java. Хотя автор и использует достаточно наивный подход, но вполне рабочий. А судя по бенчмарку JMH, приведенному к статье, этот подход оказывается примерно в пять раз производительнее, чем UUID.randomUUID().
Вся правда о @Subselect: преимущества, недостатки и альтернативы в Hibernate — вводная статья о механизме Subselect в hibernate, позволяющем смаппить результат запроса в неизменяемую сущность.
Are virtual threads making reactive programming obsolete? — большая хорошая статья, посвященная отличию подходов многопоточного программирования в Java. Автор рассказывает про классический блокирующий подход и его проблемы, про реактивное программирование, которое тяжело писать, тяжело читать, тяжело поддерживать, и, наконец, про виртуальные потоки, которые призваны решить эту проблему. API виртуальных потоков более читаемое, при этом блокировки им не страшны, так как платформенный поток всегда занят. Не забыли рассказать и про проблемы со ThreadLocal в виртуальных потоках.
Любопытные подкасты
Члены программного комитета JPoint и Jocker обсуждают тренды Java-мира исходя из фидбэка по конференциям. Особенно полезно послушать тем, кто планирует стать спикером и хочет понять, какие темы сейчас наиболее востребованны и интересны.
Просто интересное
NANOWAR OF STEEL - HelloWorld.java (Source Code Video) | Napalm Records Метал-группа Nanowar Of Steel исполнила текст программы HelloWorld. А теперь все вместе!!! System.out.println(“Hello, World!”); ???
Константин Максимов
После определенных JEPов текст песни сильно сократится ?
ABC: Learning The Alphabet with Java Annotations — шуточная и веселая статья, в которой с каждой буквой алфавита сопоставлена Java-аннотация. Можете зайти и проверить, знаете ли вы их все.
Post-Quantum Cryptography in Java — в прошлом дайджесте мы писали, что в Java направлены пара JEP, связанных с квантовыми алгоритмами. И вот вышла статья, в которой автор рассказывает о причинах появления этих JEP. Сейчас квантовые компьютеры уже реальность и предоставляют угрозу для текущих алгоритмов шифрования. Пока эта угроза далеко в будущем, но правительство США постановило, что компьютерные системы, обрабатывающие конфиденциальную информацию, должны использовать алгоритмы защиты, устойчивые к квантовым атакам. Как видно, экосистема Java к этому готовится.
Присылайте материалы, если встретили что-то интересное: опубликуем в следующем выпуске.
Спасибо, что читаете нас! Ждем обратную связь в комментариях. Увидимся через месяц ?