問題タブ [transactional]

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.

0 投票する
3 に答える
47453 参照

spring - Spring @Transactional が必要なトランザクションを作成しない

わかりました、それで私はついに仲間の圧力に屈して、Web アプリで Spring を使い始めました :-)...

そのため、トランザクション処理を機能させようとしていますが、それを取得できないようです。

私のSpring構成は次のようになります:

persistence.xml:

ドメイン オブジェクトを保存する DAO メソッドは次のようになります。

そこで、テスト ケースで次のコードを使用して、グループ オブジェクトのコピーを保存しようとしました。

これは、次の例外を除いて爆撃します。

さらに、Spring の初回起動時に次の警告が表示されます。これらはentityManagerFactoryとtransactionManagerを参照しているので、おそらく問題に関係していますが、私はそれらを十分に解読して何を知ることができませんでした:

誰かが私が見逃しているものを知っていますか? 私は完全に困惑しています...

ありがとう

0 投票する
2 に答える
3819 参照

ruby-on-rails - Rails test db はレコードの変更を保持しません

ここ数週間、問題を解決しようとしています。Rails アプリの rspec テストを実行していますが、理解できないエラーが 1 つある以外は問題なく動作しています。

  • InnoDB エンジンで MySQL を使用しています。
  • config.use_transactional_fixtures = truespec_helper.rbに設定しました
  • コマンドを使用して、テスト フィクスチャを手動でロードしますrake spec:db:fixtures:load
  • rspec テストは BackgrounDRb ワーカー向けに作成されており、(state_machine gem を介して) レコードの状態を更新できることをテストしています。

これが私の問題です:

というモデルがありListingsます。rspec テストは、update_sold_itemsというファイル内のメソッドを呼び出しますlisting_worker.rb。このメソッドはlisting.sell特定のレコードを呼び出し、リスト レコードの「状態」列を「販売済み」に設定します。これまでのところ、これはすべて正常に機能していますが、update_sold_itemsメソッドが終了すると、rspec テストはここで失敗します。

状態の変化が持続しない理由を突き止めようとしていますが、ほとんど失われています。update_sold_itemsテスト中にメソッドに配置したデバッグ コードの結果を次に示します。

reloadなぜそれが完全にうまく保存されるのか理解できませんが、呼び出すたびに元のレコードに戻りますListing.find.

これを読んでくれてありがとう。十分な情報を提供していない場合は、質問してください。

助けてくれてありがとう、ネイサン・B

PS他のクラスの新しいレコードを作成し、それらのレコードをテストすることに問題はありません。データベースに既に存在するレコードを更新している場合にのみ問題になるようです。

0 投票する
2 に答える
1120 参照

hibernate - groovyでTransactionalアノテーションを使用する際の問題

誰かがGroovyクラスで開始されていないSpringトランザクション(クラスレベル、プロキシ、アノテーション駆動型)の経験がありますか?スタックトレースにトランザクションを開始するための呼び出しが含まれていないことに気付いた、原因不明のLazyInitialization例外に苦労してきました。クレイジーに聞こえますが、GroovyがTransactionalアノテーションを採用しているかどうか疑問に思う必要があります。

0 投票する
3 に答える
3519 参照

ruby-on-rails - Rails - before_create から false を返すと、他のモデルへの変更が防止されます

before_create人々がコメントを投稿しすぎていないかどうかをチェックするフィルターがあります。

もしそうなら、私は彼らのアカウントにフラグを立てたいです。

before フィルターは false を返し、コメントの作成を停止します。問題は、これがユーザー モデルに加えた変更を元に戻す ROLLBACK をトリガーすることです。

これを達成するための正しいパターンは何ですか? 具体的には、オブジェクトが作成されるたびにチェックを実行し、チェックが失敗した場合に別のモデルを編集できるようにすることです。

0 投票する
1 に答える
9158 参照

spring - junitテストケーストランザクションがコミットされない-エラーなし

SpringコアとJPAをDB2で使用するアプリケーションにJUnit4を実装しました。あるデータベースからデータを取得して別のデータベースにマージする完全な機能をテストする必要があります。

1番目のデータベースからデータを取得するためのテストケースが作成され、エラーなしで完全に実行されていますが、レコードは2番目のデータベースに保存されていません。

実装

TestCaseクラスには、必要に応じてトランザクションでテストケースを実行するために、次のアノテーションが含まれています。

アプリケーションには、doSynch()メソッドを使用してこの操作を実行するためのマネージャークラスがあります。そのメソッドから、crudHelperクラスのtxStore()メソッドが呼び出されて初期化され、doStore()メソッド(同じクラス内)が呼び出されてエンティティがデータベースにマージされます。

以下は、このテストケースロジック全体のトランザクション宣言です。

doSynch()は、その時点ではトランザクションを必要としないため、NEVERとしてマークされ、CRUDHelperなどのさらなるレベルでは、トランザクションを確実に使用可能にするためにトランザクションをREQUIREDとしてマークできます。

問題

ここで、マネージャーのdoSynch()メソッドを呼び出して機能をテストするテストケースを実行すると、レコードがマージされず、エラーがスローされないことを除いて、完全なフローが完全に機能します。

JSPから呼び出された場合のManagerメソッドはうまく機能します。また、テストケースから直接txStore()を呼び出してテストしましたが、これも正常に機能します。

トランザクション管理が適切でないかどうか、またはこの問題の回避策がさらに役立つかどうかをお知らせください。また、問題や環境が明確でない場合は、plsが私を更新します。前もって感謝します。!!

0 投票する
2 に答える
8473 参照

java - SpringAnnotation@Transactionalを拡張する方法

