22

彼らは、Java EE 環境で JTA トランザクション サポートを使用することを推奨しています。

しかし、Hibernate セッションがそれを使用できるように、Tomcat6 で JTA を構成する方法は?

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

( Hibernate Reference Documentation | Architecture. Contextual Sessions )

4

2 に答える 2

33

Tomcat で JTA サポートが必要な場合は、 AtomikosJOTMBitronixSimpleJTAJBossTSGeronimoTM/Jencksなどのスタンドアロンのトランザクション マネージャーを使用する必要があります。しかし正直なところ、複数のリソースにまたがるトランザクションを処理するつもりがない場合は、JTA なしで生活できます (本当に JTA が必要な場合は、本格的なアプリケーション サーバーを使用してください)。

于 2010-03-31T12:56:23.967 に答える
6

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

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

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

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

于 2010-03-31T13:01:51.367 に答える