Обновить
128K+

Java *

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

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

Разворачиваем проект серверов Minecraft

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

Minecraft – нечто большее, чем игра. До сих пор думаешь, что это очередная игра для детей? Вынужден опровергнуть твоё мнение. Эту игру используют, как в школах для развития детей, так и для воссоздания архитектурных объектов, улучшения безопасности на реальных улицах, изучения основ программирования, и, в конечном итоге, для простой релаксации.

Не очень люблю воду в текстах, поэтому буду краток. Название статьи: «Разворачиваем проект серверов Minecraft». Что будем делать? Запускать проект серверов Minecraft. Для чего? Для практики, для отвлечения, и, в конечном итоге, для небольшого (а может и большого) практически пассивного источника дохода.

Читать далее

ORM — отвратительный анти-паттерн

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

От автора перевода: Написанный далее текст может не совпадать с мнением автора перевода. Все высказывания идут от лица оригинального автора, просьба воздержаться от неоправданных минусов. Оригинальная статья выпущена в 2014 году, поэтому некоторые фрагменты кода могут быть устаревшими или "нежелаемыми".

Содержание статьи:

В статье приведены доводы, которые ставят под вопрос правильность присутствия ORM в рамках ООП.

Читать далее

Как отлаживать коллекции Java с Lightrun на продакшене

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

К старту курса по разработке на Java делимся руководством о том, как отлаживать коллекции Java на продакшене с платформой Lightrun и избегать при этом неприятностей с методом list.toArray(). За подробностями приглашаем под кат.

Читать далее

Блеск и нищета фреймворков тестирования: используем Groovy для скриптинга end-to-end тестов

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

Безусловно, тестирование важный аспект разработки ПО. Наличие тестов - это хорошо, а удобное тестирование - еще лучше. В этой статье я расскажу как запускать тесты, написанные на groovy без gradle, maven и даже без предварительной компиляции этих тестов, а также почему JUnit 5 - это намного больше, чем просто хорошая библиотека для unit тестов.

Читать далее

Как мы перевели API-модули микросервисного проекта с Feign на OpenFeign

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

Всем привет! Недавно мы решили задачу, как перейти на новую версию Spring + OpenFeign в мультимодульном проекте, в котором выделен API с навешенными аннотациями @FeignClient@RestController и @FeignClient. Я, Алексей Скакун, @hyragano ведущий разработчик ДОМ.РФ, поделюсь с вами этим кейсом.

Читать далее

Почему важен graceful shutdown в облачной среде (на примере Kubernetes + Spring Boot)

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

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

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

Читать далее

Thymeleaf + Spring WebFlux + Spring Security

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

Thymeleaf появился довольно давно, как минимум 10 лет назад, но он до сих пор весьма популярен и активно поддерживается. Шаблоны Thymeleaf удобны тем, что при простом открытии в браузере они выглядят как обычные HTML-страницы и их можно использовать как статический прототип приложения.

В этой статье рассмотрим, как создать простое приложение Spring WebFlux с Thymeleaf, аутентификацией Okta OIDC, защитой от CSRF-атак и контролем полномочий.

Читать далее

Ускоряем java-рефлексию в 2022

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели13K

После прочтения заголовка у среднестатистического читателя наверняка возникнет весьма логичный вопрос: «Кто такая эта ваша рефлексия и зачем её ускорять?»

И если первая часть будет волновать только совсем уж откровенных неофитов (ответ тут), то вторая точно нуждается в пояснении.

К текущему моменту рефлексия (и особенно рефлективные вызовы методов) так или иначе используется в прорве самых разных фреймворков, библиотек и просто любых приложениях, по какой-либо причине требующих динамические возможности.

Однако в java рефлексия реализована не самым быстрым (зато надёжным) методом, а именно, через использование JNI-вызовов. JNI (Java Native Interface) – очень полезная штука, позволяющая машине вызывать код из «внешнего мира», библиотек, написанных на C/C++ или ассемблере.

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

