Запустите Java-программу после финальной веб-страницы - PullRequest
0 голосов
/ 31 октября 2011

У меня есть приложение на JSF, куда я загружаю файл. Очень простой. Вопрос в том, есть ли способ запустить (или продолжить выполнение) другую Java-программу, когда я достигну последней страницы моего приложения? То есть:

UploadFile.xhtml -> receiveFile.java -> Thanks.xhtml (пользователь закроет этот браузер) -> другая программа выполняет некоторую обработку недавно загруженного файла (даже если пользователь выключает ПК)

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 31 октября 2011

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

Совет, убедитесь, что вы выключили планировщик при выгрузке контекста. Вот пример того, как использовать SchedulerService.

Вы хотели бы сделать что-то вроде контекстного слушателя .

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    Runnable handler = new Runnable() {
           public void run() { 
                // handle file
           }
    };
    scheduler.scheduleAtFixedRate(handler, 10, 10, SECONDS);
0 голосов
/ 01 ноября 2011

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

И отдельный слушатель, такой как Quartz, для периодического чтения метаданных и последующей обработки.

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

Опять же, это будет зависеть от сложности ваших требований.

0 голосов
/ 31 октября 2011

Во-первых, после получения файла от клиента, даже когда клиент закрыл свой браузер, файл теперь находится на сервере, и вы можете обрабатывать его бесплатно (не зависит от клиента сейчас): -D

Как вашвопрос, вы хотите запустить что-то сразу после закрытия страницы.Как насчет использования аннотации @PreDestroy или @PostContructor с областью действия компонента @ViewScoped в JSF?

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

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