Обновить
154.36

Java *

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

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

Декомпозиция систем по ограниченным контекстам DDD — глубокое погружение

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

"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.

Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.

Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.

Читать далее

Может ли Java-приложение использовать больше памяти, чем размер кучи

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

Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти. 

Давайте начнем со структуры памяти Java-приложения и источников потребления памяти.

Читать далее

GraphQL: сложность запросов

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

Всем привет! Меня зовут Олег Негрозов, я бэкенд-разработчик из команды Talantix. В мире GraphQL есть один минус, который одновременно является и плюсом — пользователь ограничен лишь описанной схемой. Он может попросить у сервера все данные, доступные ему, или написать такой сложный запрос, который будет выполняться целую вечность. О том, как защититься от этого и ограничить свои API, я расскажу в сегодняшней статье.

Читать далее

Что нового в Java 20?

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

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

Последняя версия JDK (Java Development Kit) 19 была выпущена 20 сентября 2022 года. Следующая версия, Java 20, планируется как релиз без LTS, а следующая версия 21 — как релиз с долгосрочной поддержкой (LTS). Ожидается, что грядущая версия 20 принесет ряд замечательных обновлений, поэтому мы с нетерпением ждем марта, чтобы получить ее в распоряжение!

Но прежде чем перейти к рассмотрению JEP, запланированных для Java 20, давайте сделаем краткий обзор процесса обновления Java и концепции предложений по улучшению, чтобы целиком представлять картину происходящего.
Читать дальше →

Java-дайджест 5-12 декабря 2022

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

Общее

Умер Фредерик Брукс, отец 8-битного байта, автор "Мифического человеко-месяца""Design of Design" и "Серебряной пули не существует".

Java, язык и платформа

SlashData провели опрос по состоянию экосистемы разработки и по нему видно, что использование Java выросло со времен 2020 года процентов на 10.

Новые JEP для Java 20:

Читать далее

Весенние конференции JUG Ru Group: много офлайна и много онлайна

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

Помните доисторические времена вроде 2019 года, когда ещё не было пандемии? Тогда мы проводили офлайновые конференции, и обычно они длились дня два с утра до вечера: можно успеть и доклады послушать, и наобщаться вволю.

В эпоху онлайн-конференций многие ностальгировали по этому и просили «вернуть как было». Однако другие участники успели полюбить удобство онлайна (например, те, кто живёт далеко от Москвы/Петербурга). И просто вернуть прежний формат означало бы сделать им хуже.

Поэтому на наших весенних конференциях мы постараемся, чтобы никто не ушёл обиженным: и офлайн будет двухдневным (с 2019-го такое не делали), и у онлайн-участников будет много контента. Подробности — под катом.

Читать далее

Запросы к MongoDB из Java с помощью билдера фильтров

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

В этой статье разберемся, как использовать класс Filters для запросов к MongoDB.

Класс Filters представляет собой билдер для удобного написания фильтров запросов. Фильтры — это некоторые условные операции, которые MongoDB использует для ограничения результатов.

Читать далее

Двадцать бабушек – уже рубль. Как GraalVM Native Image позволяет экономить джавистам и девопсам деньги на облако

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

Первая статья в нашем блоге. Я постарался написать хороший текст на основе докладов из Failover Bar и прошлого митапа Альфы, и человеческими словами объяснить, зачем нужен GraalVM.

Мы поговорим об экономии на облаках в мире победившего Кубернетиса, обсудим перформанс современного приложения, и какие ништяки Native Image помогут нам во всём этом.

Mad skills bonus: вы сможете писать на Java приложения для командной строки так, что они не будут тормозить по сравнению со скриптами на Bash. Но вначале небольшая телега вместо вступления.

Читать далее

Как ускорить прогон тестов в многомодульном проекте Maven

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

Большое количество модулей Maven замедляет сборку проекта и время прогона тестов. Для того, чтобы сохранить многомодульную структуру проекта и быстро прогонять тесты, мы в Wrike написали новый инструмент — Maven Modules Merger, который сократил время некоторых сборок с 50 до 12 минут. В статье подробно расскажу о том, с какими проблемами нам помог справиться Maven Modules Merger и поделюсь подробностями его создания.

Читать далее

Spring Type Conversion and Field Formatting — пишем первый конвертер или форматтер

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

В статье я хотел бы рассмотреть написание собственных конвертеров типов (Spring Type Conversion) и форматтеров полей (Spring Field Formatting), в том числе с использованием аннотаций.

