Предполагая, что это проблема с ресурсами WebSphere MQ, давайте попробуем ответить на ваши вопросы по очереди.
Почему произошло это исключение (исключение в потоке 2, на этапе B6)?
Почему в потоке 2 возникла исключительная ситуация stage3CommitProcessing?
Как я могу получить более подробную информацию об этом?
Скорее всего, соответствующий QMgr не был сконфигурирован с достаточным пространством для журнала, чтобы содержать все сообщения, которые находятся под синхронизацией. Несмотря на то, что вы позаботились о сериализации доступа к базе данных, очередь не сериализуется, и поэтому QMgr должен одновременно управлять до 2000 записями в точке синхронизации. Более подробная информация доступна в журнале ошибок QMgr.
Как отладить такой сценарий гонки, связанный с транзакцией?
Существуют ли журналы, связанные с Websphere, которые я мог бы включить, чтобы увидеть, что привело к сбою фиксации на этапе 3?
Посмотрите в /var/mqm/qmgrs/[QMgr name]/errors/AMQERR01.log
подробности о том, был ли WebSphere MQ откатывать транзакцию.
Также распечатайте связанные исключения JMS. Всегда. JMS предоставляет многоуровневое исключение, где нижние уровни содержат информацию об ошибках, связанных с поставщиком. Часто они передают приложению ту же информацию, которую в противном случае вам пришлось бы копать в журналах ошибок QMgr.
Если я правильно понял причину проблемы, самый простой способ проверить это - два экземпляра попытаться прочитать 100 записей в каждой из них в точке синхронизации.
Как этого можно избежать / решить?
Увеличьте размер журналов, чтобы они могли содержать все сообщения, которые могут быть синхронизированы в любой данный момент. Например, если каждое сообщение имеет размер 1 КБ и вам нужно 1000 из них в точке синхронизации для каждого из 10 экземпляров, вам потребуется как минимум около 10 МБ экстентов журнала. Они определяются параметрами основного и дополнительного журнала QMgr и параметрами счета. Помните, что QMgr также поддерживает точки синхронизации, например, при управлении каналами, и поэтому в любом вычисляемом пространстве необходимо учитывать размеры пакета канала и несколько МБ для внутренних транзакций QMgr.
Подробнее см. Раздел в Инфоцентре по расчетам размера файла журнала . Дополнительную информацию смотрите в Циркулярные и линейные журналы в IBM developerWorks.