2012-02-20 27 views
0

Spring 3.0アノテーションベースのトランザクションでサービスレイヤを処理しようとしています。私は春のトランザクションサポートを次のように設定しています:Spring:トランザクションがロールバックされない

私はトランザクションにDataSourceTransactionManagerを使用しています。

<bean id="summaryDailyTXManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 

    <property name="dataSource" ref="summaryDailyDataSource"/> 

</bean> 

そして、次のように私は、アノテーションベースのサポートを設定します。この後

<tx:annotation-driven transaction-manager="summaryDailyTXManager" proxy-target-class="true" /> 

私は私の取引可能な機能については、以下のアノテーションを使用します。

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class }) 
public void doSomething() { 
// my code 
} 

私の理解では、もしそこにこれですdoSomething関数からの例外であれば、トランザクションはロールバックされます。しかし、それはロールバックされていません。私が何か間違っていたり、何かを逃してしまったら、私を案内してください。

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

よろしく Gillani

+0

私たちに 'doSomething'を見せてください。 – soulcheck

+0

このメソッドを含むオブジェクトへの参照を取得し、このメソッドを呼び出すコードを表示してください。 –

+0

データソースの自動コミットが無効になっていますか? – phlogratos

答えて

4

データベースは何ですか? データベースに問題があることがあります。

たとえばMyISAMテーブルを持つMySQLにはトランザクションがありません。 Springを使用せずにSpringまたはネイティブJDBCを構成する方法や、JTAまたはHibernateをどのように使用しても、ROLLBACKを得ることはできません。

私は同様の問題に直面した場合、私は春を除外することで問題を切り分けます。

ネイティブの非スプリングjdbcメソッドを作成します。

接続

セットの自動偽

をコミットします別のレコード

ロールバック接続

を挿入一つのレコード

を挿入

があれば、手動で検査し、接続を閉じますth eレコードは

+1

これはまさに私の問題でした。なぜ私のトランザクションがロールバックしていないのか把握しようと夢中になった。答えに感謝します。 – hese

0

に挿入されています。これは、デフォルトでruntimeExceptionがスローされた場合にのみ春に戻るためです。