2011-11-14 11 views
8

webappをデバッグしています。これは、起動時にDataSourceTransactionManager BeanとHibernateTransactionManager Beanを作成するように構成されています。これは意図的なものではありませんが、サードパーティの依存関係が原因です。その効果は良性であるように見える。デバッグを介して表示されているのは、HibernateベースのDAO経由でオブジェクトを永続させるときです.DataSourceTransactionManagerが呼び出され、HibernateTransactionManagerは呼び出されません(Beanは両方とも 'transactionManager'と呼ばれます)。 Spring Javadocは、私たちの状況であるローカルリソースには問題ありません(私はこれを今読んでいると思います)。私。分散JTAベースの環境ではありません。HibernateTransactionManagerではなくORM永続性のためにDataSourceTransactionManagerを使用してもよろしいですか?

私の質問は、ORMベースの永続性のためにHibernateTransactionManagerを使用しないことに悪影響を及ぼすかどうかです。私はHibernateTransactionManagerをDAO上の@Transactionalアノテーションの修飾子を介して使用するように設定を変更できます。

単純な単体テスト、統合テストの設定ではうまくいきますが、何千人ものユーザーと高いレベルの同時実行性がある場合は、本番全体の容量を増やすことが重要です。

TIA、 これはあまりあいまいではありません。

春3.0.x BTW。

これはSpring 3.1のドキュメントです。

秒11.9 "一般的な問題の解決"。

に基づいて、適切なPlatformTransactionManagerの実装を使用してください。

答えて

6

これは私を間違ったものにして、問題を引き起こします。休止状態のtxnマネージャがなければ、HibernateOperationsに対して行われたすべての呼び出しは、トランザクションの外にあり、独立したセッション上にあります。自動コミットを使用している可能性があります。したがって、エラーが発生したときにすべてが正常であると思われる場合は、ロールバックすると予想される変更が見つからない場合があります。

以下は

  • が何か
  • スロー例外
  • セーブ・トラン
  • を始めるチェックしてみてください '何かが' DBにか表示されるかどうか

チェックをコミットします。

別のチェックは、この関連オブジェクトの

  • トラン
  • 負荷何か
  • アクセス何かから別のオブジェクトとの関係を開始し、プロパティ(ないPK)にアクセス
だろう

最後の呼び出しで例外が発生する場合があります。これは、囲みtxnがhibernate txnマネージャによって管理されていないため、セッションがロードから開いたままになっていないためです。

+0

+1 Hmm。面白い。ありがとうございました。これらのテストの1つを試みます。私が見ているのは、DAOコールがトランザクション内で行われていることです.DAOはgetSession()を呼び出します。つまり、Spring SessionFactoryUtilsは新しいセッションを手渡します。あなたが言うように - 私たちはどのくらいの頻度でロールバックを覚えていますか? –

+4

いいです。私はこのテストを試しました。保存後に例外が発生し、Hibernate tx mgrで保存がロールバックされました。 DataSourceTransactionManagerではそれはできませんでした。 –

+0

あなたの言葉をサポートする公式文書を提供できますか?「休止状態のtxnマネージャなしで、HibernateOperationsへのすべての呼び出しは、トランザクションの外で、別のセッションで行われますか?私はDataSourceTransactionManager +休止状態を使用しています。 – DerekY

関連する問題