web-dev-qa-db-ja.com

Tomcat 6 for HibernateでJTAサポートを使用するにはどうすればよいですか?

Java EE環境でJTAトランザクションサポートを使用することをお勧めします。

しかし、Hibernate SessionがJTAを使用できるように、Tomcat6でJTAを構成するにはどうすればよいですか?

バージョン3.0.1以降、HibernateはSessionFactory.getCurrentSession()メソッドを追加しました。当初、これはJTAトランザクションの使用を想定しており、JTAトランザクションは現在のセッションのスコープとコンテキストの両方を定義していました。多数のスタンドアロンJTATransactionManager実装の成熟度を考えると、すべてではないにしても、ほとんどのアプリケーションは、J2EEコンテナにデプロイされているかどうかに関係なく、JTAトランザクション管理を使用する必要があります。これに基づいて、JTAベースのコンテキストセッションを使用するだけで済みます。

Hibernateリファレンスドキュメント|アーキテクチャ。コンテキストセッション

22
EugeneP

TomcatでJTAサポートが必要な場合は、 Atomikos[〜#〜] jotm [〜#〜]( BitronixSimpleJTAJBossTS または GeronimoTM/Jencks 。しかし、正直なところ、複数のリソースにわたるトランザクションを処理しない場合は、JTAなしで生活できます(JTAが本当に必要な場合は、本格的なアプリケーションサーバーを使用してください)。

33
Pascal Thivent

SessionFactory.getCurrentSession()を使用したいだけの場合は、hibernate.cfg.xmlに次の2行を追加するだけです。

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>

これにより、スレッドごとに一意のセッションが提供されます。サーブレットリクエストは常に1つのスレッド内で処理されるため(コードが新しいスレッドを生成しない場合)、セッションはリクエスト全体にわたって存続します。

リクエスト後、フィルターを使用してセッションを閉じることを忘れないでください!

6
FRotthowe