Обновить
512K+

Java *

Объектно-ориентированный язык программирования

208,9
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

@Transactional в Spring под капотом

Время на прочтение16 мин
Охват и читатели244K

Spring предоставляет много удобств и многие его возможности кажутся магией - поставил аннотацию и все работает. Но, когда что-то идет не так (например, почему-то не работают транзакции как ожидается), приходится лезть внутрь и смотреть, где сломалось. В статье показан путь от создания инфраструктуры для обработки Transactional до обработки исключений.

Читать далее

Если у вас не работает Spring BootJar

Время на прочтение4 мин
Охват и читатели4.6K

Решаем проблемы с загрузкой Spring Boot Jar


image


Сталкивались ли вы с проблемой запуска нового загрузочного архива Spring Boot?


Вообще, новация в этом направлении уже не первая, стандартов особых нет. Поэтому многие огребают проблемы и решают их на форумах и стек-оверфлоу.
Если вы также столкнулись с проблемой, я помогу её решить. В таком случае читаем дальше.

Читать дальше →

Как расширить Spring своим типом Repository на примере Infinispan

Время на прочтение6 мин
Охват и читатели3.8K

Это моя первая статья, в ней я попытаюсь описать полученный мною практический опыт работы со Spring Repository под капотом фреймворка. Готовых статей про эту тему я в интернете не нашёл ни на русском, ни на английском, были только несколько репозиториев исходников на github, ну и исходники самого Spring. Поэтому и решил, почему бы не написать, вдруг тема написания своих типов репозиториев для Spring для кого-то ещё актуальна.

Программирование для Infinispan я не буду рассматривать подробно, детали реализации всегда можно посмотреть в исходниках, указанных в конце статьи. Основной упор сделан именно на сопряжение механизма Spring Boot Repository и нового типа репозитория.

Читать далее

Опыт сопряжения Java, JavaScript, Ruby и Python в одном проекте посредством GraalVM

Время на прочтение18 мин
Охват и читатели8.8K
В прошлом месяце вышла стабильная LTS-версия многоязычной среды выполнения GraalVM 20.3.0 от корпорации Oracle и мне захотелось испробовать её для решения какой-нибудь интересной практической задачи. Для тех кто не в курсе, приведу краткое описание этой новой платформы. GraalVM позволяет использовать в едином окружении различные популярные языки программирования и обеспечивает их разностороннее взаимодействие в рамках некоторой общей среды выполнения.


Схематическое изображение архитектуры GraalVM из официальной документации.

Добавление новых языков в GraalVM осуществляется с помощью специального фреймворка Truffle, выполненного в виде библиотеки Java. Фреймворк предназначен для создания реализаций языков программирования в качестве интерпретаторов для самомодифицируемых абстрактных синтаксических деревьев (AST). При желании на его основе можно создать собственный язык, в официальных репозиториях GraalVM подробно рассмотрен пример реализации такого проекта под названием SimpleLanguage. Интерпретаторы, которые были написаны с использованием фреймворка Truffle, будут автоматически использовать GraalVM как JIT-компилятор непосредственно для самой реализации языка запускаемой на JVM-платформе и, соответственно, иметь возможность взаимодействия и двустороннего обмена данными в одном и том же пространстве памяти посредством специально разработанного протокола и программного интерфейса Polyglot API.

Платформа GraalVM вместе с исполняемой программой на смеси самых разных языков может быть представлена в виде автономного и самодостаточного исполняемого файла, либо работать поверх OpenJDK, Node.js или даже внутри Oracle Database.
Читать дальше →

Trunk Based Development и Spring Boot, или ветвись оно все по абстракции

Время на прочтение15 мин
Охват и читатели13K

Всем привет!

Закончилась осень, зима вступила в свои законные права, листья уже давно опали и перепутанные ветви кустарников наталкивают меня на мысли о моём рабочем Git репозитории… Но вот начался новый проект: новая команда, чистый, как только что выпавший снег, репозиторий. "Тут все будет по другому" - думаю я и начинаю "гуглить" про Trunk Based Development.