Webアプリで3つの異なるトランザクションマネージャーを使用する必要があります。そこで、 Springリファレンス(セクション10.5.6.3カスタムショートカットアノテーション)に従って独自のアノテーションを作成しました。

1つのアノテーション(1つの特定のtransactionmanagerを使用するため)は次のようになります。

カスタマイズされた@CustomerTXアノテーションでサービスレイヤーにアノテーションを付けると、すべてが正常に機能します。ただし、readonly = true、rollbackFor =など、アノテーションにさらに多くのオプションを提供する必要があります。アノテーションを「拡張」することはできないので(私は本当にSpringから@Transactionalアノテーションを拡張する必要があります)、これの正しい実装は何ですか?

0 投票する
1 に答える
2990 参照

hibernate - postgresqlのトランザクションがコミットされておらず、マップされたオブジェクトがautoCommit=falseで永続化されていません

実行中のトランザクションでpersistを呼び出すと、マップされたオブジェクトがDB(Postgresql 8.4)に永続化されません。SpringTransactionManagementを使用しています

org.springframework.jdbc.datasource.DataSourceTransactionManager

だからすべてがうまくいくはずです。DataSourceのautocommit-modeを「false」に設定しました。モードを「true」に設定すると、コミットが実行されます(そして、オブジェクトは永続化されます)が、それはより大きな問題につながります(たとえば、dbからblobをフェッチする)。したがって、autocommit-modeを「false」に設定する必要があります。これは、誰もが私に言った優先モードでもあります...

これは私の永続性の構成です(コードを必要なものに減らしました):

また、3つの異なるトランザクションマネージャー(もちろん3つの異なるデータソース)を使用していることにも言及する必要があります...

上記の修飾子属性に反映される私自身のトランザクションアノテーション:

オブジェクトを永続化する「必要がある」注釈付きサービスクラス...

これは、db呼び出しを呼び出すサービスメソッドを呼び出すときのログです。

ご覧のとおり、トランザクションは(ログに従って)コミットされていますが、オブジェクトはdbに永続化されていません(挿入と更新は実行されていますが)。

データソース構成でコミットモードをに設定する場合

プロパティname="defaultAutoCommit" value = "true"

すべてが正常に動作します!

何がこの奇妙な問題を引き起こしているのか本当にわかりません...誰かが私にヒントをくれたら嬉しいです。

0 投票する
1 に答える
863 参照

spring - Spring 2.5 で外部トランザクションから内部トランザクション設定を制御する

Spring 2.5 トランザクション管理を使用しており、次のように設定しています。

ビーン1

Bean2

トランザクション全体がロールバックされるため、障害が Bean1 から DB に永続化されることはありません。

ランタイム例外を適切に処理するロジックがない多くの場所で使用されているため、Bean2に noRollbackForを追加したくありません。

Bean2.execute() が Bean1 から呼び出された場合にのみトランザクションがロールバックされるのを回避する方法はありますか?

それ以外の場合、私の最善の選択肢は、新しいトランザクション内で失敗を永続化することだと思いますか? 他にできることはありますか?

0 投票する
2 に答える
214 参照

java - プロセスのトランザクション性をテストすることは可能ですか?

各作業単位が独自のトランザクションで実行されているのか、単一のグローバルトランザクションの一部として実行されているのかを確認できるようにしたいと思います。

次の形式のメソッド(springとhibernateを使用して定義)があります。

これは、ユーザーがログインしたときのWebサイトと、毎日実行されるバッチジョブの2つの場所から呼び出されます。Webサーバーのコンテキストでは、Webサーバーによって作成されたトランザクションで実行されます。バッチジョブの場合、ユーザーごとに1つのトランザクションが必要です。これにより、このメソッド中に何かが失敗した場合、トランザクションがロールバックされます。したがって、2つの方法があります。

updateUserCreateNewTransaction()はバッチジョブから呼び出され、updateUserWithExistingTransaction()はWebサーバーコンテキストから呼び出されます。

これは機能します。ただし、(バッチの)この動作を変更しないことが非常に重要であるため、この動作をテストするテストを作成したいと思います。可能であれば、コードを変更せずにこれを実行したいと思います。

したがって、私が利用できるオプションのいくつかは次のとおりです。

  1. バッチジョブの実行中にデータベースで開かれたトランザクションをカウントします。

  2. updateSomethingElse()メソッドで、少なくとも1つのユーザー更新が失敗するようにデータを微妙に変更し、そのユーザーのupdateSomething()が実行されていないことを確認します。

  3. コードレビュー。

1はデータベースに非常に依存する方法ですが、休止状態がトランザクションを作成しないことをどのように保証しますか?2の方が良いようですが、設定は非常に複雑です。3は、リリースごとに1つ実行する必要があるため、実際には実用的ではありません。

それで、誰かが私がこのコードを、できればシステムテストまたは統合テストを通してテストすることを可能にする方法を持っていますか?

0 投票する
1 に答える
1076 参照

java - 春と@transactional、これは正常ですか?

私はこの簡単な例を書きました:

そして、これは私の試みです:

今、奇妙な振る舞い(私は春に非常に新しいです):

  1. @Transactionalメソッド「useController()」を宣言すると、出力は次のようになります。true true
  2. @TransactionalからTestServiceに移動しTestControllerImp、「findAll()」をで宣言すると@Transactional、出力はfalsefalseになります。

なぜ私はこの振る舞いをするのですか?デフォルトでクラスがシングルトーンであることは知っています@Autowiredが、最初のケースでフラグがまだ真のままであるのはなぜですか?

皆さんありがとう。