さて Event オブジェクトをロードしたり格納したりする準備ができました。しかしまずはインフラストラクチャのコードを書いて、セットアップを完了する必要があります。まずは Hibernate をスタートアップしなければなりません。このスタートアップには、グローバルの SessionFactory オブジェクトを生成して、それをアプリケーションのコードでアクセスしやすい場所に格納することが含まれます。 SessionFactory は新しく Session をオープンすることができます。 Session はシングルスレッドの作業単位(Unit of Work)を表現します。それに対し SessionFactory はスレッドセーフのグローバルオブジェクトであり、一度だけインスタンス化されます。
ここでスタートアップを行い、便利に SessionFactory へアクセスする HibernateUtil ヘルパクラスを作成します。実装を見てみましょう:
package util;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
このクラスは静的初期化ブロック(クラスがロードされるときに JVM によって一度だけ呼ばれる) でグローバルの SessionFactory を生成するだけではなく、静的シングルトンの使用を隠蔽します。アプリケーションサーバーの JNDI から SessionFactory をルックアップするのと同様です。
設定ファイル内で SessionFactory に名前を与えると、 Hibernate は SessionFactory 構築後に JNDI に対しバインドを行おうとします。このコードを完全に排除するためには、 JMX デプロイメントを利用して JMX を利用できるコンテナをインスタンス化し、 HibernateService を JNDI へバインドすることもできます。これらの高度なオプションは、 Hibernate のリファレンスドキュメントで説明されています。
HibernateUtil.java を開発ソースディレクトリにある events パッケージの隣に配置してください。
.
+lib
<Hibernate and third-party libraries>
+src
+events
Event.java
Event.hbm.xml
+util
HibernateUtil.java
hibernate.cfg.xml
+data
build.xml
これは問題なく再コンパイルできるはずです。最後にロギングシステムを設定する必要があります。 Hibernate は commons logging を使うため、 Log4j と JDK 1.4 logging の選択をする必要がありません。ほとんどの開発者が好むのは Log4j です。 Hibernate ディストリビューションの( etc/ ディレクトリ)から log4j.properties をあなたの src ディレクトリ内の hibernate.cfg.xml の隣にコピーしてください。設定例を見て、冗長な出力がよければ設定を変更してください。デフォルトでは Hibernate のスタートアップメッセージだけが標準出力に表示されます。
チュートリアルのインフラは完全です。 Hibernate を使って実際の作業をする準備が整いました。