0

現在のスプリング管理の休止状態セッションをスレッドから削除/一時停止して、新しいセッションを使用できるようにし、元のセッションをスレッドに戻す方法はありますか? どちらも同じデータソースで作業しています。

問題をより詳細に説明します。独自の春の休止状態トランザクション管理を持つツールのプラグインを作成しようとしています。このプラグインでは、独自のスプリング トランザクション マネージャーで実行される独自のデータベース処理を実行したいと考えています。現在、データベース アクションを実行しようとすると、トランザクション マネージャーは、互換性のないトランザクション マネージャーが既に使用されていると不平を言い始めます。

org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! HibernateTransactionManager does not support running within DataSourceTransactionManager if told to manage the DataSource itself. It is recommended to use a single HibernateTransactionManager for all transactions on a single DataSource, no matter whether Hibernate or JDBC access.

トリックを行うように思われる回避策は、別のスレッドで独自のコードを実行し、それが完了するのを待ってから残りのコードを続行することです。

少しばかげている/やり過ぎのように思えるより良い方法はありますか?現在の休止状態セッションを一時停止してから、新しいセッションを開いて、元のセッションを復元する何らかの方法。

4

1 に答える 1

0

現在のトランザクション マネージャーをプラグイン コードに挿入できない理由はありますか? 2 人の tx マネージャーは、キッチンに料理人が多すぎるように聞こえます。注入した場合は、@transactional アノテーションの伝播 REQUIRES_NEW 属性を使用して作業を行う前に、新しいセッションを要求できるはずです。セットアップの例については、ドキュメントを参照してください。

例えば

@transactional(propogation = Propogation.REQUIRES_NEW)
public void addXXX(Some class) {
    ...
}

ただし、これはPlatformTransactionManager、セッション/トランザクションを管理するために休止状態にするのではなく、スプリングを使用します。

于 2012-07-12T14:18:18.403 に答える