Oleg Atamanenko

thoughts about programming

Category: разработка

Собственная реализация методов в Spring Data JPA

Очевидно, что мы не всегда можем воспользоваться автоматической генерацией кода, предоставляемой Spring Data JPA. Например, у нас слишком сложный запрос, или нам необходимо вызвать процедуру в базе данных, либо у нас сложная бизнес-логика.

Continue Reading…

Использование BeanPostProcessor на примере журналирования

Сегодня я хочу рассказать, как можно сделать инициализацию логгера в классе с использованием аннотаций и BeanPostProcessor Очень часто мы инициализируем логгер следующим образом: public class MyClass { private static final Logger LOG = LoggerFactory.

Continue Reading…

Преобразуем строку в дату

Казалось бы, есть простейшая задача - преобразовать строковое представление даты в объект класса java.util.Date. Как оказалось, иногда использование DateFormat не помогает. В случае, если строка - это заголовок Date из письма, то нам нужно использовать javax.

Continue Reading…

Упрощаем работу с JPA при помощи Spring Data JPA

Введение Уже прошло несколько лет с тех пор, как появился JPA. Работа с EntityManager увлекательна, но разработчики пишут красивый API, а подробности работы с базой данных скрывают. При этом частая проблема - дублирование имплементации, когда из одного DAO в другой у нас плавно перекочёвывает один и тот же код, в лучшем случае этот код переносится в абстрактный базовый DAO.

Continue Reading…

Разработка и тестирование Java REST веб-сервисов

Введение Для разработки REST веб-сервисов Java предлагает JSR-311 - JAX-RS: The Java™ API for RESTful Web Services Как это обычно бывает в мире Enterprise Java, существует несколько реализаций данной спецификации: Jersey - это эталонная реализация спецификации от компании Sun Oracle Apache CXF JBoss RESTEasy На примере последней реализации, я и расскажу, каким образом можно написать REST-сервис.

Continue Reading…

Немножко магии от AspectJ

Наверно, вы уже сталкивались с таким понятием, как AOП - аспектно-ориентированное программирование. Обычно, про него вспоминают, когда говорят про декларативное использование транзакций, про проверку прав доступа, либо про реализацию журналирования.

Continue Reading…

Сокращаем ссылки на андроиде

ВступлениеВстала передо мной задача - сокращать ссылки перед тем, как отправлять их в Twitter. Для решения этой задачи я решил использовать bit.ly, благо, их API внятный и простой. Программируем!Решение нарисовалось в виде следующего класса: import org.

Continue Reading…

Удаление различных диакритических символов из строки

Возникла проблема - каким образом заменить в строке символы из национальных кодировок на соответствующие им из латиницы. Например, из строки explicación получить explicacion. package com.blogspot.atamanenko; import java.text.Normalizer; import java.text.Normalizer.Form; public class StringNormalizer { public static String normalize(String string) { return Normalizer.

Continue Reading…

Несколько слов о GORM

В данной заметке хочу поделиться некоторыми моментами использования GORM. GORM - это ORM-фреймворк, используемый в Grails. Реализован он поверх Hibernate, но, при этом, с некоторыми отличными умолчаниями. Для разработчиков, знающих Hibernate, рекомендую тщательно изучить GORM, так как его поведение в некоторых случаях отлично от Hibernate, что может приводить к различным сюрпризам.

Continue Reading…

Общение со Skype через D-Bus на Python

Summary: в данной заметке описывается работа с программой Skype через D-Bus на Python. Введение Захотелось мне странного - когда я ухожу домой, мне нужно выключить amarok, kopete и Skype. Собственно, решено было через D-Bus отправлять вышеперечисленным приложениям релевантные сообщения.

Continue Reading…

Разработка макроса для TiddlyWiki

Summary: Пример разработки плагина для TiddlyWiki Вступление TiddlyWiki - это вики-движок, полностью написанный на JavaScript и хранящийся в одном файле (как сам движок, так и содержимое). Создатели позиционируют его как "переиспользуемую нелинейную персональную веб записную книжку".

Continue Reading…

Вложенные транзакции в базах данных

Summary: Некоторые особенности вложенных транзакций. Иногда бывает так, что при обработке запроса необходимо открыть ещё одну транзакцию в рамках текущей транзакции. Это называется вложенной транзакцией. Очень многие базы данных не поддерживают вложенные транзакции вообще, например, MySQL и Oracle.

Continue Reading…

Двунаправленная ссылочная целостность

Здравствуйте. Я считаю, что разработчику всегда стоит иметь представление о том, как работают низлежащие абстракции. Хотя бы потому, что часто абстракции бывают протекающими. А веду я это к тому, что когда фреймворк вываливает стектрейс с несколькими вложенными (и, часто, для непосвященных непонятными) исключениями, то бывает непонятно, что с этим делать, особенно, если не знаешь, как реализована абстракция.

Continue Reading…

Spring Roo (часть 2)

Архитектура сгенерированного приложения Spring Roo активно использует аспекты. В качестве реализации аспектов была взята библиотека aspectj. Большая часть сгенерированного кода попадает в отдельные файлы-аспекты. Создадим простой класс: ```bash new persistent class jpa -name ~.

Continue Reading…

Введение в Spring Roo

Недавно компания Spring Source презентовала новый продукт - Spring Roo. Цель проекта - повысить продуктивность Java-разработчиков. Почитав обзоры, а также потрогав его руками можно сделать вывод о том, что это, в некотором виде, альтернатива AppFuse и Grails.

Continue Reading…

Сферический программист в вакууме и абстрактное понятие качества кода в условиях Fixed-Price проектов (часть 2)

Причин для написания плохого кода может быть несколько. Некоторые из них лежат на поверхности: Отсутствие опытаНевнимательность Некомпетентность Немотивированность Отсутствие опыта - казалось бы, самая простая причина проблемы; решение проблемы выглядит очевидным - со временем, разработчик будет писать код лучше.

Continue Reading…

Сферический программист в вакууме и абстрактное понятие качества кода в условиях Fixed-Price проектов (часть 1)

В последнее время всё чаще задумываюсь о том, почему разработчики пишут плохой и некачественный код. Под кодом я подразумеваю не только сам код, но и, в том числе, архитектуру и дизайн.

Continue Reading…

Транзакции в реляционных базах данных

При работе в многопользовательском окружении может возникнуть ситуация, когда разные пользователи или системы обновляют одни и те же данные. Это может привести к ситуации, когда один из пользователей изменит данные, которые уже изменял другой пользователь и приведёт либо к потере данных, либо к переводу данных в неконсистентное состояние.

Continue Reading…

Кратко о блокировках в БД

Блокировка - в реляционных базах данных это установка метки на запись, что запись заблокирована для изменений. Существует два вида блокировок - оптимистичная и пессимистичная. Оптимистичная блокировка При оптимистичной блокировке на базе данных реальной блокировки не происходит.

Continue Reading…