java

Rest сервис на Netty

Недавно познакомился с фреймворком Netty. В традиционной модели на каждое соединение создается один поток, который его обрабатывает. Это приводит к росту нагрузки на CPU и объема потребляемой памяти. Netty использует другой подход, позволяющий обрабатывать одновременно количество соединений большее, чем количество запущенных потоков. Реализован он с использованием библиотеки java.nio. В данной статье, я опишу как Netty работает и расскажу как реализовать с его помощью простой REST сервис. Для понимания принципа работы Netty с начало нужно обратиться к паттерну pipeline (Подробная статья…

0
Read More

JVM параметры для тонкой настройки сборщика мусора

Совсем недавно столкнулся с необходимостью уменьшения паузы «stop world» во время сборки мусора. Во время копания в данном вопросе, открыл для себя множество интересных параметров jvm. Чтобы знания не потерялись, решил зафиксировать их в табличку.

0
Read More

Конвертирование дат из XMLGregrorianCalendar в GregorianCalendar

При парсинге xml файла наткнулся на следующую проблему. Даты ранее 1582 года содержащиеся в XMLGregorianCalendar некорректно конвертируются в GregorianCalendar. Вывод: Это происходит из-за перехода с Юлианского календаря на Грегорианский. Чтобы того не было, необходимо явно выставить дату. Вывод:

0
Read More

Collect своими руками

После выхода java 8 появилась возможность писать в pipeline стиле. Т.е. создавать последовательность операций которые будут обрабатывать элементы из некоторого источника, будь то коллекция, бесконечная и конечная генерирующая функция, строки из файла и пр. Это тема достаточно обширная и она не будет освещена в данном топике. Расскажу про collector’ы. Это такие объекты с помощью которых, можно привести результат обработки элементов к определенному виду. Существует несколько встроенных, в классе java.util.stream.Collectors. Например, там есть toList, он создает список из элементов потока. Есть…

0
Read More

Исправляем конфликт зависимостей

Однажды при деплои на тестовый стенд обнаружилась такая ошибка NoSuchMethodException. Просмотр логов дал следующую информацию: Довольно странное исключение, если учесть, что локально, все работало прекрасно. Наиболее вероятной причиной возникновения данной ошибки — разные версии библиотек. Судя по всему, в проекте оказалось несколько версий одного и того же класса. Как это можно решить?

0
Read More

О строителях

Сегодня речь пойдет о шаблоне проектирования Builder, или же по русски, строитель. Начнем с определения и выясним для чего он нужен. Строитель относится к порождающим шаблонам, а значит, с его помощью создаются объекты. Он позволяет конструировать объект по частям. Приведу пример, как выглядит типичный Builder. Допустим у нас есть класс Person

0
Read More

Заставляем дружить CDATA и JAXB

Всем добрый день, сегодня будем говорить о JAXB. Данная технология преобразования объектов в xml файл в java существует достаточно давно и не представляет особой сложности, но как и везде, существует ряд нюансов. Они появляются когда вы хотите сделать, что «нестандартное». В моем случае, требовалось заключить некоторые поля в блок CDATA, а содержимое оставить без изменений.

0
Read More

Контракты для equals

Как известно, метод equals() определен в классе java.lang.Object. Его реализация в данном классе, это простое сравнение ссылок, и если ссылки разные, то метод возвращает false. Если Вы хотите переопределить данный метод, не стоит забывать о контракте с методом hashCode(). Согласно данному контракту, если equals() возвращает true, то значение hashCode() для этих объектов будет одинаково, но выполнение обратного необязательно. Есть еще один контракт, о котором стоит помнить при написании своего собственного метода equals() :

0
Read More

Кое-что о ссылках в java

Сегодня поговорим о том, какие бывают ссылки в языке java. Их всего четыре вида: Strong, Weak, Phantom и Soft. Чтобы воспользоваться ими, за исключением первой, нужно использовать соответствующие классы из пакета java.lang.refs Чем же они различаются и какими суперспособностями обладает каждая из них? Различия в основном связаны с поведением сборщика мусора, в тот момент когда он их обрабатывает.

0
Read More

Избавляемся от hibernate.properties

Для того чтобы вынести настройки hibernate в приложении, которое использует spring достаточно добавить свойства в объявлении бина sessionFactory. Можно пойти дальше и вынести некоторые часто изменяемые параметры в tomcat context.xml

0
Read More