Latest posts

Чашечка Java
22 Sept, 15:17
Как профилировать Java-приложения с JDK Flight RecorderJDK Flight Recorder (JFR) встроен в OpenJDK и записывает события JVM с небольшими накладными расходами. Его можно использовать для постоянного наблюдения за приложением, а собранную телеметрию разбирать при снижении производительности или сбоях в продакшене.Материал показывает, как начать работу с JFR, записать данные и перейти к их анализу. Отдельные сценарии посвящены поиску узких мест, утечек памяти и проблем с потоками. Для долгоживущих Java-сервисов это способ исследовать поведение JVM на данных с работающего приложения.Практические сценарии и демонстрации собраны в материале Inside.java.


Чашечка Java
22 Sept, 10:09
Quarkus 3.31.2: как измерить покрытие runtime-модулей расширенийДо версии 3.31.2 расширение quarkus-jacoco учитывало код из @QuarkusTest, но не покрытие runtime-модулей в QuarkusUnitTest. Именно такие тесты обычно составляют большинство в расширениях. Причина в сборке: Quarkus применяет офлайн-инструментирование JaCoCo к архивам приложения, а runtime-модуль расширения обычно к ним не относится.Теперь артефакты для инструментирования можно явно указать через свойства group-id и artifact-id. Для одного расширения конфигурация добавляется в deployment-модуль, после чего отчёт создаётся автоматически.Для многомодульного проекта статья показывает, как собирать данные всех тестов в общий файл и строить единый отчёт по зависимым расширениям. Это помогает находить непроверенные участки и регрессии до релиза. Готовые конфигурации Maven приведены в руководстве Quarkus.


Чашечка Java
22 Sept, 05:02
В Quarkus 3.37.0 появился новый вход к реляционным даннымЭкспериментальное расширение Quarkus Data Hibernate объединяет работу с реляционными базами в одной зависимости. Оно поддерживает расширенные сущности, репозитории с аннотацией @Repository, блокирующий и неблокирующий режимы, а также запросы на чистом SQL. Реализации репозиториев генерируются при компиляции с проверкой запросов и параметров по модели сущностей.Для новых приложений команда предлагает начинать с Quarkus Data Hibernate. Реактивная работа требует отдельной зависимости quarkus-hibernate-reactive, поэтому состав приложения остаётся управляемым.Panache 1 продолжит работать, планов удалять его нет. Инструменты миграции ещё разрабатываются, так что существующие кодовые базы можно переводить без спешки. Расширение войдёт и в Quarkus 4.0; архитектура и ограничения описаны в блоге Quarkus.


Чашечка Java
21 Sept, 15:15
Spring и Hibernate: как очищать тестовые данные без @DataJpaTestHibernate ORM 6.2 добавил SchemaManager: его метод truncateMappedObjects() очищает все таблицы, связанные с JPA-сущностями. В интеграционных тестах Spring очистку можно запускать в @BeforeEach, а затем заново добавлять исходные записи через TransactionTemplate.Так тесты не приходится оборачивать в транзакцию @DataJpaTest. Иначе тестовый EntityManager остаётся доступен после вызова сервисного метода и может инициализировать ленивые прокси, хотя в рабочей среде они уже вызвали бы LazyInitializationException. Часть SQL-операторов также может не выполниться, а целостность базы останется непроверенной.Очистка в начале теста надёжнее @AfterEach: при сбое или остановке в отладчике завершающий метод может не выполниться. В разборе Vlad Mihalcea есть полный пример с последовательными и параллельными переводами между счетами.


Чашечка Java
21 Sept, 10:08
Как Hardwood ускоряет чтение фиксированных списков ParquetParquet кодирует координаты и векторные представления как списки переменной длины, даже если размер всегда одинаков. При чтении он разбирает признаки пустых значений и границы записей, выделяет массивы и собирает списки заново. Это примерно втрое медленнее плоской колонки.Для готовящегося релиза Hardwood реализовали быстрый путь: читатель проверяет, что страница состоит из списков одной длины без пустых значений, и пропускает реконструкцию Dremel. В тесте с ZSTD списки из трёх элементов читались в 1,1 раза быстрее построчно и в 2,5 раза быстрее по колонкам. Для 768 элементов ускорение достигло 3,7 и 2,5 раза соответственно.В разборе механизма показано, как байтовые шаблоны проверяются пачками и когда включается обычная обработка. Java Vector API оставили возможным следующим шагом, если эта проверка сама станет узким местом.


