Как собрать Swing-приложение без JVM у пользователя
Quarkus Desktop помогает собрать приложение на AWT или Swing в нативный исполняемый файл. Расширение регистрирует необходимые классы, ресурсы и JNI-вызовы для GraalVM, а библиотеки JDK размещает рядом с бинарником.
В руководстве автора окно становится CDI-компонентом. Оно получает зависимости через
Долгие операции выполняют в фоновом executor, а обновление интерфейса возвращают на EDT через
Нативная сборка выполняется под целевую ОС. Для macOS нужны Quarkus 4.0 и GraalVM 25.1 или новее; на Windows arm64 доступен режим JVM. Динамически загружать неизвестные при сборке классы в нативном приложении нельзя.
#java #swing
Quarkus Desktop помогает собрать приложение на AWT или Swing в нативный исполняемый файл. Расширение регистрирует необходимые классы, ресурсы и JNI-вызовы для GraalVM, а библиотеки JDK размещает рядом с бинарником.
В руководстве автора окно становится CDI-компонентом. Оно получает зависимости через
@Inject и открывается по DesktopStartupEvent в потоке обработки событий Swing — EDT.Долгие операции выполняют в фоновом executor, а обновление интерфейса возвращают на EDT через
EdtExecutor. Для окон подходят области @Singleton и @Dependent: обычный CDI-прокси для Swing-компонента создаёт проблемы.Нативная сборка выполняется под целевую ОС. Для macOS нужны Quarkus 4.0 и GraalVM 25.1 или новее; на Windows arm64 доступен режим JVM. Динамически загружать неизвестные при сборке классы в нативном приложении нельзя.
#java #swing
Lathe: конфигурация редактора из реальной Maven-сборки
Maven собирает проект, а редактор подчёркивает рабочий код как ошибочный. Причина может быть в разных представлениях о module path, зависимостях или обработчиках аннотаций.
Alexey Gavrilov предлагает Java language server Lathe. Расширение Maven записывает параметры компиляции и тестов из самой сборки. Сервер читает этот снимок, чтобы настроить подсказки, диагностику, запуск и отладку. Следующая сборка обновляет конфигурацию.
Для первого захвата после подключения расширения используется:
Папку
Нужны Java 21+ и Maven 3.x. Проект пока молодой: наиболее полный клиент есть для Neovim, Emacs работает через Eglot, поддержка VS Code находится в планах.
#java #maven
Maven собирает проект, а редактор подчёркивает рабочий код как ошибочный. Причина может быть в разных представлениях о module path, зависимостях или обработчиках аннотаций.
Alexey Gavrilov предлагает Java language server Lathe. Расширение Maven записывает параметры компиляции и тестов из самой сборки. Сервер читает этот снимок, чтобы настроить подсказки, диагностику, запуск и отладку. Следующая сборка обновляет конфигурацию.
Для первого захвата после подключения расширения используется:
mvn clean test -Dlathe.capture.only=true
Папку
.lathe/ автор рекомендует добавить в .gitignore. Запуски и тесты затем воспроизводятся по сохранённым настройкам без нового вызова Maven.Нужны Java 21+ и Maven 3.x. Проект пока молодой: наиболее полный клиент есть для Neovim, Emacs работает через Eglot, поддержка VS Code находится в планах.
#java #maven
❤1👍1
Что меняется в TLS 1.3 с JDK 27
JDK 27 поддерживает гибридный обмен ключами: группа
В обзоре Java Security Sean Mullan объясняет и другие изменения TLS. Цепочки сертификатов теперь могут передаваться со сжатием zlib, а редко используемые группы
Для настройки групп есть свойство
При переходе стоит проверить соединения с реальными клиентами и серверами. Поддержка новой группы в JDK ещё не означает, что каждое соединение её согласует: результат зависит и от возможностей второй стороны.
#java #tls
JDK 27 поддерживает гибридный обмен ключами: группа
X25519MLKEM768 объединяет классическую кривую X25519 и постквантовый алгоритм ML-KEM. Она включена по умолчанию, но для её использования поддержку должны иметь обе стороны соединения.В обзоре Java Security Sean Mullan объясняет и другие изменения TLS. Цепочки сертификатов теперь могут передаваться со сжатием zlib, а редко используемые группы
ffdhe6144 и ffdhe8192 убраны из списка по умолчанию.Для настройки групп есть свойство
jdk.tls.namedGroups и метод SSLParameters.setNamedGroups(). Удалённые из стандартного списка группы можно явно включить, если они нужны для совместимости.При переходе стоит проверить соединения с реальными клиентами и серверами. Поддержка новой группы в JDK ещё не означает, что каждое соединение её согласует: результат зависит и от возможностей второй стороны.
#java #tls
В JavaDoc предлагают отдельный тег для предупреждений
Совет по использованию метода или важное ограничение легко потерять внутри длинного описания. Для JDK 28 предлагают тег
В заметке OpenJDK Quality Outreach показаны два варианта: встроенная заметка с вертикальной полосой и блочная с отдельным заголовком. Заголовок можно изменить, например на Caution:
Атрибуты
Пока это предлагаемые изменения для JDK 28. Пример полезен для знакомства с будущим форматом; использовать его как поддерживаемый синтаксис в документации проекта на JDK 27 рано.
#java #документация
Совет по использованию метода или важное ограничение легко потерять внутри длинного описания. Для JDK 28 предлагают тег
@note, который выделяет такие фрагменты при генерации документации.В заметке OpenJDK Quality Outreach показаны два варианта: встроенная заметка с вертикальной полосой и блочная с отдельным заголовком. Заголовок можно изменить, например на Caution:
/**
* {@note (header='Caution:') Verify untrusted input!}
*/
Атрибуты
kind и id позволяют добавить CSS-класс и идентификатор HTML-элемента. Предложение также предусматривает настройку собственных тегов через параметры javadoc.Пока это предлагаемые изменения для JDK 28. Пример полезен для знакомства с будущим форматом; использовать его как поддерживаемый синтаксис в документации проекта на JDK 27 рано.
#java #документация
Почему javac разрешает удалить Integer из Set<Short>
Метод
В последней строке
В разборе Error Prone показано, как находить подобные ошибки при компиляции. Инструмент подключается к javac и использует сведения о типах: проверка CollectionIncompatibleType замечает несовместимый аргумент коллекции.
Другой пример —
#java #инструменты
Метод
remove(Object) принимает любой объект. Поэтому такой код компилируется, но оставляет элемент в коллекции:Set<Short> values = new HashSet<>();
values.add((short) 1);
values.remove(1);
В последней строке
1 упаковывается в Integer. В наборе лежит Short, и равными эти объекты не считаются.В разборе Error Prone показано, как находить подобные ошибки при компиляции. Инструмент подключается к javac и использует сведения о типах: проверка CollectionIncompatibleType замечает несовместимый аргумент коллекции.
Другой пример —
YYYY вместо yyyy в формате даты: год недели может отличаться от календарного в конце декабря. Проверка MisusedWeekYear помогает поймать и эту ошибку. Для правил своей команды можно написать BugChecker, а повторяющиеся замены описать Java-шаблонами Refaster.#java #инструменты
😁1
Hibernate Validator 9.2: проверки паролей через аннотации
В первой бете Hibernate Validator 9.2 появились
В описании релиза есть важная подробность: готового оценщика стойкости и сервиса проверки утечек библиотека не предоставляет. Приложение подключает свои реализации PasswordStrengthEstimator и CompromisedPasswordChecker.
Все три ограничения считают null допустимым значением. Обязательное поле нужно дополнительно пометить
PasswordPolicy объединяет правила в повторно используемый класс. Каждое нарушенное правило создаёт собственную ошибку валидации, поэтому можно показать, какие требования не выполнены.
Это бета; многие новые API ещё экспериментальные. Примеры подключения сервисов в статье стоит рассматривать как основу для знакомства с интерфейсами.
#java #hibernate
В первой бете Hibernate Validator 9.2 появились
@PasswordStrength, @NotCompromised и @PasswordPolicy. Они позволяют проверять стойкость пароля, наличие в известных утечках и соблюдение набора правил.В описании релиза есть важная подробность: готового оценщика стойкости и сервиса проверки утечек библиотека не предоставляет. Приложение подключает свои реализации PasswordStrengthEstimator и CompromisedPasswordChecker.
Все три ограничения считают null допустимым значением. Обязательное поле нужно дополнительно пометить
@NotNull или @NotBlank.PasswordPolicy объединяет правила в повторно используемый класс. Каждое нарушенное правило создаёт собственную ошибку валидации, поэтому можно показать, какие требования не выполнены.
Это бета; многие новые API ещё экспериментальные. Примеры подключения сервисов в статье стоит рассматривать как основу для знакомства с интерфейсами.
#java #hibernate
Jenesis: сборка Java-проекта из module-info.java
Имя модуля и его зависимости уже описаны в Java-коде. Рафаэль Винтерхальтер, автор Byte Buddy, предлагает использовать эту информацию и для сборки.
В знакомстве с Jenesis основным описанием проекта становится
Команда pin фиксирует версии зависимостей и контрольные суммы. Шаги сборки кешируются по входным данным, а для тестов инструмент определяет, какие из них затрагивает изменение.
Для знакомства не обязательно сразу переводить проект на модули: Jenesis умеет читать и pom.xml. В статье есть примеры многомодульной сборки, общего кеша и генерации кода. Перед переходом остаётся проверить, как инструмент справляется с особыми шагами именно вашей сборки.
#java #сборка
Имя модуля и его зависимости уже описаны в Java-коде. Рафаэль Винтерхальтер, автор Byte Buddy, предлагает использовать эту информацию и для сборки.
В знакомстве с Jenesis основным описанием проекта становится
module-info.java. Дополнительные сведения, например главный класс, задаются тегами в Javadoc. Сам инструмент хранится в репозитории как Java-исходники и запускается на JDK 25+:java build/jenesis/Make.java
Команда pin фиксирует версии зависимостей и контрольные суммы. Шаги сборки кешируются по входным данным, а для тестов инструмент определяет, какие из них затрагивает изменение.
Для знакомства не обязательно сразу переводить проект на модули: Jenesis умеет читать и pom.xml. В статье есть примеры многомодульной сборки, общего кеша и генерации кода. Перед переходом остаётся проверить, как инструмент справляется с особыми шагами именно вашей сборки.
#java #сборка
Мониторинг Spring Boot на небольшом VPS
Для нескольких сервисов бывает достаточно видеть задержки, ошибки, память и перезапуски. В руководстве по StatLite показана панель, которая собирает эти данные из Spring Boot Actuator.
StatLite запускается одним Go-бинарником и хранит историю в SQLite. На стороне приложения нужны Actuator, Micrometer с prometheus-registry и доступные сборщику endpoints health и prometheus. Отдельный сервер Prometheus для этого варианта не требуется.
В конфигурации задаются адрес приложения, интервал опроса и тайм-аут. Панель по умолчанию привязана к localhost; доступ к Actuator тоже стоит ограничить сетью и аутентификацией.
Решение рассчитано на небольшой набор приложений. Для распределённых трассировок, централизованных журналов, сложных запросов к метрикам и маршрутизации оповещений понадобится более широкая система. В статье есть готовый демонстрационный Spring Boot-сервис с генератором трафика.
#spring #мониторинг
Для нескольких сервисов бывает достаточно видеть задержки, ошибки, память и перезапуски. В руководстве по StatLite показана панель, которая собирает эти данные из Spring Boot Actuator.
StatLite запускается одним Go-бинарником и хранит историю в SQLite. На стороне приложения нужны Actuator, Micrometer с prometheus-registry и доступные сборщику endpoints health и prometheus. Отдельный сервер Prometheus для этого варианта не требуется.
В конфигурации задаются адрес приложения, интервал опроса и тайм-аут. Панель по умолчанию привязана к localhost; доступ к Actuator тоже стоит ограничить сетью и аутентификацией.
Решение рассчитано на небольшой набор приложений. Для распределённых трассировок, централизованных журналов, сложных запросов к метрикам и маршрутизации оповещений понадобится более широкая система. В статье есть готовый демонстрационный Spring Boot-сервис с генератором трафика.
#spring #мониторинг
❤1
Hibernate 8: проверки версий при конкурентных обновлениях
Оптимистическая блокировка должна обнаружить, что между чтением и записью сущность уже изменил другой запрос. Детали реализации и поведение базы здесь имеют значение.
В разборе изменений Hibernate 8 Beta2 команда описывает усиленные проверки версий: они учитывают ситуации, в которых конкурентное изменение раньше могло остаться незамеченным. Поддержку блокировки по версии получили StatelessSession и EntityAgent из Jakarta Persistence.
Ещё одно изменение касается параллельных upsert в StatelessSession: обработка учитывает гонку вставки. Для разделения данных по арендаторам их идентификаторы последовательно включаются в SQL изменения данных.
Это повод добавить к проверке миграции сценарии с одновременными обновлениями и вставками. Ветка Hibernate 8 пока тестовая; после описанной Beta2 уже вышла Beta3. Возможности из заметки полезно оценивать вместе с актуальным руководством по миграции.
#java #hibernate
Оптимистическая блокировка должна обнаружить, что между чтением и записью сущность уже изменил другой запрос. Детали реализации и поведение базы здесь имеют значение.
В разборе изменений Hibernate 8 Beta2 команда описывает усиленные проверки версий: они учитывают ситуации, в которых конкурентное изменение раньше могло остаться незамеченным. Поддержку блокировки по версии получили StatelessSession и EntityAgent из Jakarta Persistence.
Ещё одно изменение касается параллельных upsert в StatelessSession: обработка учитывает гонку вставки. Для разделения данных по арендаторам их идентификаторы последовательно включаются в SQL изменения данных.
Это повод добавить к проверке миграции сценарии с одновременными обновлениями и вставками. Ветка Hibernate 8 пока тестовая; после описанной Beta2 уже вышла Beta3. Возможности из заметки полезно оценивать вместе с актуальным руководством по миграции.
#java #hibernate
Как HotSpot ускоряет криптографию внутри JDK
Реализация алгоритма написана на Java, но некоторые часто выполняемые операции JVM может заменить машинным кодом под конкретный процессор. Такой механизм называется intrinsic.
В статье команды Java он разобран на постквантовых ML-KEM, ML-DSA и HSS/LMS. У первых двух много повторяющихся операций с коэффициентами полиномов — подходящая работа для векторных инструкций. Проверка подписей HSS/LMS выигрывает от ускорения SHA-256.
Аннотация
В статье приведены замеры JDK 28 на Linux/AArch64. Они сравнивают отдельные алгоритмы с включёнными intrinsics и без них. При оценке результата важны набор параметров алгоритма и возможности CPU: ускорение криптографической операции само по себе не определяет скорость всего сервиса.
#java #jvm
Реализация алгоритма написана на Java, но некоторые часто выполняемые операции JVM может заменить машинным кодом под конкретный процессор. Такой механизм называется intrinsic.
В статье команды Java он разобран на постквантовых ML-KEM, ML-DSA и HSS/LMS. У первых двух много повторяющихся операций с коэффициентами полиномов — подходящая работа для векторных инструкций. Проверка подписей HSS/LMS выигрывает от ускорения SHA-256.
Аннотация
@IntrinsicCandidate отмечает методы, для которых HotSpot может применить такую замену. Java-реализация остаётся запасным вариантом, если подходящего ускорения на платформе нет.В статье приведены замеры JDK 28 на Linux/AArch64. Они сравнивают отдельные алгоритмы с включёнными intrinsics и без них. При оценке результата важны набор параметров алгоритма и возможности CPU: ускорение криптографической операции само по себе не определяет скорость всего сервиса.
#java #jvm
❤1
Quarkus 4: что проверить перед миграцией
Первая бета Quarkus 4 меняет базовые зависимости сразу в нескольких частях приложения. Минимальная версия Java теперь 21, сетевой стек переходит на Netty 4.2 и Vert.x 5.
В обзоре команды также перечислены Hibernate ORM 8, Jackson 3, CDI 5.0 и Jakarta REST 4. Поэтому обновление стоит начинать с проверки расширений, сериализации и работы с базой. Для перехода подготовлено отдельное руководство.
Из новых возможностей — HTTP/3, который включается явно, и Observation API: аннотация
Релиз пока тестовый. Команда просит разработчиков расширений проверять совместимость, а пользователей — прогонять приложения и сообщать о проблемах. Хорошая задача для отдельной ветки: пройти миграцию и посмотреть на поведение интеграционных тестов.
#java #quarkus
Первая бета Quarkus 4 меняет базовые зависимости сразу в нескольких частях приложения. Минимальная версия Java теперь 21, сетевой стек переходит на Netty 4.2 и Vert.x 5.
В обзоре команды также перечислены Hibernate ORM 8, Jackson 3, CDI 5.0 и Jakarta REST 4. Поэтому обновление стоит начинать с проверки расширений, сериализации и работы с базой. Для перехода подготовлено отдельное руководство.
Из новых возможностей — HTTP/3, который включается явно, и Observation API: аннотация
@Observed или программный интерфейс создают метрики и трассировки через Micrometer и OpenTelemetry. В Dev UI появилась встроенная панель наблюдения.Релиз пока тестовый. Команда просит разработчиков расширений проверять совместимость, а пользователей — прогонять приложения и сообщать о проблемах. Хорошая задача для отдельной ветки: пройти миграцию и посмотреть на поведение интеграционных тестов.
#java #quarkus
❤1
Spring AI: похожий документ ещё не содержит ответа
Векторный поиск нашёл текст по теме, но в ответ модели снова попала справочная информация вместо нужного факта. Для такого случая в примере Spring AI Modular RAG поиск разделён на несколько этапов.
Сначала модель переписывает вопрос для поиска и создаёт несколько его вариантов. Найденные фрагменты объединяются, после чего JevDocumentFilter отсеивает неподходящие, а JevDocumentReranker меняет порядок и оставляет лучшие.
Компоненты реализуют интерфейс DocumentPostProcessor и подключаются к RetrievalAugmentationAdvisor. Их можно менять отдельно от хранилища и модели, которая формирует ответ.
Есть полезная деталь: фильтрация и формирование контекста используют исходный вопрос пользователя. Переписанный запрос нужен только для поиска. В статье рядом лежат простая и модульная версии примера — удобно сравнить, какие фрагменты дошли до модели и почему часть была исключена.
#spring #java #rag
Векторный поиск нашёл текст по теме, но в ответ модели снова попала справочная информация вместо нужного факта. Для такого случая в примере Spring AI Modular RAG поиск разделён на несколько этапов.
Сначала модель переписывает вопрос для поиска и создаёт несколько его вариантов. Найденные фрагменты объединяются, после чего JevDocumentFilter отсеивает неподходящие, а JevDocumentReranker меняет порядок и оставляет лучшие.
Компоненты реализуют интерфейс DocumentPostProcessor и подключаются к RetrievalAugmentationAdvisor. Их можно менять отдельно от хранилища и модели, которая формирует ответ.
Есть полезная деталь: фильтрация и формирование контекста используют исходный вопрос пользователя. Переписанный запрос нужен только для поиска. В статье рядом лежат простая и модульная версии примера — удобно сравнить, какие фрагменты дошли до модели и почему часть была исключена.
#spring #java #rag
❤1👍1
Java-сервер с генерацией зависимостей при сборке
Маршруты HTTP и создание компонентов можно подготовить до запуска приложения. В разборе Codename One Backend показано, как аннотации превращаются в обычные Java-классы для маршрутизации и внедрения зависимостей.
Сгенерированный код создаёт объекты прямыми вызовами конструкторов. Отсутствующие зависимости, неоднозначный выбор компонента и циклы конструкторов приводят к ошибке сборки. Затем ParparVM переводит байткод в C для нативной компиляции.
Названия аннотаций напоминают Spring, но находятся в собственном пакете com.codename1.backend.annotations. Это отдельный развивающийся проект со своим набором возможностей.
В статье есть сравнение старта и памяти с Spring Boot, однако замеры сделаны на двух простых HTTP-обработчиках без базы, TLS и авторизации. Интереснее начать с устройства сгенерированного кода, а показатели своего сервиса проверить с его реальными зависимостями.
#java #производительность
Маршруты HTTP и создание компонентов можно подготовить до запуска приложения. В разборе Codename One Backend показано, как аннотации превращаются в обычные Java-классы для маршрутизации и внедрения зависимостей.
Сгенерированный код создаёт объекты прямыми вызовами конструкторов. Отсутствующие зависимости, неоднозначный выбор компонента и циклы конструкторов приводят к ошибке сборки. Затем ParparVM переводит байткод в C для нативной компиляции.
Названия аннотаций напоминают Spring, но находятся в собственном пакете com.codename1.backend.annotations. Это отдельный развивающийся проект со своим набором возможностей.
В статье есть сравнение старта и памяти с Spring Boot, однако замеры сделаны на двух простых HTTP-обработчиках без базы, TLS и авторизации. Интереснее начать с устройства сгенерированного кода, а показатели своего сервиса проверить с его реальными зависимостями.
#java #производительность
Gradle 9.8 использует настройки зеркал репозиториев из Maven
В компании есть внутреннее зеркало зависимостей, а проекты собираются и Maven, и Gradle? В ветке Gradle 9.8 настройки зеркал можно брать из Maven вместо отдельного описания в каждой сборке.
Включается в
По умолчанию опция выключена. После включения Gradle заменяет адреса подходящих HTTP/HTTPS Maven-репозиториев по правилам зеркал. Это касается и репозиториев сборочных скриптов, и репозиториев в настройках и проектах.
На Ivy, Maven Local, каталоги с JAR-файлами и репозитории через S3/GCS механизм не распространяется.
При обновлении выбирайте патч 9.8.1: он исправляет уязвимости и регрессии первоначального релиза.
#java #gradle
В компании есть внутреннее зеркало зависимостей, а проекты собираются и Maven, и Gradle? В ветке Gradle 9.8 настройки зеркал можно брать из Maven вместо отдельного описания в каждой сборке.
Включается в
gradle.properties:org.gradle.mirror.maven.settings=true
По умолчанию опция выключена. После включения Gradle заменяет адреса подходящих HTTP/HTTPS Maven-репозиториев по правилам зеркал. Это касается и репозиториев сборочных скриптов, и репозиториев в настройках и проектах.
На Ivy, Maven Local, каталоги с JAR-файлами и репозитории через S3/GCS механизм не распространяется.
При обновлении выбирайте патч 9.8.1: он исправляет уязвимости и регрессии первоначального релиза.
#java #gradle
Spring Batch отсекает несовместимые настройки builder ещё при компиляции
Раньше некоторые взаимоисключающие настройки можно было записать в одной цепочке, а ошибку получить только на
В Spring Batch 6.1.0-M2 для нескольких builder-классов ввели поэтапный DSL. После выбора одной стратегии тип возвращаемого объекта ограничивает доступные следующие методы. Некорректную комбинацию теперь отвергает компилятор.
Изменение затрагивает
При миграции проверьте код, который сохраняет промежуточный результат вызова в переменную с типом builder-класса: для него есть несовместимые изменения. Непрерывным цепочкам вызовов, по описанию команды, достаточно перекомпиляции.
M2 — предварительная версия. Хороший повод проверить совместимость до финального релиза.
#java #spring #batch
Раньше некоторые взаимоисключающие настройки можно было записать в одной цепочке, а ошибку получить только на
build().В Spring Batch 6.1.0-M2 для нескольких builder-классов ввели поэтапный DSL. После выбора одной стратегии тип возвращаемого объекта ограничивает доступные следующие методы. Некорректную комбинацию теперь отвергает компилятор.
Изменение затрагивает
FlatFileItemReaderBuilder, FlatFileItemWriterBuilder и JdbcBatchItemWriterBuilder.При миграции проверьте код, который сохраняет промежуточный результат вызова в переменную с типом builder-класса: для него есть несовместимые изменения. Непрерывным цепочкам вызовов, по описанию команды, достаточно перекомпиляции.
M2 — предварительная версия. Хороший повод проверить совместимость до финального релиза.
#java #spring #batch
ИИ-ревьюер на Spring Boot превращает ответ модели в замечания к коду
Отправить diff модели — только начало. Чтобы результат оказался полезен на ревью, нужно связать каждое замечание с файлом, местом в коде и объяснением проблемы.
Автор CodeGuard AI описывает такой процесс на Java и Spring Boot: получить данные PR и изменения, собрать контекст, добавить правила проверки, разобрать ответ модели и подготовить ревью в GitHub.
Замечания хранятся в структурированном виде: что найдено, где, насколько серьёзно и насколько уверена модель. Провайдер вынесен за отдельную абстракцию — можно переключаться между OpenAI, Gemini и Ollama.
Полезная часть статьи — устройство всей цепочки вокруг модели. Структурированный ответ проще фильтровать и проверять, но оценка уверенности сама по себе не подтверждает, что найденная ошибка реальна.
#java #springboot #codereview
Отправить diff модели — только начало. Чтобы результат оказался полезен на ревью, нужно связать каждое замечание с файлом, местом в коде и объяснением проблемы.
Автор CodeGuard AI описывает такой процесс на Java и Spring Boot: получить данные PR и изменения, собрать контекст, добавить правила проверки, разобрать ответ модели и подготовить ревью в GitHub.
Замечания хранятся в структурированном виде: что найдено, где, насколько серьёзно и насколько уверена модель. Провайдер вынесен за отдельную абстракцию — можно переключаться между OpenAI, Gemini и Ollama.
Полезная часть статьи — устройство всей цепочки вокруг модели. Структурированный ответ проще фильтровать и проверять, но оценка уверенности сама по себе не подтверждает, что найденная ошибка реальна.
#java #springboot #codereview
❤1
Helidon 27 переносит контекст с ThreadLocal на ScopedValue
Идентификатор запроса и другие данные контекста нужны в разных слоях приложения. При передаче через
В Helidon 27 активный контекст фреймворка перенесли на
Использовать более новые механизмы Java позволило повышение базовой версии: Helidon 27 требует JDK 27.
Одновременно проект разделяет две линии развития. Helidon 27 — актуальная ветка с новыми возможностями, а Helidon 4.5 остаётся LTS-веткой для команд с более длинным циклом проверки и обновления.
Поэтому переход стоит планировать вместе с обновлением JDK и проверкой зависимостей сервиса.
#java #helidon #jvm
Идентификатор запроса и другие данные контекста нужны в разных слоях приложения. При передаче через
ThreadLocal важно правильно задать и завершить их жизненный цикл.В Helidon 27 активный контекст фреймворка перенесли на
ScopedValue. Значение привязано к ограниченной области выполнения, что помогает согласовать время жизни контекста с работой, для которой он нужен.Использовать более новые механизмы Java позволило повышение базовой версии: Helidon 27 требует JDK 27.
Одновременно проект разделяет две линии развития. Helidon 27 — актуальная ветка с новыми возможностями, а Helidon 4.5 остаётся LTS-веткой для команд с более длинным циклом проверки и обновления.
Поэтому переход стоит планировать вместе с обновлением JDK и проверкой зависимостей сервиса.
#java #helidon #jvm
В JDK 28 готовят простой JSON API для небольших задач
Прочитать JSON-конфигурацию, достать вложенное значение и сформировать небольшой документ — для таких случаев в JDK готовят собственный API разбора, навигации и генерации JSON.
В докладе Everyday JSON in Java Алан Бейтман и Виктор Кланг объясняют, какие задачи он должен закрыть и как подход с ориентацией на данные повлиял на устройство API.
Основной сценарий — простая работа с документом без подключения внешней библиотеки. Авторы отдельно подчёркивают: заменять существующие JSON-библиотеки целиком не планируют.
Для проекта с настройками сериализации, модулями Jackson и преобразованием сложных объектных моделей появление нового API ещё не означает готовой замены.
Для JDK 28 API готовится в статусе incubator. Интерфейс ещё может меняться; стабильной возможностью JDK 27 он не является.
#java #json #jdk28
Прочитать JSON-конфигурацию, достать вложенное значение и сформировать небольшой документ — для таких случаев в JDK готовят собственный API разбора, навигации и генерации JSON.
В докладе Everyday JSON in Java Алан Бейтман и Виктор Кланг объясняют, какие задачи он должен закрыть и как подход с ориентацией на данные повлиял на устройство API.
Основной сценарий — простая работа с документом без подключения внешней библиотеки. Авторы отдельно подчёркивают: заменять существующие JSON-библиотеки целиком не планируют.
Для проекта с настройками сериализации, модулями Jackson и преобразованием сложных объектных моделей появление нового API ещё не означает готовой замены.
Для JDK 28 API готовится в статусе incubator. Интерфейс ещё может меняться; стабильной возможностью JDK 27 он не является.
#java #json #jdk28
🌚3
Pi4J 5 позволяет подменять оборудование при разработке на обычном компьютере
Код для GPIO и датчиков неудобно разрабатывать, если плата должна постоянно лежать рядом. В готовящейся Pi4J 5 добавили возможность использовать реальное оборудование, когда оно доступно, и переходить на заглушки на других системах.
Это помогает проверять логику приложения на рабочем компьютере. Физические подключения, временные характеристики и поведение датчика всё равно нужно проверять на плате.
Заодно команда упрощает API создания устройств: конфигурация собирается через
Pi4J 5 пока находится в разработке, доступны snapshot-сборки. Дата финального релиза не объявлена, поэтому изменения API стоит учитывать до переноса рабочего проекта.
#java #pi4j #iot
Код для GPIO и датчиков неудобно разрабатывать, если плата должна постоянно лежать рядом. В готовящейся Pi4J 5 добавили возможность использовать реальное оборудование, когда оно доступно, и переходить на заглушки на других системах.
Это помогает проверять логику приложения на рабочем компьютере. Физические подключения, временные характеристики и поведение датчика всё равно нужно проверять на плате.
Заодно команда упрощает API создания устройств: конфигурация собирается через
newConfigBuilder() соответствующего типа, затем передаётся в context.create(...). Завершение работы тоже сводят к одному close().Pi4J 5 пока находится в разработке, доступны snapshot-сборки. Дата финального релиза не объявлена, поэтому изменения API стоит учитывать до переноса рабочего проекта.
#java #pi4j #iot
❤1
Spring Tools 5.4 предлагает исправления для аннотаций контроллеров и тестов
Некоторые сочетания аннотаций Spring можно выразить короче и точнее. В Spring Tools 5.4.0 добавили проверки и быстрые исправления для перехода к
Такие подсказки помогают замечать подходящие преобразования прямо в редакторе, не разыскивая каждое сочетание вручную.
Команда также ускорила ряд быстрых исправлений и проверку версий по репозиториям, улучшила надёжность индексации исходников. Дистрибутив для Eclipse обновили до Eclipse 2026-09.
Пригодится при поддержке существующего Spring-проекта: можно пройтись по диагностике и проверить предложенные изменения небольшими порциями. Применять их стоит с просмотром diff и запуском тестов.
#java #spring #инструменты
Некоторые сочетания аннотаций Spring можно выразить короче и точнее. В Spring Tools 5.4.0 добавили проверки и быстрые исправления для перехода к
@RestController, @SpringJUnitConfig, @ApplicationModuleListener и специализированным аннотациям области видимости.Такие подсказки помогают замечать подходящие преобразования прямо в редакторе, не разыскивая каждое сочетание вручную.
Команда также ускорила ряд быстрых исправлений и проверку версий по репозиториям, улучшила надёжность индексации исходников. Дистрибутив для Eclipse обновили до Eclipse 2026-09.
Пригодится при поддержке существующего Spring-проекта: можно пройтись по диагностике и проверить предложенные изменения небольшими порциями. Применять их стоит с просмотром diff и запуском тестов.
#java #spring #инструменты
Payara Community убирает требование повышенных прав для SSH-узлов
В Payara Community 7.2026.10 управление SSH-узлами больше не требует повышенных прав. Для домена на нескольких хостах это упрощает настройку учётной записи, через которую сервер работает с удалённым узлом.
SSH-доступ и необходимые разрешения остаются нужны. Изменение убирает требование избыточных привилегий.
Ещё появились две команды
Ветка Community 7 остаётся на Jakarta EE 11 и MicroProfile 7.1. В статье отдельно перечислены обновления коммерческих веток Azul Payara — их исправления и возможности нужно сверять со своей редакцией.
#java #jakartaee #payara
В Payara Community 7.2026.10 управление SSH-узлами больше не требует повышенных прав. Для домена на нескольких хостах это упрощает настройку учётной записи, через которую сервер работает с удалённым узлом.
SSH-доступ и необходимые разрешения остаются нужны. Изменение убирает требование избыточных привилегий.
Ещё появились две команды
asadmin для управления конфигурацией: delete-jvm-option и delete-system-properties. Исправлены проблемы с конкурентным развёртыванием и запуском приложений после перезапуска домена.Ветка Community 7 остаётся на Jakarta EE 11 и MicroProfile 7.1. В статье отдельно перечислены обновления коммерческих веток Azul Payara — их исправления и возможности нужно сверять со своей редакцией.
#java #jakartaee #payara