Если у вас никак не получается поддерживать git flow, вам надоели кучи этих непонятных веток и правил для них, если в вашем проекте появляются ветки вида "develop/ivanov", то добро пожаловать в под кат! Там я пробегусь по основным моментам Trunk Based Development и расскажу о том, как реализовать такой подход, используя Spring Boot.

Читать далее

Принцип слоеного теста

Время на прочтение12 мин
Охват и читатели6.5K
Всем неустрашимым на пути от отрицания до убеждения посвящается…

image

Среди разработчиков бытует справедливое мнение, что если программист не покрывает код тестами, то попросту не понимает зачем они нужны и как их готовить. С этим трудно не согласиться, когда уже понимаешь о чем речь. Но как достичь этого драгоценного понимания?
Читать дальше →

Генератор неслучайных чисел

Время на прочтение4 мин
Охват и читатели21K
Этот код напечатает случайную последовательность латинских букв, так ведь?

import java.util.Random;

class WTF {
    public static void main(String[] args) {
        Random r = new Random(76880392499L<<11);
        String alphabet = " abcdefghijklmnopqrstuvwxyz";
        int n;
        while ((n = r.nextInt(alphabet.length())) > 0)
        	System.out.print(alphabet.charAt(n));
    }
}

Можете проверить; вывод кажется совсем не случайным. Как же так вышло?

Прежде всего: какой шанс, что из всех последовательностей латинских букв напечатается именно эта? Сгенерировано 10 случайных чисел, каждое выбиралось из 27 вариантов, значит всего вариантов было $27^{10} \approx 2.06\cdot10^{14}$. Если считать, что все варианты равновероятны, то нам выпал один шанс из двухсот миллионов миллионов! Ух!
Читать дальше →

Контроль версий в базах данных — Сравнение Liquibase и Flyway

Время на прочтение6 мин
Охват и читатели20K

Автоматизированный рефакторинг баз данных должен быть частью жизненного цикла разработки наших продуктов наряду с рефакторингом любых других программных компонентов. Исторически так сложилось, что контроль версий исходников покрывал в подавляющем большинстве случаев только так называемый прикладной код (например, Java), исключая SQL, скрипты на котором носили внешний характер и применялись к целевым базам данных, минуя контроль версий.

Тем не менее, в связи с ростом популярности аджайл методологии в последние годы и востребованностью непрерывной интеграции и развертывания, мы больше не можем ограничивать применение CI/CD только к коду приложения, оставив SQL позади.

В аджайл проектах тех требования вырабатываются спринт за спринтом, поэтому очень маловероятно, что вы сможете с самого начала точно угадать со структурой модели базы данных. Модель базы данных развивается по мере формирования продукта. Многие команды и компании разрабатывают собственные процессы контроля версий баз данных, подходящие сугубо для целей их собственных продуктов, но существуют и общие решения, уже приобретшие статус отраслевых стандартов. Им мы и уделим внимание в этой статье.

Ниже будут рассмотрены сходства и различия ныне хорошо известных продуктов Flyway и Liquibase.

Читать далее

Проектируем интенты с Apache NlpCraft

Время на прочтение8 мин
Охват и читатели1.1K
В данной заметке я продолжу знакомить читателей с возможностями проекта Apache NlpCraft. Первая заметка была посвящена краткому описанию ключевых особенностей системы, следующая — обзору стандартных NER компонентов. Данная статья посвящена вопросу проектирования интентов при построении диалоговых систем.

Напомню, что такое интент. Интент — это сочетание функции и правила, по которому эта функция должна быть вызвана. Правило — это чаще всего шаблон, основанный на наборе ожидаемых именованных сущностей в тексте запроса. В большинстве существующих диалоговых систем данный шаблон — это просто список элементов.
Читать дальше →

Управление признаками сущностей в Apache Kafka