Чашечка Java
21 Sept, 05:01
Как сборщики мусора JDK связывают память и производительностьJDK предлагает несколько сборщиков мусора с разными характеристиками. При этом у них есть общие архитектурные решения, которые отличают управление памятью в Java от сборки мусора в других языках. Материал объясняет, почему сборщики JDK устроены именно так и как их работа влияет на производительность приложений.Отдельная тема: связь между объёмом RAM и нагрузкой на CPU бывает неочевидной, поэтому рассматривать эти ресурсы нужно вместе. Такой взгляд помогает обсуждать память Java не только через объём занятой RAM, но и через вычислительную цену выбранного подхода.В материале Inside.java также разбирают спорный вопрос: действительно ли Java расходует слишком много памяти или другие языки используют её слишком мало. Полезная проверка предпосылок перед сравнением сборщиков мусора и профилей нагрузки.


Чашечка Java
20 Sept, 15:19
Docker Compose с JDK 26: зависимости в контейнерах, Java локальноВ примере Maven-приложение остаётся обычным локальным процессом, а Postgres 18 запускается через Docker Compose. Версия базы закреплена в docker-compose.yml, порт 5433 хоста связан с портом 5432 контейнера, поэтому JDBC подключается к localhost:5433.Так команда получает одинаковую версию и конфигурацию базы после клонирования репозитория. Контейнер запускается командой docker compose up -d и удаляется через docker compose down, а Java-код можно отлаживать с обычными точками останова без пересборки образа.В разборе Дэна Веги есть полный пример приложения закладок на JDK 26, Maven и JDBC, структура Compose-файла и команды для логов и консоли PostgreSQL.


Чашечка Java
20 Sept, 10:11
Как перевести Dev Services на новый API Quarkus 3.25В Quarkus 3.25 появился новый API для Dev Services. Старый механизм мог запускать сервисы для всех тестов ещё при обнаружении JUnit: в наборах с разными профилями это приводило к нескольким контейнерам, конфликтам портов и лишним расходам.Теперь Quarkus подготавливает сервис при сборке, а запускает после аугментации, до старта приложения. Ядро сравнивает конфигурации, переиспользует экземпляры и управляет их жизненным циклом.Авторам расширений предлагают перейти на owned() и discovered(), передавать сервис через Startable и убрать статические поля. Пользователям миграция не нужна.Чеклист и пример кода есть в материале Quarkus.


Чашечка Java
20 Sept, 05:04
Hibernate 7: как заменить устаревший @GenericGeneratorПри миграции на Hibernate 7 аннотацию @GenericGenerator предлагают заменить метааннотацией @IdGeneratorType. Она связывает собственную аннотацию поля с классом генератора, после чего Hibernate создаёт идентификатор при сохранении сущности.В статье Vlad Mihalcea разобраны два прежних сценария. Для идентификаторов TSID, отсортированных по времени, на поле id ставится @Tsid, связанная с TsidGenerator. Для оптимизатора последовательности pooled-lo используется @SequenceOptimizer. Обе готовые реализации есть в Hypersistence Utils.Для enterprise-кодовой базы это практическая карта миграции: найти применения @GenericGenerator, разделить собственные генераторы и настройки последовательностей, затем перенести каждую группу на соответствующую аннотацию.


