package org.hibernate.auction.persistence;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import org.apache.commons.logging.*;

/**
 * Bardzo prosta klasa pomocnicza przechowująca SessionFactory jako singleton.
 * <p>
 * Jedynym zadaniem tej klasy pomocniczej jest ułatwienie dostępu do 
 * obiektu <tt>SessionFactory</tt>. Inicjalizuje obiekt <tt>SessionFactory</tt>
 * w momencie załadowania klasy (inicjalizacja statyczna), co ułatwie tworzenie obiektów
 * <tt>Session</tt>s. Użyteczna tylko w prostych aplikacjach.
 *
 * @author christian@hibernate.org
 */
public class HibernateUtilSimple {

	private static Log log = LogFactory.getLog(HibernateUtil.class);

	private static final SessionFactory sessionFactory;

	// Tworzy obiekt SessionFactory na podstawie domyślnych plików konfiguracyjnych.
	static {
		try {
			sessionFactory = new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) {
			// Musimy wyłapywać Throwable, bo w przeciwnym razie nie złapalibyśmy
			// NoClassDefFoundError ai innych podklas Error.
			log.error("Nieudane utworzenie SessionFactory.", ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static Session getSession()
		throws HibernateException {
		return sessionFactory.openSession();
	}
}
