среда, 31 марта 2010 г.

Wicket первое знакомство

Среди множества web-framework-ов мне встретился Wicket. Более детальное описание данного фреймворка, а также цикл статей, сравнивающих его с Tapestry впереди. В этой заметке я сделаю краткий обзор технологии.

Общая концепция wicket
Общая концепция схожа с Tapestry: страница формируется из шаблона страницы (MyPage.html), класса страницы (MyPage.java) и файла свойств (MyPage.properties). Шаблон страницы содержит обыкновенную html-разметку, в которую встраиваются wicket - компоненты. Достигается это добавлением специфичного атрибута wicket-id в обычные html теги. Класс страницы должен содержать все компоненты, указанные в шаблоне. Создаются они аналогично Swing приложению. Каждый должен быть явно создан и добавлен в страницу, в противном случае при попытке создания страницы в runtime wicket не найдет соответствия между шаблоном и классом страницы. Наконец, файл свойств необходим для локалилзации сообщений, выводимых на странице.

Пример обычной страницы приведен ниже:
Шаблон


Класс страницы:


Файл свойств


Как видно все довольно просто. Конечно, основные сложности возникают при создании и обработке форм, ajax - вызовов и прочих интересных вещей. В дальнейших статьях я буду более подробно освещать эти аспекты фреймворка

воскресенье, 21 марта 2010 г.

Обновление файла конфигурации без перезагрузки сервера.

Суть задачи: некоторая часть наполнения системы является редко изменяемой и не требует своего хранения в базе данных. Пример: раздел справки на сайте. Он может храниться в файле(текстовом, файле - свойств или xml), а система зачитывает его при старте. Если файл обновляется, то система должна обновить его. Тут и возникает вопрос как реализовать функциональность таким образом, чтобы не нужно было останавливать сервер приложений.

Для этих целей подходит удобная библиотека commons-configuration от apache. В ней есть различные интерфейсы позволяющие работать как с файлами свойств (*.properties), так и с xml файлами. Предположим, что мы храним справочную информацию в файле help.xml. Ниже приводится код, позволяющий подгружать актуальный файл при каждом обращении к нему.


Теперь каждый раз когда будет происходить обращение к файлу, будет проверяться время его последнего изменения и данные будут всегда актуальны.

Но это не все. Нужно чтобы этот код вызывался периодически, чтобы обновлять in-memory модель данных, которая строится на основе этого файла. Для достижения этой цели я использую job, spring и qwartz.




HelpLoader - класс, реализующий метод loadHelp. Остальной код - обвязка этого класса, позволяющая вызывать метод loadHelp каждые 50 секунд.