Тем не менее, рефлексия работает именно так: машина «выходит наружу», копается в своих внутренностях и «возвращается обратно», доставляя пользователю полученную информацию или вызывая методы/конструкторы.

А теперь представьте примерное быстродействие какого-нибудь фреймворка, который в процессе работы постоянно осуществляет рефлективные вызовы…

Читать далее
Представьте, что вы оказались в шахте: перед вами каменный монолит, в котором что-то поблёскивает — куски золота, не иначе. Блеск заманчивый, но вокруг грубый камень. В разработке часто возникает похожая ситуация: полезный юзерам код со всех сторон окружён камнем в виде инфраструктуры, конвертеров данных и легаси. На помощь приходит микросервисная архитектура: огромную глыбу можно раздробить на кусочки, в каждом из которых камня поменьше, а полезного кода — побольше. ПСБ предлагает разработчикам .NET и Java поддаться золотой лихорадке: посмотрим, кто лучше добывает полезный код из монолита. Присоединяйтесь к своей команде и работайте на общую победу: в зачёт идёт каждый правильный ответ.
Нужно больше золота

Жил на свете добрый Jooq – как подружиться с хранимками в Oracle

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

Приветствую!

Меня зовут Артём, я back-end разработчик на продукте WFM (Workforce Management). В компании наш продукт помогает в развитии процессов розничной сети, одна из основных наших задач — это построение рабочего графика для персонала розничного магазина.

В данной статье я хотел бы познакомить вас (в очередной раз, так как на хабре уже есть несколько статей, посвященных этой библиотеке) с Jooq и показать, как можно легко работать с хранимыми процедурами Oracle. Будет немного вводной части, а затем посмотрим примеры.

Почти в каждом продукте, скорее всего, есть база данных. В нашем случае это РСУБД Oracle, большая часть логики содержится внутри в виде хранимых процедур. Удобство взаимодействия с базой всегда было достаточно важной и щепетильной задачей для любого бэкендера, особенно, если речь идет о взаимодействии с хранимками, которые выдают и принимают "сложные" plsql-типы. Конвертация plsql-типа в java-тип — задачка не самая приятная, мягко говоря, и удобных инструментов в этом деле не так уж много.

Давайте кратко вспомним некоторые популярные подходы к взаимодействию с РСУБД, какими достоинствами и недостатками они обладают.

Читать далее

Механизмы сериализации в Java и Kotlin

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

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

Читать далее

Знакомимся с Javassist

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

Всем большой привет! Перед началом стоит сказать, что библиотека Javassist довольно мощный инструмент, так как стирает почти все границы у того безграничного языка JAVA, позволяя разработчику осуществлять манипуляции связанные с байткодом.

Конечно, получив доступ к байткоду, а ровно и к возможности воздействовать на этот самый байткод вам совсем не обязательно вклиниваться в него. Javassist можно использовать и в “мирных” целях!

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

Итак, если после всех предостережений вы все же решили использовать эту библиотеку, то давайте начинать!

В этой статье мы рассмотрим Javassist, как инструмент, с помощью которого мы будем вклиниваться в существующий байткод и трансформировать его.

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

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

Ответ очевиден – приложение не может само себя изменять. Т.е. приложение не может само изменять свой же байткод. Это должен делать кто-то другой. Этот кто-то другой – такое же Java приложение, но заточенное на работу с байткодом.

Читать далее

Думаете о большой пропускной способности? Встречайте виртуальные потоки

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

Цель этой статьи — изучить известные факты о грядущем расширении модели многопоточности Java.

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

Да, мы говорим о JEP-425: Virtual Threads.

Читать далее

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

Как стать Java разработчиком — путь специалиста Leantech с нуля до уровня Middle

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

Привет! Меня зовут Дима, я Java-разработчик. Хочу рассказать как я пришел в профессию, вырос до мидла и перешел из госучреждений в аутсорс компанию по разработке приложений. Рассказ будет полезен джунам и тем, кто хочет изучать Java, но боится потратить время впустую.

Я стараюсь следить за трендами в разработке, чтобы знать какие технологии набирают популярность и не отставать от коллег. Так вот, судя по статистике от Github, Java до сих пор находится в топ-3 самых востребованных языков разработки, хоть и немного сдала позиции за последние пару лет. На первом месте JavaScript, а на втором Python.

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

Читать далее

Java 17 для тех, кто не следил. Часть 2: API

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

image


Если обновляешься со старой Java на LTS-версию Java 17, как разобраться сразу во всех фичах за несколько лет? Чтобы помочь с этим, мы уже публиковали расшифровку доклада tagir_valeev с нашего IT-фестиваля TechTrain. Но доклад такой подробный, что разделили его на два текста: в предыдущем была основная часть про языковые изменения, а теперь представляем вам завершающую часть про API.


И напоминаем, что следующий TechTrain состоится уже 14 мая (онлайн, бесплатно), а в июне будет много Java-докладов на JPoint (онлайн + офлайн).


Далее повествование идёт от лица спикера.

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

О чём расскажут на TechTrain 2022 Spring

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

14 мая мы проведём онлайн-фестиваль TechTrain, участие бесплатно (надо только зарегистрироваться).

Там будет восемь докладов, и их набор очень эклектичный. Потому что ещё мы проводим самые разные IT-конференции (от Java до дата-инжиниринга), и TechTrain связан со всеми их направлениями сразу: от каждого будет по одному докладу.

Вряд ли вы станете смотреть всю эту пёструю подборку целиком (кому важны одновременно Node.js, Spring Data, WebRTC и Selenide?) Но вот шансы на то, что среди такого разнообразия есть что-то для вас, высоки.

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

Читать далее

Асинхронное взаимодействие Spring-микросервисов с помощью Kafka

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

В этой статье разберемся, как реализовать обмен сообщениями между Java-микросервисами на Spring с помощью Kafka.

Читать далее

GraphQL-gRPC API Gateway на Java

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

В данной статье я хочу рассказать про процесс создания концепта API Gateway для обеспечения взаимодействия фронтенда, использующего GraphQL, и бэкенда, использующего gRPC, на Java с использованием фреймворка Quarkus.

Читать далее

Ограничиваем Prometheus метрики в Webflux

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

Всем привет! В текущей статье, хотелось бы поделиться опытом решения задачи ограничения вывода метрик в Prometheus для сервиса, написанного в функциональном стиле на Spring Webflux.

Казалось бы – подключил Actuator, Micrometer, Prometheus зависимости, прописал в management пропертях включение метрик и радуешься выводу всего нужного для мониторинга по соответсвующему ресту. Однако, после наката метрик на окружение, внезапно приложение начинает стремительно деградировать, графану начинает спамить огромным количеством избыточной информации, коллеги из QA наблюдают существенное замедление скорости отклика запросов к бэкенду, соотвественно принимается решение по откату фичи.

Неприятно, но бывает, давайте исправлять ситуацию.

Читать далее

Java 17 для тех, кто не следил. Часть 1

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


Уже вышла Java 18, но для всех, кто сидит на LTS, по-прежнему остаётся актуальной версия 17. Такие люди могут не отслеживать постоянно фичи каждой новой версии, а спокойно заниматься своими делами и иногда навёрстывать сразу всё.


И как раз на такое «навёрстывание» рассчитан доклад Тагира Валеева (tagir_valeev), с которым он осенью выступил на нашем мероприятии TechTrain. Люди, которые в последние годы тщательно отслеживали все новинки в Java, тут особо много нового не узнают. Зато для остальных это удобный единый ликбез по главным вещам сразу нескольких версий: от запечатанных классов до того, почему молодёжь может зарофлить над вами из-за префиксов get и is.


Поэтому в преддверии нового TechTrain и Java-конференции JPoint мы решили сделать для Хабра текстовую версию доклада. В этом посте речь идёт о языковых фичах, а отдельно опубликуем часть про изменения в API. Далее повествование идёт от лица спикера.

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