2012-08-01 76 views
1

我有以下用例:Spring AOP是否保证了原子性?

我在我的应用程序中有许多标准实体。当我的应用程序执行JPA保存/合并其中一个实体的实例时,我想另外保存一个特殊Event实体的实例。因此,对于标准实体上的每个操作,事件被插入到数据库中。

我使用AOP实现这个横切关注点考虑。然而,我们要不惜一切代价避免什么是要创建一个标准的实体和正在创建或反之亦然没有事件:回滚存在的对标实体的插入和事件正在创建

我怎么能保证我的操作原子Spring AOP实现的?

任何线索或提示的欢迎。

回答

3

只要确保创建活动方面的,在相同的事务中创建标准实体的事务中运行。一种方法是确保事务方面的顺序将它放在事件保存方面之外。

编辑:根据http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations它是相当简单的,以确保事务性方面的任何其它方面之前施加。

包括在你的TX定义的顺序属性...

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

因此只要你的其他方面具有大于-1事务方面将首先运行一个命令。有关方面订购的更多信息,请参阅http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering

+0

谢谢。你可以包含一段代码/配置吗? – balteo 2012-08-01 14:57:12

+0

另外,我使用@Transactional注释而不是基于AOP的交易... – balteo 2012-08-01 14:58:47

+0

交易方面**是否也结束最后**以及**先运行**? – balteo 2012-08-01 15:27:37