0

ラバ、春、注釈付きの休止状態を含むアプリケーションに取り組んでいます。私は org.springframework.orm.hibernate3.HibernateTransactionManager を使用しています。今問題は次のとおりです。

休止状態を使用して条件に基づいてデータをデータベースに記録する特定のコンポーネントがミュールにあります。メソッドのスコープが完了すると、いくつかのデータを挿入し、トランザクションをコミットする @Transactional を使用しました。しかし、私が望む動作は次のとおりです。最初のコンポーネントは何らかの条件に基づいてデータを挿入しますが、トランザクションはすぐにコミットされるべきではありません.Javaクラスである私の2番目のコンポーネントは、コンポーネントのいずれかがすべて失敗した場合、3番目などのデータを再度挿入する必要があります.すべてのコンポーネントで実行されたクエリをロールバックする必要があります。このコンポーネントはすべて別個の Java クラスです

どうすればそのような行動を達成できますか。

ありがとうございました、

4

1 に答える 1

0

コンポーネントの実行チェーン全体をトランザクションに含めます。それはあなたの期待に応えます。すべてのコンポーネントが同じ 1 つのスプリング アプリケーション コンテキストにある場合は、簡単に実行できます。この場合、次の 2 つのことを行う必要があります。

  1. @Transactionalトランザクションに必要なコンポーネント クラスまたは特定のメソッドに注釈を追加します。デフォルトでは、トランザクション メソッドはREQUIREDPropagation 設定を使用します。これにより、実行チェーン内のすべてのメソッドが 1 つのトランザクションだけにマージされます。
  2. Spring がすべてのコンポーネントをスキャンできることを確認してください。

    @Transactional @Component( "lbsProviderApiCallJob" ) public class LbsProviderApiCallJoImpl implements LbsProviderApiCallJob, ApplicationContextAware {

すべてのコンポーネントが春のコンテキストにない場合。それを作るのは複雑です。

于 2013-03-18T13:20:33.480 に答える