Время на прочтение6 мин
Охват и читатели2.7K

Введение


Во время работы над задачами машинного обучения с онлайн-данными есть необходимость собирать различные сущности в одну для дальнейшего анализа и оценки. Процесс сбора должен быть удобным и быстрым. А также часто должен предусматривать бесшовный переход от процесса разработки к промышленному использованию без дополнительных усилий и рутинной работы. Для решения этой проблемы можно воспользоваться подходом с использованием Feature Store. Этот подход со многими деталями описан вот здесь: Meet Michelangelo: Uber’s Machine Learning Platform. В этой статье описывается интерпретация указанного решения для управления признаками в виде прототипа.

Читать дальше →

Breeks — построй свою неделю

Время на прочтение5 мин
Охват и читатели8.8K

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

Читать далее

Использование Decision Table в JBoss Drools

Время на прочтение12 мин
Охват и читатели11K

Правила. Мы знаем это слово с самого детства. Сначала родители учат нас, как нужно правильно поступать, потом мы приходим в школу, где учителя диктуют свои порядки. В университете мы вновь сталкиваемся с правилами, которые для нас устанавливают преподаватели и деканат. По мере взросления мы начинаем следовать законам, которые разработаны государством. Что общего у всех этих правил? То, что они выверены годами, десятилетиями, а некоторые даже и поколениями. Представьте, какой была бы наша жизнь, если бы правила менялись часто: каждую неделю или каждый день!

Читать далее

Wavenote: Как я разработал музыкальное приложение и полюбил Android

Время на прочтение7 мин
Охват и читатели6.8K

Привет! Меня зовут Седов Фёдор, я ученик 11 класса и выпускник «IT Школы Samsung» 2020 года. Мне предложили рассказать о своём опыте разработки мобильного приложения, моего первого большого проекта - блокнота для музыкантов (и поэтов). С этим проектом я одержал победу в нескольких конкурсах, а сейчас мечтаю, что у приложения появится много пользователей, которым оно будет помогать каждый день.

Читать далее

Ближайшие события

Практическое применение аннотации в Java на примере создания Telegram-бота

Время на прочтение20 мин
Охват и читатели22K
Рефлексия в Java — это специальное API из стандартной библиотеки, которая позволяет получить доступ к информации о программе во время выполнения.

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

Многие ответы заканчиваются на этом, но что более важно, это понимание вообще концепции рефлексии. Мы гонимся за короткими ответами на вопросы, чтобы успешно пройти собеседование, но не понимаем основы — откуда это взялось и что именно понимать под рефлексией.

В этой статье мы коснемся всех этих вопросов применительно к аннотациям и на живом примере увидим как использовать, находить и писать свою.

Приятного чтения

Scala 3: новый, но необязательный синтаксис

Время на прочтение4 мин
Охват и читатели8.9K


Это первая статья в моей серии статей с обзором изменений в Scala 3.


Давайте начнем с наиболее противоречивых нововведений: опциональных фигурных скобок и
нового синтаксиса для управляющих конструкций.


Опциональные фигурные скобки делают Scala-код больше похожим на Python или Haskell, где для группировки выражений используются отступы. Рассмотрим примеры, взятые из 3-го издания моей книги Programming Scala, которое сейчас готовится к публикации.

Читать дальше →

Управление Java Flight Recorder

Время на прочтение15 мин
Охват и читатели66K


Не так давно в мире Java случилось грандиозное событие. Во всех актуальных версиях OpenJDK стал доступен Java Flight Recorder (или просто JFR).


Что такое Java Flight Recorder?

JFR – это механизм легковесного профилирования Java-приложения. Он позволяет записывать и в последствии анализировать огромное количество метрик и событий, происходящих внутри JVM, что значительно облегчает анализ проблем. Более того, при определённых настройках его накладные расходы настолько малы, что многие (включая Oracle) рекомендуют держать его постоянно включённым везде, в том числе прод, чтобы в случае возникновения проблем сразу иметь полную картину происходившего с приложением. Просто мечта любого SRE!


