1.2.5. スタートアップとヘルパ

1.2.5. スタートアップとヘルパ

さて 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 を使って実際の作業をする準備が整いました。