Чашечка Java
19 Sept, 20:22
Как собрать движок отказоустойчивых сценариев на Java и SQLitePersistasaurus показывает устройство движка, который сохраняет состояние многошагового Java-сценария. Метод с @Flow задаёт сценарий, методы с @Step обозначают сохраняемые шаги, а SQLite хранит их параметры, статусы и результаты.После сбоя сценарий запускают с тем же UUID. Завершённые шаги получают результаты из журнала, а упавший шаг выполняется повторно. Так приложение не дублирует уже успешные операции, например дорогие и недетерминированные обращения к большим языковым моделям.В разборе Gunnar Morling есть схема журнала и критерий для границ шага: сохранять стоит долгие, дорогие или трудно воспроизводимые операции. Это учебный прототип, а не готовый промышленный движок, но по нему удобно разобрать механику контрольных точек и восстановления Java-сервисов.Gunnar MorlingBuilding a Durable Execution Engine With SQLiteLately, there has been a lot of excitement around Durable Execution (DE) engines. The basic idea of DE is to take (potentially long-running) multi-step workflows, such as processing a purchase order …
Чашечка Java
19 Sept, 15:15
Как построить многоуровневую защиту LLM-вызовов в Spring AI 2.0В Spring Boot 4.1 защиту вызова модели можно собрать из цепочки перехватчиков. Системная инструкция ограничивает темы, а SafeGuardAdvisor отклоняет запрос до модели по совпадению с заданной подстрокой.Граница встроенного фильтра: поиск чувствителен к регистру. pass заблокирует вопрос о передаче аргумента, а PASSWORD пройдёт. В примере выходной перехватчик ищет секрет в ответе без учёта регистра и заменяет ответ до возврата клиенту. Входной слой маскирует имя, почту и номер карты до обращения к модели.Для корпоративной кодовой базы вывод практический: проверяйте запрос и ответ, а SafeGuardAdvisor считайте одним рубежом защиты. В статье Дэна Веги есть код четырёх слоёв и порядок их подключения в Spring AI.


Чашечка Java
19 Sept, 10:08
В JDK 27 и 28 ускорили операции Curve25519С JDK 27 build 14 изменения внутренних структур данных повысили пропускную способность операций на Curve25519: на 49–54% для генерации ключей и согласования по X25519, на 46–49% для генерации ключей, подписи и проверки по Ed25519, на 27–51% для постквантового гибридного обмена X25519MLKEM768.В JDK 28 build 5 добавили встроенные оптимизации с машинными инструкциями для конкретной архитектуры. На x86_64 они дают ещё 12–20% в зависимости от алгоритма, на AArch64: 7–15%. Приложения получают ускорение через JCE, а обмен ключами TLS 1.3 ещё и через JSSE.Обе версии пока доступны как ранние сборки. Для миграционного плана их можно проверить на своей архитектуре и нагрузке. Диапазоны и ссылки на тесты приведены в материале Inside Java.


Чашечка Java
18 Sept, 16:44
Как Project Leyden помогает искать задержки запуска QuarkusQuarkus с Project Leyden переносит загрузку и связывание классов в тренировочный запуск, а затем сохраняет их подготовленное состояние. В статье REST-приложение из quarkus create app стартует за 130 мс. При старте около 100 мс расход даже в 5 мс уже заметен.Когда загрузка классов почти исчезла из профиля, проявились другие затраты: рефлексия для проверки возможностей JDK, разбор аннотаций с созданием прокси-объектов и поиск отсутствующих классов или ресурсов. Такой поиск может открыть множество JAR-файлов лишь для ответа «не найдено».Для enterprise-библиотек вывод практический: проверки совместимости и редко меняющиеся метаданные стоит по возможности обрабатывать при сборке, а не при каждом старте приложения. В разборе в блоге Quarkus это показано на профилях Netty и Hibernate ORM.


Чашечка Java
18 Sept, 11:37
Как получить Post и User без загрузки PostDetails в HibernateЕсли PostDetails опциональна, запрос от неё с JOIN FETCH не подходит: запись может отсутствовать, а бизнес-логике нужны только Post и связанный User.Решение из разбора Vlad Mihalcea: начать JPQL-запрос с Post, присоединить PostDetails по общему идентификатору, затем User и вернуть обе сущности через конструктор Java Record. Если промежуточной записи нет, поле пользователя будет null.Hibernate добавляет выбранные сущности в текущий контекст персистентности. Изменение Post поэтому превращается в UPDATE при flush(). Такой приём позволяет не добавлять обратную связь @OneToOne или @OneToMany в родительскую сущность только ради чтения.


Чашечка Java
18 Sept, 06:30
Как извлекать поля из XML в Java без дерева объектовDOM и JAXB создают объекты для всего документа, даже если нужно несколько значений. Fletch для Java 17+ идёт по исходным байтам и создаёт только запрошенные строки, числа и записи: без дерева, рефлексии и промежуточных событий. Сопоставление путей читает UTF-8-поток через скользящее окно 64 КБ, поэтому обрабатывает набор документов больше доступной памяти.В JMH на Temurin/JDK 25 Fletch показал 283,7 операции/мс против 96,4 у ручного цикла Woodstox на XML с одной позицией. Это бенчмарк проекта, поэтому перед миграцией его стоит повторить на своих документах.Fletch подходит для массового чтения полей, но не поддерживает запись XML, XPath, XSLT и валидацию схем. Код, два API и команды запуска тестов есть в материале DEV Community.


