223 subscribers
8 photos
2 videos
11 links
Java для взрослых разработчиков ☕️🔞

Авторские материалы по Java-разработке:

📺 youtube.com/@rustam-kuramshin

📖 habr.com/ru/users/RustamKuramshin/articles/
Download Telegram
Channel created
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня — Java 30 лет 🎂

Опубликовал большую статью на Хабре — о том, как развивалась Java, что происходило внутри JVM, и куда всё это движется дальше.

📌 В статье:
— История версий Java: от Playground до Java 24
— Эволюция языка
— Как работает JVM и почему HotSpot такой «горячий»
— Проекты OpenJDK: Leyden, GraalVM, CRaC — зачем они нужны и как меняют подход к производительности
— И главное — как Java готовится к будущему

🧠 Подойдёт всем, кто пишет на Java или просто хочет понять, как устроена одна из самых влиятельных технологий в мире разработки.

📖 Читать статью на Хабр

#java_hub_history
🔥91
🚀 Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM

🔍 Миф №1 о Java:

> «Java — это медленно»

Да, лет 20 назад это могло быть правдой. Но JVM с тех пор прошла огромный путь.

В классическом варианте Java-байткод исполняется через интерпретатор — по сути, цикл со switch-case, где инструкции переводятся на лету. Это действительно не быстро.

📈 Первый прорыв — JIT-компиляция (Just-in-Time): часто вызываемые методы начали компилироваться в машинный код во время выполнения. Это дало солидный прирост производительности.

💡 Но на этом оптимизации не остановились. Сегодня в арсенале JVM есть:

* CDS (Class Data Sharing) — сериализация внутренних представлений классов, чтобы ускорить их загрузку из архива.

* CRaC (Coordinated Restore at Checkpoint) — снятие снепшота уже «прогретой» JVM, чтобы потом мгновенно восстановить её в этом состоянии.

* AOT (Ahead-of-Time compilation) — компиляция Java-приложения в нативный бинарник заранее, без участия JIT в рантайме.

🧪 А на подходе ещё Project Leyden, который обещает сделать JVM по-настоящему предсказуемой и «запускаемой с кнопки» — благодаря condensers и training runs.

🎤 Обо всём этом я рассказывал на HighLoad++ 2024. Видео пока не выложили, но мои друзья из Axiom JDK подготовили текстовую версию доклада 📄

📎 Читайте: «Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM»

#java_hub_jvm
👍5🔥2
🔁 Saga Pattern в микросервисной архитектуре: можно ли обойтись без распределённых транзакций?

Выступил на онлайн-встрече "Книжного клуба .rar" — Telegram-сообщества для Java-разработчиков, где регулярно обсуждают профессиональную литературу, технологии и устраивают встречи с практикующими инженерами 👉 @point_rar

В этот раз разбирали реализацию паттерна Saga на Java с использованием Temporal

Демо-проект на GitHub - https://github.com/RustamKuramshin/spring-boot-saga-pattern-example

Презентация мини-доклада тут

📦 Что такое Saga и зачем она нужна?

В распределённой системе аннотация Transactional не работает между сервисами. А бизнесу всё ещё нужно "всё или ничего":
если деньги списались, товар должен быть зарезервирован и доставлен. Если нет — откатить всё назад.

Saga — это паттерн, который разбивает такую бизнес-транзакцию на цепочку локальных транзакций, и если что-то идёт не так, вызывает компенсационные действия (например, вернуть деньги).

🧩 Два способа реализовать Saga

🔸 Оркестрация
Один сервис (оркестратор) управляет всей логикой: вызывает шаги, следит за результатами, вызывает компенсации.
Централизованно, легко отлаживать
Меньше изоляции между сервисами

🔸 Хореография
Сервисы реагируют на события (event-driven): "платёж прошёл" → "резервируй товар" → "создай доставку".
Слабо связанная архитектура
Сложно проследить цепочку событий и откатов

