ru

статьи на русском языке

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

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

0
Read More

О строителях

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

0
Read More

Создание сервиса в Linux

Иногда требуется не просто запустить программу, но и обеспечить ее работу, после перезагрузки, либо случайного падения. Можно в ручную следить за этим, но можно нужно, переложить эти заботы на откуп операционной системы. Для того чтобы сделать свою программу сервисом в Linux с использованием update-rc.d, достаточно выполнить следующее: создать скрипт для управления жизненным циклом программы назначить необходимые права на файл зарегистрировать созданный скрипт как сервис разрешить автозапуск сервиса Как видим, шагов не так уж и много. И так начнем:

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

Принципы GRASP

Сегодня поговорим о более абстрактных вещам, а именно о GRASP. Что же это такое и для чего это нужно? Давайте попробуем разобраться. GRASP (General Responsibility Assignment Software Principles) — общие принципы распределения обязанностей, иногда их называют GRASP шаблоны. Название «шаблоны», мне не нравятся и кажется,что «принципы» будет более подходящее определение. Т.к. GRASP не несет в себе каких то строгих структур, это скорее набор неких правил примененимых к ООП, принципов проверенных временем. В первые, они были упомянуты в книге Крейга Лармана…

0
Read More

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

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

0
Read More

Интернирование строк

Как известно, java хранит строки в некотором кэше находящимся в памяти. Это называется интернирование. В целях экономии памяти все одинаковые строки встречающиеся в коде, ссылаются на один и тот же объект. Приведу пример кода, который не всегда может выводить true: Первая строка s1 известна компилятору, вторая — создается режиме работы программы, т.е. в runtime, и компилятор не смог провести оптимизацию, сделав так, чтобы обе строки ссылались на один и тот же объект. Следовательно, все последующие строки встречающиеся в коде с…

0
Read More