Обновить
128K+

Java *

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

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

JPoint 2021: тенденции и тренды мира Java

Время на прочтение7 мин
Охват и читатели6.4K
В третьем онлайн-сезоне конференций, проводимых JUG Ru Group, с 13 по 17 апреля 2021 года успешно прошла Java-конференция JPoint 2021.



Что было интересного на конференции? Какой тематики были доклады? Кто из спикеров и про что рассказывал? Что изменилось в организации конференции и долго ли ждать возвращение офлайн-формата? Можно ли что-то ещё придумать оригинальное при написании обзора о конференции?
Читать дальше →

Расширение Keycloak для перехвата и обработки событий в системе

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

Продолжаю тему моего коллеги о Keycloak.

Кому не нужна вода, а просто пример кода, прыгайте сразу сюда.

Keycloak довольно часто используется в качестве решения для управления идентификацией и доступом для современных приложений в рамках enterprise приложений.

Keycloak написан на языке Java, и создатели изначально заложили очень удобную возможность расширять функционал готового решения так называемыми аддонами или официально: extensions.

Расширение представляет собой обычный проект на Java, состоящий из классов, расширяющих дефолтные классы/интерфейсы Keycloak с необходим дополнительным функционалом. Причём расширить можно функционал чуть ли не любого класса Keycloak и для любых целей: от минимального изменения текста сообщения о некорректном вводе пользователем пароля, до привязки Discord'а, как Identity provider'а.

В данной статье речь пойдёт о расширении дефолтного слушателя событий в Keycloak.

Читать далее

Декомпиляция node.js в Ghidra

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


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


Вам когда-нибудь хотелось узнать, как же именно работает программа, которой вы так активно пользуетесь, игра, в которую часто играете, прошивка какого-нибудь устройства, которое что-то делает по расписанию? Если да, то для этого вам потребуется дизассемблер. А лучше — декомпилятор. И если с x86-x64, Java, Python ситуация известная: этих ваших дизассемблеров и декомпиляторов полным-полно, то с другими языками всё обстоит немного сложнее: поисковые машины уверенно утверждают — «It's impossible».



Что ж, мы решили оспорить данное утверждение и произвести декомпиляцию NodeJS, а именно выхлоп, который выдаёт npm-пакет bytenode. Об этом подробнее мы и расскажем по ходу статьи. Заметим, что это уже вторая статья в серии о нашем плагине для Ghidra (первый материал был также опубликован в нашем блоге на Хабре). Поехали.

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

Почему следует избегать использования JPA/Hibernate в продакшене

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

JPA безусловно самая распространённая технология работы с базами данных на платформе Java. Но она же и наименее пригодна для разработки быстрых и поддерживаемых систем. В этой статье я расскажу почему JPA лучше не использовать в продакшене и что можно использовать вместо неё.

Читать далее

Собственные метрики JFR и их анализ

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

Недавно я описывал как осуществлять запуск и управление Java Flight Recorder (JFR). Теперь решил затронуть тему записи в JFR метрик, специфичных для приложения, а так же способов их анализа в Java Mission Control (JMC). Это позволяет расширить понимание происходящего с приложением и значительно упростить анализ производительности и поиск узких мест.

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

Читать далее

Вы уверены, что вам нужен API?

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


От переводчика: При разработке бэкэнда наличие API для фронт-энда стало практически повсеместным стандартом. Однако можем ли мы называть это "настоящим" API? Предлагаем вашему вниманию интересное пятничное чтение, которое, возможно, повлияет на API, которые мы все разрабатываем.


“Слабая связанность, сильное сцепление”, “сокрытие информации”. Известные принципы дизайна. Тем не менее, к ним очень часто не относятся серьезно при разработке архитектуры ПО, особенно когда это касается взаимодействия между клиентской и серверной частью (фронтом и бэком на жаргоне разработчиков).


Ценность API — в сокрытии информации


Предоставляя API, системы решают, какая информация должна быть доступна из внешнего мира, а какая будет держаться в секрете (“сокрытие информации”).


Почему это важно? Потому что чем объемнее API, тем дороже его поддерживать. Представьте себе крайний случай — открытие каждой детали реализации. Каждое изменение в системе может сломать код, который используют ваши клиенты. Именно по этой причине мы стремимся разрабатывать компактные API. Я писал статью (перевод на хабре) по этой теме в контексте описания шаблона “Регистрация событий”.


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

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

Иммутабельность в Java

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

Иммутабельный (неизменяемый, immutable) класс — это класс, который после инициализации не может изменить свое состояние. То есть если в коде есть ссылка на экземпляр иммутабельного класса, то любые изменения в нем приводят к созданию нового экземпляра.

Чтобы класс был иммутабельным, он должен соответствовать следующим требованиям:

Читать далее

Анонс Jmix 0.9 — предварительный релиз фреймворка

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


Мы в компании Haulmont разрабатываем Jmix. Это фреймворк с открытым кодом для разработки backend для data-centric приложений, основанный на Spring Boot, наследник CUBA Platform.


Мы предоставляем готовую архитектуру, сервисы и API, которые строятся поверх модели данных, а разработчики уже строят эту модель данных (JPA) и пишут бизнес-логику (Spring Boot). Всё остальное предоставляется из коробки или может быть легко подключено: подсистемы безопасности и аудита, автоматическое создание REST API, multi-tenancy и прочие системные сервисы. В дополнение разработан инструментарий для более эффективной работы с фреймворком.


Jmix 0.9 — это последняя предрелизная, “практически стабильная” ветка фреймворка. Вместе с этим релизом мы также обновляем инструмент для Jmix разработчиков — Jmix Studio: 0.9.1-202.


