Archive for February, 2012

Custom Ant Task

Posted on: February 29th, 2012 by Spade No Comments »

А что если при сборке приложения вам нужно дождаться выполнения определенного условия – например некоторого флага из базы данных или ответа REST-сервиса? Для этих случаев сборщик Apache Ant предлагает специальный тэг waitfor – он дает возможность приостановить выполнения скрипта до момента наличия некоторого условия. Есть возможность установить сколько ждать, и как часть проверять это условие. Внутри него можно поместить дочерний тэг, который возвращает булево значение. Класс такого тэга должен реализовывать интерфейс org.apache.tools.ant.taskdefs.condition.Condition, главная функция которого – public boolean eval().
(more…)

ASM in Java

Posted on: February 20th, 2012 by Spade No Comments »

Довольно часто бывает, что нам нужно изменить/расширить существующую функциональность, но прибегнуть к традиционным подходам (наследование, перегрузка) мы не можем – то ли классы объявлены финальными, то ли из соображений чистоты архитектуры приложения. В таких случаях мы можем прибегнуть к AOP, который справляется с этой проблемой посредством прокси-объектов. Они «заворачивают» в себя оригинальные объекты, и перехватывая вызовы методов меняют функционал в требуемую сторону. Изменять поведение программы таки способом можно на трех этапах:

  1. Compile-time – с помощью специальной настройки IDE (плагин и т.п.) или использования DSL (domain specific language) разработанного специально для этого мы можем на этапе сборки кода внедрять туда нужные нам инструкции – конечно в случае, когда у нас есть доступ к исходникам.
  2. Class load time – можно написать свой класс лоадер, который будет загружать измененные классы вместо запрашиваемых.
  3. Runtime  – во время создания объекта класса, вместо него создается прокси, которые меняет функционал – с этим подходом работают большинство AOP-framework-ов.

(more…)