А что если при сборке приложения вам нужно дождаться выполнения определенного условия – например некоторого флага из базы данных или ответа REST-сервиса? Для этих случаев сборщик Apache Ant предлагает специальный тэг waitfor – он дает возможность приостановить выполнения скрипта до момента наличия некоторого условия. Есть возможность установить сколько ждать, и как часть проверять это условие. Внутри него можно поместить дочерний тэг, который возвращает булево значение. Класс такого тэга должен реализовывать интерфейс org.apache.tools.ant.taskdefs.condition.Condition, главная функция которого – public boolean eval().
(more…)
Archive for February, 2012
Custom Ant Task
ASM in Java
Довольно часто бывает, что нам нужно изменить/расширить существующую функциональность, но прибегнуть к традиционным подходам (наследование, перегрузка) мы не можем – то ли классы объявлены финальными, то ли из соображений чистоты архитектуры приложения. В таких случаях мы можем прибегнуть к AOP, который справляется с этой проблемой посредством прокси-объектов. Они «заворачивают» в себя оригинальные объекты, и перехватывая вызовы методов меняют функционал в требуемую сторону. Изменять поведение программы таки способом можно на трех этапах:
- Compile-time – с помощью специальной настройки IDE (плагин и т.п.) или использования DSL (domain specific language) разработанного специально для этого мы можем на этапе сборки кода внедрять туда нужные нам инструкции – конечно в случае, когда у нас есть доступ к исходникам.
- Class load time – можно написать свой класс лоадер, который будет загружать измененные классы вместо запрашиваемых.
- Runtime – во время создания объекта класса, вместо него создается прокси, которые меняет функционал – с этим подходом работают большинство AOP-framework-ов.