процесс прослушивания файлов на tomcat - PullRequest
4 голосов
/ 03 мая 2009

Мне нужен очень простой процесс, который прослушивает каталог и выполняет некоторые действия при создании нового файла в этом каталоге.

Полагаю, мне нужен пул потоков, который это делает.

Это очень легко реализовать с помощью Spring Framework, который я обычно использую, но сейчас я не могу его использовать. Я могу использовать только tomcat, как я могу это реализовать? что является точкой входа, которая "запускает" этот поток?

Должен ли это быть сервлет?

спасибо

Ответы [ 3 ]

4 голосов
/ 04 мая 2009

, так как вы уточнили вопрос, вот еще один ответ: как запустить демон в tomcat:

сначала зарегистрируйте своих демонов в web.xml:

<слушатель> my.package.servlet.Daemons

затем реализуйте класс Daemons как реализацию ServletContextListener следующим образом:

код будет вызываться каждые 5 секунд, tomcat будет вызывать contextDestroyed при завершении работы вашего приложения. обратите внимание, что переменная является энергозависимой, в противном случае у вас могут возникнуть проблемы с отключением в многоядерных системах

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class Daemons implements ServletContextListener {
private volatile boolean active = true;

Runnable myDeamon = new Runnable() {

    public void run() {
        while (active) {
            try {
                System.out.println("checking changed files...");
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
};

public void contextInitialized(ServletContextEvent servletContextEvent) {
    new Thread(myDeamon).start();
}

public void contextDestroyed(ServletContextEvent servletContextEvent) {
    active = false;
}
}
1 голос
/ 03 мая 2009

истинное уведомление о файле только для java будет добавлено в java 7. Вот часть javadoc, которая описывает его примерно .

Реализация, которая наблюдает за событиями из файловой системы, предназначена для непосредственного сопоставления с собственной функцией уведомления о событиях в файлах, если она доступна

прямо сейчас вам придется либо создать собственную платформенно-зависимую программу, которая сделает это за вас,

или, альтернативно, реализовать какой-либо опрос, в котором время от времени перечисляется каталог для обнаружения изменений.

есть библиотека уведомлений , которую вы можете использовать прямо сейчас - она ​​использует программу на C на linux для обнаружения изменений в sourceforge. на окнах он использует опрос. я не пробовал проверить, работает ли он.

1 голос
/ 03 мая 2009

Вы можете создать слушатель для запуска потока, однако это не очень хорошая идея. Когда вы работаете внутри веб-контейнера, вы не должны запускать свои собственные потоки. В «Переполнении стека» есть пара вопросов, почему это так. Вы могли бы использовать Quartz (каркас планировщика), но я думаю, вы не смогли достичь приемлемого разрешения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...