Атомность обеспечивается 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 для получения дополнительной информации о порядке аспектов.