ご指摘のとおりです。「取引」という言葉には多くの意味があります。一般的な意味の 1 つは、データベース トランザクションです。
- データベース トランザクションは、アトミック (すべて成功またはすべて失敗)、一貫性 (トランザクションの前後でデータベースが有効である必要がある)、分離 (トランザクションが完了するまで他のトランザクションは変更を認識しない可能性がある) であるデータベース操作の集合です。耐久性があります (コミットされると、トランザクションは永続化されます)。
connection.setAutoCommit(false)
これらのトランザクションは、通常、 、connection.commit()
、およびを使用して、接続レベルで管理できますconnection.rollback()
。
あなたが見つけた他の種類のトランザクションは、JTA トランザクションです。JTA トランザクションは非常に抽象的な概念であり、単純に「一連の操作」を取り囲んでいます。JTA 自体は、トランザクションに対して何も行いません。ただし、一般的には、トランザクションの開始時または終了時に何らかの処理を行う JTA リソース マネージャーをプラグインします。
たとえば、メッセージング リソース マネージャーをセットアップして、トランザクションがコミットされたときにのみ JMS メッセージが送信されるようにすることができます。JTA トランザクションの開始および停止時にデータベース リソース マネージャーを使用してデータベース トランザクション (上記) を開始および停止することもできます。
JTA にはかなりの構成オーバーヘッドがあり、セットアップにかなりの作業が必要になる場合があります。通常、リソースのクラスター (データベースのクラスターなど) を管理し、それらを調整する必要がある場合にのみ使用されます。
データベースが 1 つしかない場合は、JDBC でトランザクションを直接使用することで解決できます。JDBC の上に何かを使用している場合 (JPA など)、これらのツールは多くの場合、トランザクションを管理します。
一般的なアプローチは、Spring 管理のトランザクションを使用することです。Spring は、トランザクションの定義が非常に一般的であるという点で JTA に似ていますが、構成がかなり簡単です。Spring を使用することには、2 つの明確な利点があります。1 つ目は、トランザクションの境界 (@Transactional アノテーションを使用) は、コミットやロールバックを処理するよりもはるかに簡単な場合があることです (それほど多くの try/catch/finally ステートメントを使用する必要はありません)。もう 1 つの理由は、クラスターに移行することになった場合、後からいつでも Spring の下に JTA をプラグインできることです。