Added tests for service-layer pattern
This commit is contained in:
@@ -1,41 +1,56 @@
|
||||
package com.iluwatar.servicelayer.hibernate;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
|
||||
import com.iluwatar.servicelayer.spell.Spell;
|
||||
import com.iluwatar.servicelayer.spellbook.Spellbook;
|
||||
import com.iluwatar.servicelayer.wizard.Wizard;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.cfg.Configuration;
|
||||
|
||||
/**
|
||||
*
|
||||
* Produces the Hibernate {@link SessionFactory}.
|
||||
*
|
||||
*/
|
||||
public class HibernateUtil {
|
||||
|
||||
private static final SessionFactory SESSION_FACTORY;
|
||||
|
||||
static {
|
||||
try {
|
||||
SESSION_FACTORY =
|
||||
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);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The cached session factory
|
||||
*/
|
||||
private static volatile SessionFactory sessionFactory;
|
||||
|
||||
private HibernateUtil() {
|
||||
}
|
||||
|
||||
public static SessionFactory getSessionFactory() {
|
||||
return SESSION_FACTORY;
|
||||
/**
|
||||
* Create the current session factory instance, create a new one when there is none yet.
|
||||
*
|
||||
* @return The session factory
|
||||
*/
|
||||
public static synchronized SessionFactory getSessionFactory() {
|
||||
if (sessionFactory == null) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
return sessionFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop the current connection, resulting in a create-drop clean database next time. This is
|
||||
* mainly used for JUnit testing since one test should not influence the other
|
||||
*/
|
||||
public static void dropSession() {
|
||||
getSessionFactory().close();
|
||||
sessionFactory = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user