Servlet Tomcat Jnotify мониторинг каталогов
Я хочу создать сервлет, который будет содержаться в Tomcat, который использует Jnotify (возможно, но открыт для предложений), чтобы отслеживать каталог на предмет изменений.
Я бы использовал Java 7 и NIO, но наши производственные системы работают под управлением Ubuntu 10.04, и я хочу придерживаться вещей, которые в настоящее время находятся в основном в репозиториях и в пакетах deb по причинам развертывания.
Мой вопрос касается того, как бы я интегрировал Jnotify в свои сервакы Tomcat. В настоящее время я думаю, что я создаю сервлет, используя класс GenericServlet, который в методе init() устанавливает наблюдение за каталогами, которые я хочу. Затем я как-то (это бит, который я не понимаю) вызываю метод service(), когда я получаю активность в каталоге. Я мог бы тогда иметь Слушатель, который делает действие над каталогом (в этом случае перемещает файлы)
Или я мог бы создать новый обработчик протокола (например, использовать PoolTcpEndpoint в качестве отправной точки), но это не протокол, так что это кажется глупым.
Или есть лучший способ? Единственная причина использования Tomcat в том, что большая часть нашей другой логики хранится на наших серверах Tomcat. Если есть способ Daemonise Java и получить управляемую событиями архитектуру другим способом, то я открыт, но я бы не хотел делать что-то вроде использования Jetty, например, так как это было бы еще одним элементом технологии, добавляемым к стек для поддержки, что невозможно.
С нетерпением ждем ваших мыслей.
Спасибо
1 ответ
Что мне непонятно, так это то, насколько видна эта функциональность? (внутри одного сервлета? всем сервлетам в экземпляре Tomcat? к ресурсам вне экземпляра Tomcat?)
Если к другим вашим сервлетам, вы можете зарегистрировать (из сервлета) интерфейс в глобальном JNDI, который затем может быть получен другими сервлетами и к которому они могут добавить прослушиватель.
Для ресурсов вне Tomcat вы можете предоставить объект RMI или простой сервис типа REST с опросом, подобным COMET. Если у вас есть доступ к сервлету 3.0, вы можете даже реализовать асинхронные вызовы.