【问题标题】:Java Message Driven Bean(MDB) simultaneous database update issueJava Message Driven Bean(MDB) 同步数据库更新问题
【发布时间】:2011-10-04 12:31:55
【问题描述】:

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

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

请告诉我有哪些可用选项。

应用服务器 - Z/OS 上的 WAS 5.6、DB2 9.1。通过 SP 访问 DB2。

谢谢!

【问题讨论】:

  • 我面临着类似的问题。你能解决吗?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 批处理在白天运行。 MDB 进程访问和更新由其他实时事务使用的多个表。因此,我需要将事务范围保持在最低限度以避免其他争用问题。这就是为什么我们每条消息都有一个实例。
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2015-12-14
    • 2011-10-21
    • 2014-04-05
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多