需要帮助java web app设计来执行后台任务

我有一个安装在台式PC上的本地Web应用程序,它需要通过Web服务定期与远程服务器同步。

我有一个“事务”表,用于存储已在本地处理并需要发送到远程服务器的事务,此表还包含从远程服务器检索的事务(已远程处理)并需要执行本地(它们已使用Web服务调用检索)…事务按时间顺序执行,以确保以正确的顺序处理它们。

交易类型的一个例子是来自商店的项目的“贷款”和“退货”,例如video租赁商店。 例如,某些东西可能已在本地借出并远程返回,反之亦然,或任何一系列的贷款/退货事件。

还有从远程服务器检索的其他信息以更新本地记录。

当用户在本地执行任务时,我会实时更新本地数据库,并将事务添加到表中,以便与远程服务器进行后台处理。

处理后台任务的最佳方法是什么。 我尝试使用在HTTPSessionListener中创建的Thread,并在删除会话时使用interrupt(),但我不认为这是最安全的方法。 我也尝试使用会话属性作为锁定机制,但这也不是最好的方法。

我也想知道你怎么知道一个线程何时完成它的运行,以避免同时运行另一个线程。 或者线程是否在完成之前已经丢弃。

我已经提出了另一个建议,使用Quartz调度程序,我还没有详细阅读这种方法。 我将在实践中购买Java Concurrency的副本,但在我遇到它之前,我想要一些关于最佳方法的想法的帮助。

顺便说一下,我没有使用Web应用程序框架。

谢谢。

最安全的是创建一个由容器管理的应用程序范围的线程池。 怎么做取决于使用的容器。 如果您的容器不支持它(例如Tomcat)或者您希望与容器无关,那么基本方法是实现ServletContextListener ,在启动时提供ExecutorService API并在Java 1.5的帮助下创建线程池并在关闭时终止线程池。 如果您还没有使用Java 1.5或想要更多抽象,那么您也可以使用Spring的TaskExecutor

有一个关于并发实用程序的Java EE提议,但它还没有进入Java EE 6。

相关问题:

  • 从servlet产生线程的推荐方法是什么?
  • JSP Web应用程序中的后台计时器任务

最好使用Quartz Scheduling框架,因为它具有与调度相关的大多数function。 它具有在数据库,并发处理等中存储作业的function。

请试试这个解决方案

  1. 创建一个表,它存储一些标记为’Y’或’N’的标记映射到某个可识别字段,默认值为’N’
  2. 为每个回报安排一份工作,同时给予自己的权利,如果标志是’Y’则执行
  3. 返回时将标志更改为“N”,然后触发您要执行的过程