我开发了以下程序/架构:
A)Java servlet接收POST请求,从POST请求中获取参数并将它们存储在公共静态LinkedList中:
public static LinkedList incomingQueue = new LinkedList<myObjects>();
也就是说,对于每个POST请求,我都这样做:
incomingQueue.push(myObject);
现在,我想定期访问队列并对对象执行处理:
while(true){
doProcessing(incomingQueue);
wait(someTime);
}
显然,我没有主要课程来做这件事。如何创建这样一个可以访问incomingQueue 而没有由servlet触发的类?这样做的正确架构是什么?
感谢您的时间。
答案 0 :(得分:0)
您有几种选择:
web.xml
扩展ServletContextListener
添加一个监听器,并在contextInitialized()
上启动一个单独的帖子。另外:注意@BrianRoach的评论。关于同步列表的观点非常重要。
答案 1 :(得分:0)
首先,队列应放在servlet上下文属性中(请参阅:ServletContext.setAttribute()
。此外,必须同步对此队列的访问,请考虑ArrayBlockingQueue
。
在普通的servlet中,您可以通过contextInitialized()
中的线程启动contextDestroyed
并在TimerService
中断它来使用ServletContextListener
。
如果您使用的是spring,则可以@Scheduled
annotation:{{1}}或ejb使用@Schedule
。
答案 2 :(得分:0)