1

次のユースケースがあります。

アプリケーションに多数の標準エンティティがあります。Eventこれらのエンティティのいずれかのインスタンスの JPA 保存/マージがアプリケーションによって実行されるときに、特別なエンティティのインスタンスの別の保存を実行したいと考えています。したがって、標準エンティティに対する操作ごとに、イベントがデータベースに挿入されます。

この分野横断的な懸念事項を実装するために AOP を使用することを検討しています。ただし、絶対に避けたいのは、標準エンティティが作成されてイベントが作成されないこと、またはその逆の場合です。標準エンティティの挿入と作成中のイベントでロールバックが発生します。

では、Spring AOP で操作の原子性を確保するにはどうすればよいですか?

手がかりやヒントは大歓迎です。

4

1 に答える 1

3

イベントを作成するアスペクトが、標準エンティティを作成するトランザクションと同じトランザクションで実行されることを確認してください。これを行う 1 つの方法は、トランザクション アスペクトの順序がイベント保存アスペクトの外にあることを確認することです。

編集: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotationsによると、トランザクションの側面が確実に適用されるようにするのは非常に簡単です。他の側面の前に。

tx 定義に order 属性を含めます...

<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を参照してください。

于 2012-08-01T14:52:59.503 に答える