closeメソッドが呼び出され、アクティブなトランザクションがある場合、アクティブなトランザクションはどうなりますか?彼らはコミットされるかロールバックされるか? Connection.close()
のjavadocツールから接続終了時のアクティブなトランザクションの動作?
4
A
答えて
1
:
それは、であることを強くアプリケーションが明示的にcloseメソッドを呼び出す前に、アクティブなトランザクションをコミットまたはロールバックすることををお勧めします。 closeメソッドが呼び出され、アクティブなトランザクションがある場合、結果は実装定義です。
3
他の回答に加えて、現在作業しているデータベースであるOracleとSQL Serverの動作をテストしました。
MSSQL ロールバックトランザクション。これはあなたが直感的に期待するものです。
オラクルの反対側では、がコミットをコミットします。 JDBC Guide:
自動コミットモードが無効で、明示的にコミットまたはロールバックせずに接続を閉じると、暗黙のCOMMIT操作が実行されます。確かに、JDBC仕様では自由に自由に行えますが、私は個人的にはトランザクションを暗黙のうちにコミットすることは設計上の選択肢が貧弱だと考えています。引数として、long-ishトランザクションで作業中であり、シャットダウン要求に応答しないスレッドの使用例を考えてみましょう。アプリケーションが最終的に接続プールを閉じると、接続が閉じられ、不完全なトランザクションがコミットされます。
このストーリーの道徳は、接続プールの実装では、手動コミットモードで接続を閉じる前に常にrollback()を呼び出さなければならないということです。しかし、これは接続プールを実装する際に気になるものではありません。例として、参照してくださいPooledConnectionImpl from DBCP
関連する問題
- 1. hibernateの設定:接続のタイムアウト後のアプリケーション終了時の非アクティブ
- 2. 起動時にNASへの接続を終了する
- 3. 搭乗者の非アクティブWebSocket接続を終了する方法
- 4. intellijの終了postgres接続
- 5. Mail-listener2 - 接続の終了
- 6. Fayeクライアント接続の終了
- 7. EJBシングルトンは - スレッドが終了した後、「トランザクションがアクティブでない」
- 8. 未知のデータベースと接続終了後の操作なし
- 9. コントローラの接続が終了した後のトランザクションのロールバック(クライアントがタイムアウトした)
- 10. 予期せず迅速な時計接続が終了する
- 11. Raspberry Piが再起動時にSSH接続を終了しない
- 12. Node.jsでのWebsocket接続の終了時に閉じます
- 13. 接続あたりのPostgres同時トランザクション
- 14. Laravel 5.1でのデータベース接続の終了
- 15. ストアドプロシージャでの接続の終了
- 16. TwitterのストリーミングAPI接続が3時間後に終了する
- 17. プログラム終了時の接続を確実に閉じる方法
- 18. USB接続時のサービス非アクティブ化
- 19. ウェブファームのアクティブな接続
- 20. CICSトランザクションが終了時にリソースを解放しない
- 21. ブリッジ時にHyper-Vがインターネット接続を終了する
- 22. 非アクティブ時に接続がハングアップする
- 23. javax.persistence.TransactionRequiredException:アクティブなトランザクション
- 24. アクティブなトランザクション
- 25. 偶発的な接続終了後のPHPの実行
- 26. TCP接続が終了する
- 27. 接続が終了しませんmongodb
- 28. NHibernate接続を終了するには?
- 29. データベース接続を終了するには?
- 30. Kafka:コンシューマ接続を終了する
私は 'JDBC'の特別な経験がないので、これを答えとして提供しませんが、' commit'が送信されずに接続が閉じられている場合は 'rollback'に論理的です。それじゃない? – Nanne