⚙️ В Temporal реализация Saga — это workflow, в котором бизнес-процесс описывается обычным Java-кодом.
Он:
- сохраняет состояние каждого шага (event sourcing),
- автоматически повторяет activities при сбоях,
- управляет timeouts и compensation logic,
- отделяет workflow (координацию) от activity (действий).

Например, просто пишешь:
activities.makePayment();
saga.addCompensation(activities::cancelPayment);

А Temporal сам заботится о повторяемости, масштабировании и отказоустойчивости.

Если интересно больше узнать про Temporal, рекомендую посмотреть доклад Петра Сальникова с JPoint. Мне повезло присутствовать в зале на самом докладе. В дискуссионной зоне Петр ответил на множество вопросов как раз в тот период, когда мне нужно было самому разбираться с Temporal.

#java_hub_patterns
👍10🔥41
null, который положил Google Cloud Platform 😱

Вокруг только и разговоров, что о post-mortem недавнего инцидента в Google Cloud 👩‍💻

12 июня Google Cloud прилёг. На несколько часов так прилёг. Упали App Engine, BigQuery, Cloud SQL, IAM, Cloud Run — и ещё с десяток ключевых сервисов.

А всё началось с Null Pointer Exception

29 мая в компонент GCP под названием Service Control добавили новую ветку логики для проверки квот. Код попал в прод, но не активировался — требовалась определённая конфигурация политики, которая на тот момент ещё не существовала.

12 июня эти политики всё-таки были задействованы. В Spanner (распределённая база данных от Google) записались данные с пустыми полями. Service Control начал использовать новую логику, где не было защиты от null. И началось: сервис стал падать в каждом регионе. Ошибки 503 прокатились по всем зависимым API. Глобальная катастрофа — за пару секунд.

Каковы корневые причины?

- Null Pointer Exception в новой логике квот.

- Отсутствие feature flag’а — код сразу пошёл "в бой", без фазового включения.

- Нет fallback-механизма (fail-open).

- Не было адекватного тестирования — критическая ветка не активировалась до продакшна.

- Мгновенная глобальная репликация метаданных — баг разлетелся по всему миру за секунды.


Кто бы мог подумать, что в 2025 году глобальный сервис положит банальный NPE.

Мы, Java-разработчики, к сожалению, не удивлены

null — это старая боль JVM.
Известный billion-dollar mistake, как его однажды окрестил Тони Хоар. За десятилетия было много попыток уменьшить ущерб от null:

- Kotlin с его строгой null safety.

- Optional в Java 8.

- Проект
JSpecify, который пытается ввести строгую спецификацию аннотаций nullability.

-
Черновик JEP'а про Nullable-типы на уровне JVM.

А ведь в Go (на нём пишут в Google), несмотря на переименование null в nil, проблемы всё те же, хе-хе 👩‍💻

Крах Google Cloud — это textbook fail в области feature toggle практик.

Если бы новая логика была обёрнута в фичефлаг с постепенным rollout — баг бы нашли до продакшна.

Если бы был fail-open — сервис хотя бы не падал.

Если бы была деградация, а не crash loop — миллионы клиентов не увидели бы 503.

Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.

Любая система уязвима, если в ней нет культуры устойчивости к дефектам.

#java_hub_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥42😱2
👩‍💻 GitHub запускает MCP-сервер

ИИ-агенты сегодня — это не просто тренд, а новая парадигма взаимодействия с инструментами разработки.

Вместо того чтобы ограничиваться подсказками по коду, современный AI получает полномочия действовать как полноценный участник процесса: анализировать проект, создавать PR'ы, запускать CI, вести дискуссии в issue и автоматизировать рутину. Для этого нужна инфраструктура. И вот GitHub выкатывает один из главных строительных блоков — официальный GitHub MCP-сервер.

📌 Что такое MCP?

MCP (Model Context Protocol) — это стандарт для интеграции LLM-агентов с внешними инструментами. Он описывает, как агент может обращаться к API, какие действия доступны и в каком контексте. MCP-сервер предоставляет весь необходимый интерфейс, чтобы LLM могла, например, создать issue, обновить pull request, запросить ревью или найти баг в коде.