Статья написана by junior for junior, поэтому прошу отнестись к изложенному ниже с изрядной долей снисхождения :)

Читать далее

RabbitMQ + Spring boot + Docker. Отправляем и получаем сообщения через Producer и Consumer. Пошаговое руководство

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

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

Читать далее

Неблокирующий повтор (retry) в Java и проект Loom

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

Неблокирующий повтор (retry) в Java и проект Loom


Введение


Повтор (retry) операции является старейшим механизмом обеспечения надежности программного обеспечения. Мы используем повторы при выполнении HTTP запросов, запросов к базам данных, отсылке электронной почты и проч. и проч.

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

Security микросервисов с помощью Spring Cloud Gateway и TokenReley

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

Данная статья результат поиска некоего каноничного решения организации безопасности доступа к ресурсам в микросервисной архитектуре, построенной в экосистеме Spring. После прочтения десятка статей по данной тематике, к сожалению, не нашел то, что искал. Spring Security оказался одной из самых недопонятых технологий. Основная проблема у всех - изобретение своего велосипеда поверх стандартного функционала Spring Security. Зачастую, данные статьи сопровождаются комментариями никогда так не делать. И у многих, наверно, возникает вопрос, а как собственно можно делать. Ситуацию несколько прояснила официальная документация. Взяв её за основу, я хочу показать, как можно организовать безопасность микросервисов максимально простым и быстрым способом.

Читать далее

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

JUnit: тестирование методов, вызывающих System.exit()

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

В определенных ситуациях нам может потребоваться, чтобы метод вызывал System.exit() и завершал работу приложения. Например, в случае если приложение должно быть запущено только один раз, а затем завершено, или в случае фатальных ошибок, таких как потеря соединений с базой данных.

Если метод вызывает System.exit(), вызвать его из юнит-тестов и делать ассерты становится трудно, потому что это приведет к завершению юнит-теста.

В этом посте мы рассмотрим, как тестировать методы, вызывающие System.exit() с использованием фреймворка JUnit.

Читать далее

Миграция на Hibernate 6

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

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

Для большинства приложений, использующих Hibernate 5, миграция будет относительно быстрой и простой. Но вам придется исправить и обновить некоторые вещи, если вы все еще используете более старую версию Hibernate или некоторые функции, устаревшие в Hibernate 5.

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

Читать далее

Книга «Программируем на Java. 5-е межд. изд.»

Время на прочтение15 мин
Охват и читатели7.1K
imageДобрый день, Хаброжители!
Пополняем коллекцию O'Reilly.

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

• Программируйте на Java с использованием компилятора, интерпретатора и других инструментов.
• Исследуйте средства управления потоками и параллельной обработки.
• Изучайте обработку текста и мощные API.
• Создавайте приложения и службы на базе современных сетевых коммуникаций или веб-технологий.
Читать дальше →

DDD, HEXAGON, HIBERNATE, не считая JOOQ. Часть 2: гексагональная архитектура

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

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

Читать далее

Testcontainers: тестирование с реальными зависимостями

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

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

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

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

Традиционно интеграционное тестирование представляет собой сложный процесс, который может включать несколько этапов.

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

Читать далее

Сборка мусора в неисправных JVM, проактивный подход

Время на прочтение8 мин
Охват и читатели6.2K
image

Команда Netflix Cloud Data Engineering работает с различными приложениями для JVM, включая такие популярные хранилища данных, как Cassandra и Elasticsearch. Хотя большинство наших кластеров стабильно работают, обходясь выделенной им памятью, иногда «запрос смерти» или ошибка в самом хранилище данных приводят к перерасходу памяти, что может спровоцировать лишние циклы сборки мусора или даже привести к исчерпанию памяти в JVM.
Читать дальше →

Ещё раз про умный дом

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

Представляю программно-аппаратный проект: локальную сеть умный дом с акцентом на режим охраны. В качестве управляющего устройства используется сотовый телефон с ОС Android версией не ниже 5.0. Через кабель USB телефон подключен к устройству USB/RS485. Для питания всей системы используется блок бесперебойного питания . Узлы управления сбором информации от датчиков и управления исполнительными устройствами реализованы на микросхемах ESP 32. Обмен информацией и питание внешних устройств производится через сетевой кабель. Управляющее устройство (телефон) периодически опрашивает узлы сети и если есть информация от датчиков, в зависимости от настроек, передает сообщения либо в виде SMS, либо в TELEGRAM. А если получена SMS – команда она передается для исполнения на ВУ. Также возможна автономная работа по заложенным сценариям.

Читать далее

Вклад авторов