Атомность обеспечивается Spring AOP?

У меня есть следующий вариант использования:

У меня есть ряд стандартных объектов в моем приложении. Когда мое приложение выполняет сохранение / слияние JPA экземпляра одного из этих объектов, я бы хотел, чтобы было выполнено другое сохранение экземпляра специального Event юридическое лицо. Таким образом, для каждой операции над стандартным объектом событие вставляется в базу данных.

Я рассматриваю возможность использования АОП для реализации этой сквозной задачи. Однако чего бы мы ни хотели избежать любой ценой, это создать стандартную сущность и не создавать никакого события, или наоборот: произошел откат при вставке стандартной сущности и создаваемом событии.

Как тогда я могу обеспечить атомарность моей работы в Spring AOP?

Любая подсказка или совет приветствуются.

1 ответ

Решение

Просто убедитесь, что аспект для создания события выполняется в той же транзакции, что и транзакция, которая создает стандартную сущность. Один из способов сделать это - убедиться, что порядок аспекта транзакции выводит его за пределы аспекта сохранения события.

РЕДАКТИРОВАТЬ: В соответствии с http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html довольно просто убедиться, что применяется транзакционный аспект перед любым другим аспектом.

Включить атрибут порядка в ваше определение TX...

<tx:annotation-driven order="-1"/>

Таким образом, пока ваши другие аспекты имеют порядок больше -1, транзакционный аспект будет выполняться первым. См. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html для получения дополнительной информации о порядке аспектов.

Другие вопросы по тегам