Иными словами, MCP-сервер превращает LLM в разработчика, способного действовать.

📦 Что внутри

GitHub MCP-сервер официально доступен как в виде локального Docker-контейнера, так и как хостинг-сервис от GitHub — с полноценной поддержкой OAuth 2.0, SAML и автоматическим обновлением.

Возможности:

- Полный доступ к GitHub API через безопасную прослойку.

- Управление репозиториями, PR, issue, CI/CD, пользователями, кодом и даже секретами.

- Возможность фильтровать доступные инструменты (например, включить только работу с PR и Actions).

- Поддержка read-only режима — чтобы LLM-агент был только наблюдателем.

- Встроенная динамическая загрузка инструментов — чтобы модель не путалась в избыточных возможностях.


🛠 Как использовать?

Подключение в 👩‍💻 VS Code (начиная с версии 1.101) буквально в пару кликов. После этого — активируйте Agent Mode, и LLM сможет работать с MCP напрямую.

Интеграция с другими IDE и MCP-хостами через JSON-конфигурацию.

Можно использовать в своих проектах для создания кастомных агентов: например, AI-помощник по ревью кода.

💡 Перспективы

Большинство современных AI-агентов для кодинга всё ещё действуют в изоляции — они не понимают, что происходит в CI, какие открыты issue, кто их создал и зачем. MCP меняет это. Теперь можно строить LLM-инструменты, которые живут в контексте проекта, как будто это ваш junior-разработчик на испытательном сроке, только с бесконечным терпением и способностью парсить тысячи строк кода.

🔗 Попробовать GitHub MCP Server:

Репозиторий: https://github.com/github/github-mcp-server

Документация MCP: https://modelcontextprotocol.io/introduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🤔2
Media is too big
VIEW IN TELEGRAM
🏆 Вся правда о хакатонах в России от Java Boys и Jmix

🌐 Смотреть на YouTube
🌍 Смотреть на VK Видео

Что на самом деле происходит на хакатонах? Как собрать сильную команду, не слиться на следующий день и дойти до победы?

Хакатоны - это одно из моих увлечений в разработке. То ради чего я готов мало спать на протяжении нескольких дней, пока мы готовим очередной невероятный проект 😅

Моя команда называется "Java Boys". Сложно придумать другое название, когда тебя окружают один джависты.

И вот мы наконец сняли подкаст про хакатоны с Дмитрием Черкасовым, DevRel-ом команды Jmix, отечественного java-фреймворка для быстрой разработки, основанного на Spring Boot.

На подкасте мы обсудили:

— как выбрать задачу, чтобы не перегореть и успеть к дедлайну
— почему Jmix стал нашим ключевым инструментом на хакатонах
— как организована работа внутри нашей команды
— какие проекты мы делали и почему они побеждали
— и что нужно, чтобы вам тоже начать побеждать

Много живого опыта, немного самоиронии и полезные советы от тех, кто выигрывал хакатоны Сбера, ВТБ, МТС и других.

Если интересна внутренняя кухня хакатонов — обязательно смотрите!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🎉1
☕️ Вышла Jakarta EE 11 — крупнейшее обновление платформы с упором на Java 21, облачные приложения и производительность

Если вы давно в Java — вы наверняка помните Java EE. А если только входите в энтерпрайз-разработку — скорее всего, уже слышали про Jakarta EE.

Jakarta EE — это набор спецификаций и стандартов для разработки масштабируемых, надёжных и переносимых серверных приложений на Java. Это то, что стоит за большинством Java-серверов, включая GlassFish, WildFly, Open Liberty, Payara, WebLogic и многие другие.

Что входит в Jakarta EE?

Jakarta EE — это не одна технология, а экосистема. Вот лишь часть ключевых спецификаций:

- Jakarta Servlet — фундамент веб-приложений на Java.

- Jakarta RESTful Web Services (JAX-RS) — для создания REST API.

- Jakarta Persistence (JPA) — ORM-решение для работы с базами данных.

