2

私は Java EE の初心者で、多くのデータベース操作を行う Web アプリケーションを開発しています。Java EE でのトランザクションについて混乱しています。

私の問題は、Tomcat を使用していて、Java EE のトランザクションの種類を知らないことですが、プロジェクトでそれらを使用する必要があります。それで、私はそれを何度も検索し、その多くの「子供」を得ました:

  1. を使用しconnection.setAutoCommit(false)ていますが、接続管理されていますか?

  2. 使用するJavax.Transaction.UserTransaction

これら2つの違いは何ですか?他に方法はありますか?

NetBeans 7.0 を使用しており、Tomcat が統合されています。使用しようとするjavax.transaction.UserTransactionと、このインターフェイスをオートコンプリートできませんが、提案が表示されjava.transaction.xaます。

じゃあどうすればいいの???

注: Tomcat はホスティング サーバーから提供された Web サーバーであるため、EJB は使用できません。

4

2 に答える 2

2

ご指摘のとおりです。「取引」という言葉には多くの意味があります。一般的な意味の 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 をプラグインできることです。

于 2012-12-07T21:28:58.340 に答える
0

デフォルトでは、Tomcat にはコンテナー管理のトランザクションはありません。この状況では、Java SE と同じ方法でトランザクションを処理する必要があります。これは EE とは関係がないため、javax.transaction.UserTransaction は使用できません。

于 2012-12-07T12:16:15.897 に答える