如何在Web服务中运行一个线程

时间:2010-02-28 05:29:19

标签: java tomcat web-services multithreading axis2

有人可以帮我解决这个问题,

我使用axis2,apache和tomcat创建了简单的Web服务。此Web服务具有一个队列,用于保存从客户端发送的xml文件,因此,只要客户端在Web服务上调用方法,webservice就会将此xml加载到其队列中。现在我希望在webservice中运行一个监视此队列的线程,如果队列中有项目需要一些操作。

但我的问题是只有当客户端调用其接口上的某个方法时才会调用webservice。但我需要这个线程在webserbice上运行。有人能告诉我有没有办法做到这一点?

当客户端在Web服务上调用方法时,它不会考虑以前的方法调用。这意味着它不会跟踪队列中的数据,因为每次调用都会创建新队列。

2 个答案:

答案 0 :(得分:1)

如果您需要Web应用程序中的后台线程,则必须在web.xml中注册的ContextListener中管理它们。然后,当您的Web应用程序启动并停止时,您会收到通知。

答案 1 :(得分:0)

听起来像是JMS /消息驱动bean的完美用例。 Spring JMS提供这些功能而无需使用完整的J2EE容器,因此tomcat适用于此处。 Active MQ可以提供消息传递引擎。

基本上,您的Web服务会在队列上放置一条消息,而消息驱动的bean(或消息驱动的pojo)会将它们从队列和进程中读取出来。使用JMS的优势在于,如果加载服务器的增长,您可以将消息驱动Bean重新配置为位于单独的主机上。这也意味着您将能够轻松迁移到不同的应用服务器,因为JMS是一种标准化解决方案。