- Jakarta Contexts and Dependency Injection (CDI) — современная DI-модель.

- Jakarta Security, Jakarta Transactions, Jakarta Messaging (JMS) — всё, что нужно для построения зрелых корпоративных систем.


С 2017 года, после передачи Java EE под крыло Eclipse Foundation, проект получил второе дыхание. Так появился бренд Jakarta EE — с открытым процессом разработки, поддержкой крупных вендоров и фокусом на совместимость, эволюцию и инновации.

Что нового в Jakarta EE 11?

26 июня вышел Jakarta EE 11 — самый свежий релиз платформы. Что в нём интересного?

Jakarta Data — новая спецификация, упрощающая работу с хранилищами данных:

Репозитории по аналогии с Spring Data (CrudRepository, Pagination, query-методы).

Упрощение API:

- Удаление Managed Beans

- CDI теперь в центре внимания
- единый стиль внедрения зависимостей.

- Поддержка Java Records.

- Удалены устаревшие конструкции вроде SecurityManager.


Обновлённый TCK

Тестовая инфраструктура переписана на JUnit 5 и Maven, вместо старого Ant. Это упрощает сертификацию, ускоряет тестирование и снижает барьер входа для новых участников.

Поддержка Java 17 и 21, включая Virtual Threads — да, Jakarta EE теперь официально двинулась навстречу виртуальным тредам и масштабируемой многопоточности.

Кто поддержал релиз?

Компании вроде Microsoft, IBM, Red Hat, Oracle, Fujitsu, Payara и другие уже анонсировали совместимые реализации или активно работают над ними. Среди поддержанных профилей уже доступны:

Web Profile: Eclipse GlassFish

Core Profile: Open Liberty, WildFly, Fujitsu, Payara

📎 Подробнее о релизе Jakarta EE 11:

https://newsroom.eclipse.org/news/announcements/eclipse-foundation%E2%80%99s-jakarta-ee-working-group-announces-jakarta-ee-11-release

https://habr.com/ru/news/922700/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Как не облажаться с типами данных в PostgreSQL

Опубликовал перевод главы из "PostgreSQL Mistakes and How to Avoid Them"

Недавно вышла книга PostgreSQL Mistakes and How to Avoid Them — своего рода «коллекция грабель» для разработчиков и администраторов. Автор — Джимми Анджелакас, архитектор систем и активный участник PostgreSQL-сообщества. Он собрал десятки реальных ошибок из продакшн-проектов: от неочевидных тонкостей конфигурации до подводных камней SQL и выбора типов данных.

Я перевёл на русский одну из ключевых глав этой книги — про неправильное использование типов данных. В ней рассматриваются типы, которые вроде бы кажутся хорошим выбором, но на деле только создают проблемы.

Например:

- timestamp without time zone — источник боли при расчётах с часовыми поясами (и переходом на летнее/зимнее время).

- money — тип, который не хранит валюту и округляет в минус (буквально).

- char(n) и varchar(n) — не экономят место, а индексам только мешают.

- serial — привет из прошлого века, лучше использовать identity-колонки.


В этой главе подробно разбираются проблемы, которые в реальных системах могут оборачиваться часами отладки и багами, которые «не воспроизводятся». Особенно интересно, как наивный timestamp приводит к неправильным интервалам из-за перехода на зимнее время — и почему timestamptz лучше почти во всех случаях.

Если вы проектируете схемы БД, пишете SQL-запросы или просто работаете с PostgreSQL в проде — эта глава точно будет полезной. Причём независимо от стека: будь вы Java-разработчиком, Python-разработчиком или пишете на Go — с базой данных всё равно общаться придётся.

📖 Читаем перевод на Хабре:
https://habr.com/ru/articles/923572/
👍6🔥31
Forwarded from Spring АйО
🤖 Встречайте Koog — новый AI-фреймворк от JetBrains

Рустам Курамшин, эксперт сообщества Spring АйО, подготовил пост про новый AI-фреймворк от JetBrains – Koog.

