2015-11-07 2 views
0

Приложение 1 (A1) отправляет сообщения A2 через MQ. A2 использует транзакции XA, так что сообщение, выпавшее в очереди, выбирается A2, обрабатывается и записывается в БД, и вся транзакция выполняется сразу.Проверка возможности транзакций приложений

Я хотел бы проверить, правильно ли поддерживает A2 согласованность системы, если транзакция завершилась неудачно и правильна ли реализация XA.

Я хотел бы остановить БД, как только A2 подберет сообщение. Но я не уверен, будет ли у меня достаточно времени, чтобы остановить БД, и буду ли я точно знать, что сообщение выбрано.

Любые другие предложения по проверке этого?

Спасибо,

Яш

ответ

1

Я предполагаю, что вы используете Java здесь, в противном случае, некоторые из этого не будет применяться.

Быстрое, прагматичное решение заключается в том, чтобы вставить задержку в ваш процесс, который даст вам время, чтобы совершить ваше разрушительное транзакционное действие. Самый простой способ сделать это - запустить приложение в отладчике. Поместите точку останова в каком-то подходящем месте (возможно, после того, как сообщение было получено, и запись в БД завершена, но не зафиксирована) и убить БД, когда отладчик приостанавливает поток. В качестве альтернативы добавьте тестовый крючок к вашему коду, в котором поток будет спать, если сообщение MQ имеет заголовок, озаглавленный что-то маловероятное, как «sleeponmessagereceived».

Более сложная, но сложная техника заключается в использовании впрыска ошибок через некоторый инструмент АОП. Я определенно посмотрю на Byteman. Он позволяет вам вводить байт-код во время выполнения и изначально был написан для тестирования сценариев XA, подобных вашим для менеджера транзакций Arjuna. Вы можете вводить код процедурно, или вы можете annotate unit testing procedures. Некоторые из преимуществ этого подхода заключаются в том, что вы можете направить Byteman для запуска условия ошибки на основе множества других условий, таких как n-ый вызов, или если аргумент метода равен X. Кроме того, в зависимости от того, насколько подробно вы узнали о своей транзакции менеджер, вы можете воссоздать более широкий набор сценариев для создания более сложных результатов XA, таких как эвристические исключения. Ниже приведены примеры here, в которых показано, как использовать скрипты Byteman для проверки MQ XA Recovery. Этот project предназначен для воспроизведения отказа XA и восстановления. Это специфический JBoss, но я бы предположил, что вы сможете адаптироваться к своей среде.

Смежные вопросы