Чашечка Java
13 Sept, 10:37
Что важнее ИИ-агенту: скорость Go или проверки JavaКогда агент генерирует сотни строк за секунды, узким местом становится проверка кода. Go предлагает быстрый компилятор, единый форматтер gofmt и развитую стандартную библиотеку. Java отвечает record-типами и sealed-интерфейсами: конструктор record требует все компоненты, а switch по закрытой иерархии должен обработать каждый вариант.Цена тоже различается. Java компилируется медленнее, а форматтер приходится выбирать. Зато в долгоживущей корпоративной кодовой базе типы раньше останавливают неполные доменные объекты и пропущенные ветки.Автор разбора спора Google и Java-разработчиков предлагает оценивать весь контур: компилятор, тесты, форматирование и ревью. Где у вас проходит граница между коротким циклом сборки и строгими проверками типов?


Чашечка Java
13 Sept, 09:31
Все дела подождут, потому что сегодня ваш день!Поздравляем с Днем программиста и желаем меньше багов и больше фич, меньше созвонов и больше фокуса, меньше тасок с пометкой «срочно» и больше времени на отдых.Забирайте подарок из нашей IT-коробки. Мы уверены, этот презент точно пригодится вам в работе: https://tprg.ru/NxFt
1,010Open in Telegram
Чашечка Java
13 Sept, 05:13
Версию зависимости агент называет по памяти, но klibs.io отдаёт её из живого индекса через MCPПросите ассистента добавить библиотеку, а он вписывает в pom.xml версию, которой в Maven Central нет или которая отстала на год. Сборка падает, либо вы тянете артефакт с уже закрытой уязвимостью: версия взята из обучающих данных, а не из репозитория.JetBrains показала обходной путь: у каталога klibs.io (4200+ проектов, данные из GitHub и Maven Central) появился MCP-сервер. Агент ходит в него запросом по платформе и цели, среди которых есть JVM, и получает последнюю опубликованную версию пакета из индекса.Каталог собран вокруг Kotlin Multiplatform, так что enterprise-стек закрывает частично. Интереснее приём: справочник по зависимостям как инструмент рядом с агентом. Если ваши ассистенты уже правят pom.xml, проверьте, откуда они берут версии, и до тех пор держите ревью зависимостей ручным.


Чашечка Java
12 Sept, 20:28
1 ноября записи в DynamoDB начнут падать там, где сегодня проходят, но это проверяется заранееВызов, попавший в троттлинг, SDK сейчас молча повторяет до девяти раз, и запись доходит. С 1 ноября 2026 AWS меняет дефолты ретраев: у DynamoDB останется четыре попытки вместо девяти, у прочих сервисов три вместо четырёх, пауза при троттлинге вырастет с 500 мс до 1000 мс.По логам не понять, кого это заденет: наружу выходит успех или финальная ошибка, а попытки между ними SDK не показывает. В AWS SDK for Java 2.44+ новые значения включает переменная AWS_NEW_RETRIES_2026=true, но это рубильник: цена выясняется в бою.Ответ даёт библиотека retrylens: ExecutionInterceptor пишет каждую попытку в кольцевой буфер, а симулятор считает по этим записям, чем бы тот же трафик кончился на новых дефолтах. Запросы он не переотправляет и ключи доступа не просит, так что снять картину можно на проде.


Чашечка Java
12 Sept, 15:21
Устаревшие API можно удалять без лотереи в большой Java-кодбазеМетод годами помечен @Deprecated, но удаление может сломать неизвестного потребителя. ArchUnit рассчитан на JUnit-проверку одного репозитория, чего мало для общих библиотек.Nebula ArchRules поставляет правила вместе с библиотекой отдельным JAR. Gradle-плагин запускает их там, где библиотека подключена как зависимость. Анализ байткода делает одно правило общим для Java, Kotlin и Scala.В CI-сборке авторы видят проекты, которые используют устаревшие, экспериментальные или непубличные API. Netflix TechBlog разбирает решение: 358 правил уже работают более чем в 5000 репозиториев и находят почти миллион нарушений. Так потребителей можно найти до изменения общего API.

Related Channels
Other channels in the same section of the catalogue.
