Как запустить поток внутри веб-сервиса - PullRequest
1 голос
/ 28 февраля 2010

Может ли кто-нибудь помочь мне в этом,

Я создал простые веб-сервисы, используя axis2, apache и tomcat. У этого веб-сервиса есть очередь, в которой хранятся XML-файлы, отправленные клиентом, поэтому всякий раз, когда клиент вызывает метод веб-службы, веб-служба загружает этот XML-файл в свою очередь. Теперь я хочу, чтобы в веб-сервисе работал поток, который отслеживает эту очередь, и, если в очереди есть элементы, предпринимаются некоторые действия.

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

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

Ответы [ 2 ]

1 голос
/ 28 февраля 2010

Если вам нужны фоновые потоки в веб-приложении, вы должны управлять ими внутри ContextListener, зарегистрированного в web.xml. Затем вы получите уведомление о запуске и остановке вашего веб-приложения.

0 голосов
/ 28 февраля 2010

Звучит как идеальный вариант использования для JMS / управляемых сообщениями компонентов. Spring JMS предоставляет эти возможности без использования полноценного контейнера J2EE, поэтому tomcat подойдет и здесь. Active MQ может предоставить механизм обмена сообщениями.

По сути, ваш веб-сервис помещал сообщение в очередь, а бин, управляемый сообщениями (или pojo, управляемый сообщениями), считывал их из очереди и обрабатывал. Преимущество использования JMS состоит в том, что вы сможете перенастроить компонент, управляемый сообщениями, на отдельный хост, если ваша нагрузка на сервер растет. Это также означает, что вы сможете легко переходить на разные серверы приложений, поскольку JMS является стандартизированным решением.

...