AI-агенты — это не фантастика. Это новый уровень взаимодействия с LLM, где модели не просто болтают в чате, а действуют: они умеют вызывать внешние инструменты, планировать, запоминать контекст, адаптироваться и выполнять сложные задачи почти без участия человека.

Эти агенты становятся ключевым компонентом современных систем: от помощников в IDE и CI/CD пайплайнах до интеллектуальных обработчиков в бизнес-приложениях.

JetBrains представили Koog — open source фреймворк для разработки AI-агентов на Kotlin.

Что такое Koog?

Koog — это Agentic AI фреймворк, написанный полностью на идиоматичном Kotlin. Он позволяет создавать AI-агентов, которые:

- запускаются локально без внешних зависимостей
- умеют вызывать инструменты и API
- обрабатывают сложные пайплайны через графовые сценарии
- поддерживают мультимодели (OpenAI, Anthropic, Google, Ollama и др.)
- работают на JVM и JS (за счет Kotlin Multiplatform)

Koog можно использовать как для простых агентов “вопрос-ответ”, так и для построения сложных, многосоставных систем с устойчивой памятью, сжатой историей, потоковой обработкой ответов и гибкой трассировкой.

До недавнего времени экосистема Java не имела по-настоящему удобных, нативных инструментов для работы с AI-агентами, возможно кроме Spring AI в составе Spring Framework.

Пример использования минимального AI-агента в Koog:


fun main() = runBlocking {
val apiKey = System.getenv("OPENAI_API_KEY")

val agent = AIAgent(
executor = simpleOpenAIExecutor(apiKey),
systemPrompt = "Ты - очень полезный ассистент-помошник",
llmModel = OpenAIModels.Chat.GPT4o
)

val result = agent.run("Привет! Чем можешь помочь?")
println(result)
}


Koog — это, возможно, первый шаг к тому, чтобы писать LLM-based приложения просто на Kotlin без лишних зависимостей.

Как потестить Koog:

Репозиторий: https://github.com/JetBrains/koog

Документация: https://docs.koog.ai

Быстрый старт: https://docs.koog.ai/single-run-agents/

💬 Как вам Koog? Делитесь мнениями в комментариях! 👇
👍3
Смешно. Наткнулся на Telegram-бота для анализа тг-каналов. Считывает посты и выносит вердикт 😅

Вот что написал в режиме Roast Analysis 😁

📊 Channel Analysis Results by @ScratchAuthorEgoBot

🎯 Channel: @java_hub_official

🔥 Roast Analysis:

Слушай, чувак, ну вот ты опять, да? Канал создан, и сразу поток "Ява – это жизнь, Ява – это боль, Ява – это…". Мы поняли, ты джавист до мозга костей. "Java Boys"? Серьезно? Вы там что, в кожаных куртках и на байках по выходным катаетесь, распевая гимн Spring Boot? Или это просто самое креативное название, что пришло в голову куче чуваков, которые ночами гуглят, почему их null не такой уж null?

Твои посты, конечно, информативные, спору нет. Но иногда кажется, что ты пишешь их не для живых людей, а для искусственного интеллекта, которого тренируешь на знание всех аспектов JVM. "От Playground до Java 24", "JIT-компиляция", "Project Leyden"... Мне уже дурно от одной мысли. Можно хоть один пост про то, как ты бургер ел, а не про то, как байткод оптимизировался?

А эти твои хакатоны – "готов мало спать на протяжении нескольких дней"! Дружище, твоя печень уже, наверное, звонит в профсоюз и просит отпуск. Ты вообще знаешь, что такое "выходные"? Это когда ты не пытаешься за 48 часов запихнуть весь Интернет в Spring Boot-приложение. И "побеждали Сбер, ВТБ, МТС" – ну да, мы уже поняли, ты – хакатон-Терминатор. Мы же все просто лузеры, которые не знают, как правильно настроить temporal.io, чтобы он не рухнул от одного чиха.

