2011-07-13 46 views
0

我有一個將消息處理髮布到MQ的java批處理過程。與隊列關聯的MDB處理消息。每條消息將有10條記錄。我需要更新數據庫表以跟蹤記錄處理,成功和失敗。每個批次運行只有一行在表格中。所以問題在於,由於MDB的多個實例正在嘗試更新,所以我們正面臨併發問題。我們也嘗試了行級鎖定。但問題依然存在。Java消息驅動Bean(MDB)同步數據庫更新問題

我正在尋找一種解決方案,我可以跟蹤java端的計數器,然後在達到特定閾值後執行單個更新。假設發佈了500封郵件。每條消息處理10條記錄。在處理此消息中的所有記錄之後,MDB應更新此計數器。然後計數器會產生一個會更新數據庫的線程(如果達到閾值)。

請讓我知道我有什麼選擇。

Z/OS上的App Server - WAS 5.6,DB2 9.1。通過SP訪問DB2。

謝謝!

+0

我正面臨類似的問題。你能解決嗎? – Vaandu

回答

0

您是否嘗試過在數據庫服務器上完全更新?例如:

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

數據庫服務器應該能夠管理像這樣的併發更新語句。

0

最簡單的解決方案是隻運行一個MDB實例,併發問題消失。

這會慢一點,因爲你會一次做10個數據庫更新而不是你提出的500,但除非這是一個問題,否則我會保持簡單。

+0

批處理過程在白天運行。 MDB進程訪問並更新其他實時事務使用的多個表。所以我需要保持事務範圍最小以避免其他爭用問題。這就是爲什麼我們每封郵件都有一個實例正在啓動。 – askids