Проблема одновременного обновления базы данных Java Message Driven Bean (MDB) - PullRequest
0 голосов
/ 13 июля 2011

У меня есть пакетный процесс Java, который публикует обработку сообщений в MQ. MDB, связанный с очередью, обрабатывает сообщение. Каждое сообщение будет иметь 10 записей. Мне нужно обновить таблицу базы данных, чтобы отслеживать обработанные записи, успешные и сбои. В каждой партии будет только одна строка в таблице. Таким образом, проблема в том, что, поскольку несколько экземпляров MDB пытаются обновить, мы сталкиваемся с проблемами параллелизма. Мы попробовали и с блокировкой на уровне строк. Но проблема все еще существует.

Я ищу решение, в котором я могу отслеживать счетчик на стороне Java, а затем выполнить одно обновление после достижения определенного порога. Допустим, было опубликовано 500 сообщений. Каждое сообщение обрабатывает 10 записей. MDB должен обновить этот счетчик после обработки всех записей в этом сообщении. После этого счетчик создаст поток (если порог достигнут), который обновит базу данных.

Пожалуйста, дайте мне знать, какие варианты доступны для меня.

Сервер приложений - WAS 5.6, DB2 9.1 в Z / OS. Доступ к DB2 осуществляется через SP.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Самое простое решение - запустить только один экземпляр MDB, и ваша проблема с параллелизмом исчезнет.

Это будет немного медленнее, поскольку вы будете выполнять обновления БД по 10 за раз вместо вашегопредложил 500, но если это не проблема, я бы оставил это просто.

0 голосов
/ 13 июля 2011

Вы пытались сделать обновление полностью на сервере БД?Например:

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

Сервер БД должен иметь возможность управлять одновременными инструкциями обновления, подобными этому.

...