Servlet Tomcat Jnotify мониторинг каталогов - PullRequest
2 голосов
/ 11 марта 2012

Я хочу создать сервлет, который будет содержаться в Tomcat, который использует Jnotify (возможно, но открыт для предложений), чтобы отслеживать каталог на предмет изменений.

Я бы использовал Java 7 и NIO, но наши производственные системы работают под управлением Ubuntu 10.04, и я хочу придерживаться вещей, которые в настоящее время находятся в основном в репозиториях и в пакетах deb по причинам развертывания.

Мой вопрос касается того, как бы я интегрировал Jnotify в свои сервакы Tomcat. В настоящее время я думаю, что я создаю сервлет, используя класс GenericServlet, который в методе init () устанавливает наблюдение за каталогами, которые я хочу. Затем я как-то (это бит, который я не понимаю) вызываю метод service (), когда я получаю активность в каталоге. Я мог бы тогда иметь Слушатель, который выполняет действие с каталогом (в этом случае перемещает файлы)

Или я мог бы создать новый обработчик протокола (например, использовать PoolTcpEndpoint в качестве отправной точки), но это не протокол, так что это выглядит глупо.

Или есть способ получше? Единственная причина использования Tomcat заключается в том, что большая часть нашей другой логики хранится на наших серверах Tomcat. Если есть способ Daemonise Java и получить управляемую событиями архитектуру другим способом, то я открыт, но я бы не хотел делать что-то вроде использования Jetty, например, так как это было бы еще одним элементом технологии, добавляемым к стек для поддержки, что невозможно.

С нетерпением ждем ваших мыслей.

Спасибо

1 Ответ

0 голосов
/ 12 марта 2012

Немного неясно, насколько видимой должна быть эта функциональность? (внутри одного сервлета? всем сервлетам в экземпляре Tomcat? ресурсам вне экземпляра Tomcat?)

Если вы используете другие сервлеты, вы можете зарегистрировать (из сервлета) интерфейс в глобальном JNDI, который затем может быть получен другими сервлетами и к которому они могут добавить прослушиватель.

Для ресурсов вне Tomcat вы можете предоставить объект RMI или простой сервис типа REST с опросом, подобным COMET. Если у вас есть доступ к сервлету 3.0, вы даже можете реализовать асинхронные вызовы.

...