И эта твоя любовь к Хабру! Каждый раз, как будто новую библию выпускаешь. "Опубликовал большую статью", "Перевел главу из книги"... Мы уже ждем твой подкаст с названием "Как я провел свои выходные, написав очередную статью на 10 тысяч символов о том, почему null – это плохо". Да, мы знаем, null – это миллиарднодолларовая ошибка. А ты что, прямо вот так и веришь, что Google не способен решить проблему с null? Или ты просто хотел покрасоваться, что "мы, Java-разработчики, не удивлены"? Ну да, вы же самые умные, вы-то точно не облажаетесь.

Короче, пора тебе уже признать, что ты не просто разработчик, ты – Java-гуру, который дышит байткодом и спит с IntelliJ IDEA в обнимку. Но иногда хочется, чтобы ты просто выдохнул, выключил свой MCP-сервер и рассказал что-нибудь, что не заставит мой мозг компилироваться в машинный код. А то от твоих постов можно получить переполнение стека в собственной голове.
😁14💯3👍2👏1
Forwarded from Spring АйО
📊 Java в 2025 году: взгляд на результаты опроса Stack Overflow

Эксперт Spring АйО Рустам Курамшин разобрал свежий отчёт Stack Overflow за 2025 год о результатах ежегодного опроса разработчиков за 2025 год, и это отличный повод взглянуть на экосистему Java через призму статистики и интересов сообщества.

Что происходит с Java и где мы сегодня?

🥈 Java — в топе, но не в лидерах

Java остаётся устойчиво популярной, но теряет позиции в рейтинге языков, которыми реально пользуются. В 2025 году она набрала 29.4% среди всех респондентов — это седьмое место. Для сравнения:

🛑JavaScript — 66%
🛑Python — 57.9%
🛑TypeScript — 43.6%

Что интересно: C# проигрывает Java (27.8%), хотя отрыв минимальный. Kotlin находится далеко внизу с 10.8%.

👩‍💻 А как насчёт любви к Java?

В рейтинге «admired & desired» Java получила:

🛑15.8% хотят продолжать работать с ней
🛑41.8% тех, кто с ней работал, хотят продолжать

Это не худшие цифры, но явно не звёздные. Rust, например, вызывает желание продолжать у 72.4% разработчиков.

👩‍💻 Что по инструментам разработки?

Java-разработчики традиционно предпочитают инструменты JetBrains, и это подтверждается:

🛑IntelliJ IDEA — на 4 месте по популярности (27.1%) и на втором по желанию использовать (17.5%)

🛑VS Code по-прежнему вне конкуренции (используется 75.9%, желают 48.9%), но для серьёзной Java-разработки — не первый выбор

🛑Gradle и Maven уверенно держатся в середине таблицы среди сборщиков и DevOps-инструментов, уступая npm, Docker и Terraform.

👩‍💻 Java на бэкенде

Среди web-фреймворков Spring Boot — единственный представитель Java в топе, с 14.7% популярности. Это чуть меньше, чем у FastAPI (14.8%), и сильно меньше Node.js (48.7%) и React (44.7%).

Однако в категории "admired" Spring Boot выглядит лучше — 53.7% разработчиков, использовавших его, хотят продолжать. Это говорит о стабильности интереса к Spring Framework.

👩‍💻 Базы данных: знакомые лица

Всё, что любят Java-разработчики, — на месте:

🛑PostgreSQL — №1 по популярности и симпатиям

🛑MySQL, MongoDB, Redis — всё ещё в активной эксплуатации

🛑Даже H2 на удивление стабильно набирает 5%

⚙️ Выводы

Java остаётся мощной и зрелой экосистемой, но интерес разработчиков всё больше смещается в сторону Python и TypeScript — особенно в новых проектах и AI-направлениях.

Если мы хотим, чтобы Java оставалась актуальной, нужно:

🛑Делать ставку на современный стек

🛑Привлекать новых разработчиков через понятные и интересные точки входа вроде Spring Framework

📎 Полный отчёт: https://survey.stackoverflow.co/2025/technology/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤔1