Обновить
153.85

Java *

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

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

Тестирование интеграции Kotlin веб сервиса на Spring Boot с базой данных

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

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

Читать далее

gRPC — безопасность или жесть?

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

Встроенные в gRPC способы проверки прав справляются со своими задачами, но накладывают ряд ограничений и не дают возможность писать сложные варианты проверок без «оригинальных» инженерных решений. А тот, кто хоть раз грешил обходом ограничений, знает, чем это чревато.

В одном из проектов мы решили попробовать упростить процесс валидации данных при внешней интеграции, соблюдая все правила безопасности. Шалость удалась:)

Наш backend-разработчик — Александр — нашел-таки то самое «оригинальное» инженерное решение. Решили поделиться с вами, чтобы и вам страдать не приходилось.

Оригинальное инженерное решение для упрощения аутентификации при вызове удаленных процедур по gRPC: proto-файл и реализация на Java.

Читать далее

Набор практик по работе с Postgresql глазами Spring java backend разработчика

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

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

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

Читать далее

Рукопись моей первой книги о Java

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

Статья о том, как я просто писал статьи на ИТ-тематику в личный блог, как вдруг получил контракт от издательства. Много работал и страдал. Прошёл через кучу этапов и написал рукопись своей первой книги о Java и её изменениях от версии к версии. Как чуть не переделал все перед самым концом, но довёл до конца и отдал текст редактору на следующий этап. Как отдохнул и переосмыслил увиденное и решил поделиться полученным знанием со всеми остальными.

Читать далее

Java библиотека для работы с внешним сервисом по протоколу RESTful API

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

Использование библиотеки-обертки для добавления функционала к RESTful API, предоставляемому внешним сервисом.

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

Thymeleaf + Spring WebFlux + Spring Security

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

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

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

Читать далее

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

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

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

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

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

Однако в 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 мин
Охват и читатели19K

В этой статье Илья Гершман, ведущий разработчик Юзтех, рассматривает понятия сериализации и десериализации в сравнении между двумя языками программирования — 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 мин
Охват и читатели33K

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

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

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

Читать далее

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

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

image


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


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


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

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

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