diff --git a/dao/src/main/java/com/iluwatar/DaoBaseImpl.java b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java index a022f7038..d7be9670e 100644 --- a/dao/src/main/java/com/iluwatar/DaoBaseImpl.java +++ b/dao/src/main/java/com/iluwatar/DaoBaseImpl.java @@ -16,24 +16,8 @@ public abstract class DaoBaseImpl implements Dao { protected Class persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; - protected final SessionFactory sessionFactory = createSessionFactory(); - - private SessionFactory createSessionFactory() { - SessionFactory sessionFactory = new Configuration() - .addAnnotatedClass(Wizard.class) - .addAnnotatedClass(Spellbook.class) - .addAnnotatedClass(Spell.class) - .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect") - .setProperty("hibernate.connection.url", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1") - .setProperty("hibernate.current_session_context_class", "thread") - .setProperty("hibernate.show_sql", "true") - .setProperty("hibernate.hbm2ddl.auto", "create-drop") - .buildSessionFactory(); - return sessionFactory; - } - private Session getSession() { - return sessionFactory.openSession(); + return HibernateUtil.getSessionFactory().openSession(); } @Override @@ -43,7 +27,7 @@ public abstract class DaoBaseImpl implements Dao { E result = null; try { tx = session.beginTransaction(); - Criteria criteria = sessionFactory.getCurrentSession().createCriteria(persistentClass); + Criteria criteria = session.createCriteria(persistentClass); criteria.add(Restrictions.idEq(id)); result = (E) criteria.uniqueResult(); tx.commit(); diff --git a/dao/src/main/java/com/iluwatar/HibernateUtil.java b/dao/src/main/java/com/iluwatar/HibernateUtil.java new file mode 100644 index 000000000..d0e1b6d84 --- /dev/null +++ b/dao/src/main/java/com/iluwatar/HibernateUtil.java @@ -0,0 +1,31 @@ +package com.iluwatar; + +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +public class HibernateUtil { + + private static final SessionFactory sessionFactory; + + static { + try { + sessionFactory = new Configuration() + .addAnnotatedClass(Wizard.class) + .addAnnotatedClass(Spellbook.class) + .addAnnotatedClass(Spell.class) + .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect") + .setProperty("hibernate.connection.url", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1") + .setProperty("hibernate.current_session_context_class", "thread") + .setProperty("hibernate.show_sql", "true") + .setProperty("hibernate.hbm2ddl.auto", "create-drop") + .buildSessionFactory(); + } catch (Throwable ex) { + System.err.println("Initial SessionFactory creation failed." + ex); + throw new ExceptionInInitializerError(ex); + } + } + + public static SessionFactory getSessionFactory() { + return sessionFactory; + } +}