В этом релизе мы “заморозили” все основные API: определение модели данных, слой доступа к БД, а также систему безопасности. С большой долей вероятности все это будет перенесено без изменений в версию 1.0. Это означает, что можно рассматривать Jmix 0.9 как отличный вариант для разработки MVP. Ожидается, что миграция на 1.0 будет практически незаметной.


Давайте взглянем на самые заметные изменения в разных частях фреймворка.

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

Паттерн проектирования Builder (Строитель) в Java

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

А вот и я со своей очередной статьей о паттернах проектирования, а именно о паттерне проектирования Builder (он же Строитель). Очень полезный паттерн проектирования, который позволяет нам шаг за шагом конструировать сложные объекты.

Читать далее

Подключение Keycloak к Spring Boot приложению

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

Привет Хабр!

Как известно, spring OAuth2.0.x переведен в режим поддержки уже почти как 2 года назад , а большая часть его функциональности теперь доступна в spring-security (матрица сопоставления). В spring-security отказались переносить Authorization service (roadmap) и предлагают использовать вместо него свободные или платные аналоги, в частности keycloak. В этом посте мы хотели бы поделится различными вариантами подключения keycloak к приложениям spring-boot.

Читать далее

Реактивный масштабируемый чат на Kotlin + Spring + WebSockets

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

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

Читать далее

What can we do with Java16? Краткий обзор нового релиза JDK (март 2021)

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

В марте разработчикам в средах программирование пришло сообщение "New JDK version is available", что означало, что вышел очередной релиз Java 16 с открытым исходным кодом Java SE (Standard Edition) 16 и Java Development Kit 16 (JDK 16). Подготовка к выпуску окончена и набор новых функций (JEP), который был утвержден, теперь реализован в  JDK и опубликован в открытом доступе. Известно, что для 16-го релиза новых JEP уже не будет. А следующий, 17-й релиз выйдет в сентябре.  Ах да, что же такое JEP для новых релизов Java? Для новичка это всегда не очень понятно.

Читать далее

Руководство по возможностям Java версий 8-16

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

Последнее обновление: 05 апреля 2021 г.

Вы можете использовать это руководство, чтобы получить практическую информацию о том, как найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т. д.), А также получить обзор функций языка Java, включая версии Java версии. 8-16.

Читать далее

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

Rust — теперь и на платформе Android

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

Корректность кода на платформе Android является наиважнейшим аспектом в контексте безопасности, стабильности и качества каждого релиза Android. По-прежнему сложнее всего вытравливаются ошибки, связанные с безопасностью памяти и попадающиеся в коде на С и C++. Google вкладывает огромные усилия и ресурсы в обнаружение, устранение багов такого рода, а также в уменьшение вреда от них, старается, чтобы багов в релизы Android проникало как можно меньше. Тем не менее, несмотря на все эти меры, ошибки, связанные с безопасностью памяти, остаются основным источником проблем со стабильностью. На их долю неизменно приходится ~70% наиболее серьезных уязвимостей Android.

Наряду с текущими и планируемыми мероприятиями по улучшению выявления багов, связанных с памятью, Google также наращивает усилия по их предотвращению. Языки, обеспечивающие безопасность памяти – наиболее эффективные и выгодные средства для решения этой задачи. Теперь в рамках проекта Android Open Source Project (AOSP) наряду с языками Java и Kotlin, отличающимися безопасностью памяти, поддерживается и язык Rust, предназначенный для разработки операционной системы как таковой.

Читать далее

Desktop. Не популярный, но все еще живой. Eclipse Rich Client Platform (RCP e4)

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

Всем доброго времени суток. Начнем. Во время своего обучения этой технологии я столкнулся с проблемой, что на весь интернет есть только один нормальный источник информации по этой теме (Lars Vogel). А в нем все написано профи для профи. Поверхностно, без деталей. Есть и с деталями, но платно. Я хочу добавить подробностей в довольной простой процесс создания своего первого приложения RCP, поэтому буду делать подробные пояснения к каждому шагу. Это статья подойдет новичкам, не имеющим представления о RCP и Eclipse и желающим сделать первые шаги в освоении этой технологии, но знающим, что такое Java, JDK, JRE.

Читать далее

Приглашаем спикеров и участников на Java Meeting Point 2021

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

23 июня 2021 мы проводим бесплатную онлайн-конференцию для Java-разработчиков и всех, кто интересуется этим языком. Наша конференция — это площадка для общения и обмена опытом инженеров по всей России. Ведущим Java Meeting Point будет Андрей Когунь — основатель и организатор встреч сообщества JUG.MSK. Регистрация для участников открыта

Программа формируется, и вы тоже можете стать спикером Java Meeting Point. Чтобы подать доклад, заполните форму на сайте конференции. Под катом подробнее рассказываем о конференции и процессе отбора. 

Читать далее

Как извлечь пользу из статической типизации

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

Эта статья о том, как извлечь максимум пользы из статической системы типов при дизайне вашего кода. Статья пытается быть language agnostic (получается не всегда), примеры на Java и взяты из жизни.

Читать далее

Java: передача параметров по значению или по ссылке

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

Простое объяснение принципов передачи параметров в Java.

Многие программисты часто путают, какие параметры в Java передаются по значению, а какие по ссылке. Давайте визуализируем этот процесс, и тогда вы увидите насколько все просто.

Начнем с основ.

Данные передаются между методами через параметры. Есть два способа передачи параметров:

Читать далее

Улучшение модификаторов видимости Java с помощью ArchUnit

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

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

К счастью, в Java есть нечасто используемый модификатор видимости package-private, который очень помогает скрыть нежелательные детали реализации. К сожалению, если количество внутренних классов велико, оно плохо масштабируется, но, к счастью, нам может помочь ArchUnit.

Читать далее

Обнаружение и удаление кода без ссылок с помощью ArchUnit

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

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

Читать далее