2017-02-20 10 views
0

У меня проблема с JMS. Они извлекаются из базы данных событий и отправляются через посредника ActiveMQ в ESB.Atomicos transaction test jms

При отправке JMS они помечены как отправленные в базе данных событий. Предполагается, что этот процесс является транзакционным.

Однако, я заметил, что som JMS были отмечены как отправленные, пока они не были получены. Я изучил этот вопрос и заметил, что распределенные транзакции не были реализованы, что привело к потере JMS. Они были помечены как отправленные в базу данных событий, но ESB, на которые они были отправлены, забросил ошибку, и JMS не был получен.

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

Я применил координатор транзакций Atomikos для обработки обеих транзакций. Теперь я хочу проверить свою новую конфигурацию.

Я слышал, что был способ проверить обработку обеих транзакций, но я не нашел примеров. Есть ли у вас какие-либо идеи или примеры?

технологии: Spring Integration, ActiveMQ, Atomikos

ответ

0

ВИДЕТЬ Spring Documentation. Те же методы применяются.

Одной из распространенных проблем в тестах, имеющих доступ к реальной базе данных, является их влияние на состояние хранилища персистентности. Даже если вы используете базу данных разработки, изменения в состоянии могут повлиять на будущие тесты. Кроме того, многие операции, такие как вставка или изменение постоянных данных, не могут выполняться (или проверяться) за пределами транзакции.

Основы TestContext решают эту проблему. По умолчанию инфраструктура будет создавать и откатывать транзакцию для каждого теста. Вы просто пишете код, который может предполагать наличие транзакции. Если вы вызываете транзакционные проксированные объекты в своих тестах, они будут вести себя правильно, в соответствии с их настроенной транзакционной семантикой. Кроме того, если метод проверки удаляет содержимое выбранных таблиц во время работы в транзакции, управляемой для теста, транзакция будет откатываться по умолчанию, и база данных вернется к своему состоянию до начала теста. Транзакционная поддержка предоставляется для тестирования через компонент PlatformTransactionManager, определенный в контексте приложения теста.

Если вы хотите совершить транзакцию - необычный, но иногда полезный, когда вы хотите, чтобы конкретный тест заполнил или изменил базу данных, можно проверить, чтобы оболочка TestContext могла совершить транзакцию, вместо того, чтобы откатываться через @Commit аннотаций.

См. Раздел Управление транзакциями с помощью платформы TestContext.

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