Java消息驱动Bean(MDB)同时发生数据库更新问题

时间:2011-07-13 13:38:46

标签: java java-ee db2 jms ibm-mq

我有一个java批处理过程,它向MQ发布消息处理。与队列关联的MDB处理消息。每条消息都有10条记录。我需要更新数据库表以跟踪已处理的记录,成功和失败。每个批次运行的表中只有一行。所以问题在于,由于MDB的多个实例正在尝试更新,因此我们面临并发问题。我们也试过了行级锁定。但问题仍然存在。

我正在寻找一个解决方案,我可以在java端跟踪计数器,然后在达到某个阈值后再进行一次更新。让我们说发布了500条消息。每条消息处理10条记录。在处理此消息中的所有记录之后,MDB应更新此计数器。然后,计数器将生成一个将更新数据库的线程(如果满足阈值)。

请告诉我有哪些选择。

App Server - ZAS OS上的WAS 5.6,DB2 9.1。通过SP访问DB2。

谢谢!

2 个答案:

答案 0 :(得分:0)

您是否尝试过完全在数据库服务器上进行更新?例如:

UPDATE COUNT_TABLE SET COUNTER = COUNTER + 1 WHERE ...

DB服务器应该能够像这样管理并发更新语句。

答案 1 :(得分:0)

最简单的解决方案是只运行一个MDB实例,并且您的并发问题就会消失。

这会慢一点,因为你将一次进行10次DB更新而不是你提出的500次更新,但除非这是一个问题,否则我会保持简单。