Red Hat Training

A Red Hat training course is available for Red Hat JBoss Web Server

4.8.2. JNDI にバインドされた SessionFactory

JNDI にバインドされた Hibernate SessionFactory はファクトリのルックアップと新しい Session の作成を簡単にします。 JNDI にバインドされた Datasource には関連していませんが、 両方とも同じレジストリを使用します。
SessionFactory を JNDI 名前空間にバインドしたい場合は、 hibernate.session_factory_name プロパティを使用して名前 (java:hibernate/SessionFactory など) を指定します。 このプロパティを省略すると、 SessionFactory は JNDI にバインドされません。 これは、 読み取り専用の JNDI のデフォルト実装を持つ環境 (Tomcat 内など) で特に便利です。
SessionFactory を JNDI に登録するとき、 Hibernate は hibernate.jndi.url の値を使用し、hibernate.jndi.class をイニシャルコンテキストとして具体化します。何も設定しない場合は、デフォルトの InitialContext を使用します。
cfg.buildSessionFactory() を呼び出した後、 Hibernate は自動的に SessionFactory を JNDI に配置します。 これは、 HibernateService で JMX デプロイメントを使用しない限り、 この呼び出しがアプリケーションの起動コードかユーティリティクラスに存在することを意味します。
JNDI の SessionFactory や EJB、 他のクラスを使用する場合、 JNDI ルックアップを使用して SessionFactory を取得することができます。
管理された環境では SessionFactory を JNDI にバインドし、 管理されていない環境では static シングルトンを使用することが推奨されます。 また、 これらの詳細からアプリケーションコードを保護するため、 HibernateUtil.getSessionFactory() など、 ヘルパークラスの SessionFactory に対する実際のルックアップコードを非表示にすることが推奨されます。 このようなクラスは Hibernate の起動にも便利です。 詳細は第 1 章を参照してください。