Раньше этот механизм был доступен только в коммерческих версиях Java от корпорации Oracle версии 8 и более ранних. В какой-то момент его реимплементировали с нуля в OpenJDK 12, затем бекпортировали в OpenJDK 11, которая является LTS-версией. Однако вот OpenJDK 8 оставалась за бортом этого праздника жизни. Вплоть до выхода апдейта 8u272, в который наконец-то тоже бекпортировали JFR. Теперь все (за редким исключением) пользователи OpenJDK могут начинать использовать эту функциональность.


Но вот незадача: большая часть документации в интернете относится к старой, коммерческой, версии JFR и во многом не соответствует версии, которая присутствует в OpenJDK. Да и та, что есть, весьма скудная и не способствует пониманию того, как это всё использовать.


В предлагаемой вашему вниманию статье я расскажу, как управлять работой JFR и как его настраивать.

Читать дальше →

Как написать (игрушечную) JVM

Время на прочтение10 мин
Охват и читатели8.9K
Статья про KVM оказалась интересной для читателей, поэтому сегодня публикуем новый перевод статьи Serge Zaitsev: как работает Java Virtual Machine под капотом.

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

Я попытаюсь написать игрушечную (и неполную) JVM, чтобы показать основные принципы ее работы. Надеюсь, эта статья вызовет у вас интерес и вдохновит на дальнейшее изучение JVM.
Читать дальше →

Как создать изображение штрих-кода на Java

Время на прочтение7 мин
Охват и читатели3.7K

Штрих-коды повсеместно используются в торговле и розничной торговле для помощи в отслеживании, покупках и  инвентаризации. Они позволяют организациям вести точный учет их поставок, товаров и других предметов, которые являются ключевыми для их деятельности. Для международного и  национального использования существуют разные штрих-коды, которые используются  в определенных контекстах. Например, штрих-коды UPC и EAN выглядят одинаково по своему форматированию  и могут использоваться аналогичным образом, но UPC - это в  основном  североамериканская система кодирования;  однако, как UPC и  EAN  будут  использоваться во всем мире.  QR - коды также используется во всем мире , но  является  обычно используется для обмена  сложными наборами информации,  например, сведениями о товарах  или  ссылками на веб-сайты.  

Следующие  пять  API-интерфейсов  позволят вам создавать изображения штрих-кода в трех ранее упомянутых форматах. Это позволит вам распечатать или создать упаковку с прикрепленными вашими личными штрих-кодами, без необходимости  извлекать ее из внешнего источника. Это может быть особенно полезно для малого бизнеса, поскольку обеспечивает большую независимость  как компании и улучшает  визуальную и профессиональную привлекательность ваших продуктов . 

Читать далее

Идеальный SAST. Тестируем парсеры

Время на прочтение9 мин
Охват и читатели4.1K

Пока индексируется github (спасибо лимиту в 5000 запросов в час), поговорим пока о тестировании парсеров. Обсудим пожелания к процессу разработки грамматик, их тестирования и контроля качества так, что бы не превращаться в существо на картинке.

Ждать дальше

Big/Bug Data: анализируем исходный код Apache Flink

Время на прочтение11 мин
Охват и читатели1.7K
image1.png

Приложения, использующиеся в области Big Data, обрабатывают огромные объемы информации, причем часто это происходит в реальном времени. Естественно, такие приложения должны обладать высокой надежностью, чтобы никакая ошибка в коде не могла помешать обработке данных. Для достижения высокой надежности необходимо пристально следить за качеством кода проектов, разрабатываемых для этой области. Решением данной проблемы и занимается статический анализатор PVS-Studio. Сегодня в качестве подопытного для анализатора был выбран проект Apache Flink, разработанный организацией Apache Software Foundation — одним из лидеров на рынке ПО для Big Data.
Читать дальше →