問題タブ [spring-transactions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - @ManagedBeanと@Transactional-Springのバグ?回避策?
Webアプリに次のJSFバッキングBeanがありました
repository.save
メソッド呼び出しに到達すると、次のエラーが発生します
2つの質問があります
- これはこのようなバグが原因ですか?
- 2つの回避策があると思います-他に何かありますか?
2.1最初の回避策-を使用する
2.22番目の回避策
ヘルパークラスを作成し、代わりにそれに注釈を付けます。
2.3(考えられる3番目の回避策は、内部クラスのメソッドに@Transactionalアノテーションを付けることです。これは2.2と非常によく似ています)。
hibernate - Groovy / Hibernate / @Transaction は、現在のスレッドで No Session found を返します
Spring/JPA/Groovy/Hibernate スタック (注: grailsではありません) があり、起動時にNo session found for current thread
何らかの@Transactional
作業を実行しようとするとエラーが発生することがわかりました。
私は、シミュレーションで使用されるサンプルデータをデータベースに入力しようとする別のクラス@PostConstruct
のメソッドを呼び出すコントローラークラスを持っています。@Transactional
controller
クラスは次のとおりです。
ご覧のとおり、ここで説明した理由により、純粋な@Transactional
アプローチから離れました。@PostConstruct
MyIPublisher
は、次のような groovy クラスです。
これは次の実装です。
注意してください、私はpopulateData()
としてマークしようとしまし@Transactional
たが、効果はありません。
私の Spring コンテキスト クラスでは、 を定義して<tx:annotation-driven/>
います。
私が知る限り、私はすべてを正しく行いました。しかし、私はこれを機能させることができないようです。
他に何が必要ですか?
更新: dataAccess 関連の Bean を設定する Bean は次のとおりです。
spring - Spring 3.1 - Spring NamespaceHandler が見つかりません
Tomcat 6 でアプリを実行しようとすると、Spring 3.1 名前空間の問題が発生します。
これが私のプロジェクト構成です:
pom.xml:
アプリケーションコンテキスト.xml
すべての JAR はWEB-INF/libの下にあり、XML 構成はWEB-INF の下にあります。何かご意見は?
前もって感謝します, アンドレ
spring - メソッドの Spring PROPAGATION_REQUIRED は他のスレッドをブロックしますか?
スレッドが m1() というメソッドに入り、新しいトランザクションを開始するとします。2 番目のスレッドが同じメソッドに入ろうとすると、2 番目のメソッドがブロックされていることがわかります。PROPOGATION_REQUIRED は、最初のスレッドがジョブを完了するまで 2 番目のスレッドをブロックしますか? 分離は設定されていません(デフォルト)。
ありがとう。
spring-aop - 春の取引とAOP
私はまだ春のトランザクションとaopの学習段階にあり、いくつかの誤解があり
ます。1.使用しない場合は、aop-adviceを使用し、サービスごとに次のように指定します。
@Transactional(rollbackFor = java.lang.Exception.class、readOnly = true)
そして、春のログを見ると、すべてが期待どおりに機能しているようです。これが意味するのは、トランザクションが作成され、例外が発生した場合にロールバックが発生するということです。しかし、あなたが次のようなものを使用する場合:
したがって、このシナリオを使用して春のログを見ると、ロールバック後に次のようなものが得られるため、別のトランザクションの内部に2つのトランザクションがあるように見えます。
あなたがそこに見ることができるように、私は私が理解していない線をマークしました。
そして2番目の問題:同じログファイルで私は次のような行に気づきました:
そして私は少しグーグルして、これを追加した後:
entitymanager Bean、今ではjpaがトランザクションをjdbcトランザクションに公開しているようです。問題は、この構成の長所/短所が何であるかわからないことです。
transactions - Spring Propagation.REQUIRES_NEW @Transaction commitは、外部トランザクションが終了した後にのみログに表示されます
相互に呼び出すトランザクションメソッドがありますが、トランザクションはコミットする必要のあるスポットの後にコミットするか、少なくとも挿入ログがその後に表示されるようです。これがhierachyの呼び出しです。
ルート/初期メソッド呼び出しから戻った後でのみ、ENTITY_CHANGED_IN_REVISIONテーブル/EntityChangeエンティティのログに挿入が挿入されます。
この点:
このログは、返品後にのみ表示されます。
@Transactional(propagation = Propagation.REQUIRES_NEW)である「save500rowchunk」メソッドから戻った後にそれらを受け取る代わりに:
spring - Grails サービスのトランザクション動作
Grails アプリでは、サービス メソッドのデフォルトの動作はトランザクションであり、未チェックの例外がスローされた場合、トランザクションは自動的にロールバックされます。ただし、Groovy では、チェック済み例外の処理 (または再スロー) が強制されないため、サービス メソッドがチェック済み例外をスローすると、トランザクションがロールバックされないというリスクがあります。このため、すべての Grails サービス クラスに注釈を付けることが推奨されるようです。
に他のメソッドがありMyService
、そのうちの 1 つは DB を読み取るだけで、もう 1 つは DB に触れないとします。次の注釈は正しいですか?
この質問に答えるには、私の意図が何であるかを知る必要があると思います。
- いずれかのメソッドから例外がスローされ、進行中のトランザクションがある場合、そのトランザクションはロールバックされます。たとえば、 が
writeSomething()
呼び出さdontReadOrWrite()
れ、後者から例外がスローされた場合、前者によって開始されたトランザクションはロールバックされます。rollbackFor
クラスレベルの属性は、明示的にオーバーライドしない限り、個々のメソッドによって継承されると想定しています。 - 進行中のトランザクションがない場合、次のようなメソッドは開始されません。
dontReadOrWrite
- が呼び出されたときに進行中のトランザクションがない場合
readSomething()
は、読み取り専用トランザクションが開始されます。読み取り/書き込みトランザクションが進行中の場合、このトランザクションに参加します。
spring - Springがトランザクションをインターセプトしないのはなぜですか?
Hibernateとトランザクションを使用したテスト用にSpringを構成しようとしました。@TransactionalトランザクションでマークされたアプリコンテキストからのBeanの取得はインターセプトされません。構成で見逃す可能性があるものは何ですか?
}
spring - 1つのトランザクションで同じデータソースを指す2つの異なるエンティティマネージャーを使用できますか?
JPAでSpringを使用しています。また、異なるエンティティ(1つのアプリケーションの異なるモジュール)を含む2つのEntityManagerがあり、どちらも同じデータソースを指しています。
(単一のTransactionManagerを使用して)1つのトランザクションで両方を使用できますか?そのためにJTAを使用する必要がありますか?もしそうなら、Tomcatの下でそれを使用するための最良のオプションは何ですか?
春に設定するにはどうすればよいですか?
hibernate - アトミック性のネストされたトランザクション(Propogation.REQUIRED_NEW / Propogation.NESTED)
まず、JPA2の実装としてSpring+Hibernateを使用していることに注意してください。私のアプリケーションは、JpaTransactionManagerとHibernateJpaDialectで構成されています。
ユニットを非アクティブ化する機能と、複数のユニットの非アクティブ化をラップする機能があります。ユニットの非アクティブ化作業は外部サービスを呼び出し、その呼び出しがタイムアウトするか、エラーステータスで戻ると、例外がスローされます。単一ユニットの非アクティブ化が失敗した場合(この外部サービス呼び出しを介して、またはRuntimeExceptionが原因で)、そのユニットのトランザクションのみをロールバックしたいと思います。
Propogation.REQUIRES_NEWを使用して、基本的に以下のようにこれを実現できます。
そして、これは完全にうまく機能します。
このスタイルは、アクティベーションにも非常によく拡張されます。
しかし、やるときになると問題にreactivation
ぶつかります。私が欲しいのは、既存の関数と関数reactivation
を利用するアトミックタスクです。つまり、またはのいずれかがロールバックを引き起こした場合、関数全体がロールバックします。deactivateUnit
activateUnit
deactivateUnit
activateUnit
これに対する私の素朴な試みはうまくいきません:
activateUnit
ロールバックする場合は、deactivateUnit
しません。
アクティブ化と非アクティブ化の伝播をに変更する必要があるかもしれないと思いましたが、それではNESTED
関数のロールバック動作が維持されません。
少し戸惑っていますので、よろしくお願いします!