Hibernate Session API は、アーキテクチャ内のシステムの管轄であるあらゆるトランザクションに依存しません。もしコネクションプールの JDBC を直接使いたい場合、 JDBC API から トランザクションを呼ぶことができます。もし、 J2EE アプリケーションサーバーで動作させるなら、 Bean 管理トランザクションを使い、必要に応じて UserTransaction を JTA API から呼ぶことになるでしょう。
2つ(それ以上)の環境で互換性のあるコードを維持するために、オプションとして根本的なシステムをラッピングする Hibernate Transaction API を推奨します。 Hibernate 設定プロパティの hibernate.transaction.factory_class を設定することで、ある特定の Transaction クラスのインスタンスを持つことができます。
3つの基本的な(既にある)選択を挙げます:
org.hibernate.transaction.JDBCTransactionFactory
データベース (JDBC) トランザクションに委譲します(デフォルト)
org.hibernate.transaction.JTATransactionFactory
もし、このコンテキスト(例えば、 EJB セッション Bean メソッド)で進行中のトランザクションが存在する場合、コンテナ管理トランザクションに委譲します。そうでない場合は、新しいトランザクションが開始されており、 Bean 管理トランザクションが使われます。
org.hibernate.transaction.CMTTransactionFactory
コンテナ管理 JTA トランザクションに委譲します
自分自身のトランザクション戦略(例えば、 CORBA トランザクションサービス)を定義することもできます。
Hibernate のいくつかの機能(例えば、二次キャッシュ、 JTA によるコンテキストセッション等)は管理された環境の中の JTA TransactionManager へのアクセスを要求します。 J2EE がひとつのメカニズムに規格化されていないので、アプリケーションサーバーにおいて、 Hibernateが TransactionManager のリファレンスを取得する方法を明確にする必要があります。
| Transaction Factory | Application Server |
|---|---|
org.hibernate.transaction.JBossTransactionManagerLookup
|
JBoss |
org.hibernate.transaction.WeblogicTransactionManagerLookup
|
Weblogic |
org.hibernate.transaction.WebSphereTransactionManagerLookup
|
WebSphere |
org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
|
WebSphere 6 |
org.hibernate.transaction.OrionTransactionManagerLookup
|
Orion |
org.hibernate.transaction.ResinTransactionManagerLookup
|
Resin |
org.hibernate.transaction.JOTMTransactionManagerLookup
|
JOTM |
org.hibernate.transaction.JOnASTransactionManagerLookup
|
JOnAS |
org.hibernate.transaction.JRun4TransactionManagerLookup
|
JRun4 |
org.hibernate.transaction.BESTransactionManagerLookup
|
Borland ES |
表 3.10. JTA トランザクションマネージャ