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

Java消息驱动Bean(MDB)同步数据库更新问题,java,jakarta-ee,db2,jms,ibm-mq,Java,Jakarta Ee,Db2,Jms,Ibm Mq,我有一个java批处理进程,它将消息处理发布到MQ。与队列关联的MDB处理消息。每条消息将有10条记录。我需要更新一个数据库表,以跟踪已处理的记录、成功记录和失败记录。对于每个批处理运行,表中只有一行。所以问题是,由于MDB的多个实例正在尝试更新,我们面临着并发性问题。我们也尝试了行级锁定。但问题依然存在 我正在寻找一个解决方案,在这个解决方案中,我可以跟踪java端的计数器,然后在达到某个阈值后进行一次更新。假设发布了500条消息。每条消息处理10条记录。MDB应在处理此消息中的所有记录后更新

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

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

请让我知道我有哪些选择

AppServer——Z/OS上的WAS5.6和DB29.1。通过SP访问DB2


谢谢

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

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

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

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


这会稍微慢一点,因为您将一次更新10个数据库,而不是建议的500个,但除非这是一个问题,否则我将保持简单。

批处理过程在白天运行。MDB进程访问并更新其他实时事务使用的多个表。因此,我需要将事务范围保持在最小,以避免其他争用问题。这就是为什么每个消息都有一个实例启动。我面临着类似的问题。你能解决吗?