You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.1 KiB
118 lines
3.1 KiB
package model;
|
|
|
|
import org.hibernate.HibernateException;
|
|
import org.hibernate.Session;
|
|
import org.hibernate.cfg.Configuration;
|
|
|
|
/**
|
|
* Configures and provides access to Hibernate sessions, tied to the
|
|
* current thread of execution. Follows the Thread Local Session
|
|
* pattern, see {@link http://hibernate.org/42.html }.
|
|
*/
|
|
public class HibernateSessionFactory {
|
|
|
|
/**
|
|
* Location of hibernate.cfg.xml file.
|
|
* Location should be on the classpath as Hibernate uses
|
|
* #resourceAsStream style lookup for its configuration file.
|
|
* The default classpath location of the hibernate config file is
|
|
* in the default package. Use #setConfigFile() to update
|
|
* the location of the configuration file for the current session.
|
|
*/
|
|
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
|
|
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
|
|
private static Configuration configuration = new Configuration();
|
|
private static org.hibernate.SessionFactory sessionFactory;
|
|
private static String configFile = CONFIG_FILE_LOCATION;
|
|
|
|
static {
|
|
try {
|
|
configuration.configure(configFile);
|
|
sessionFactory = configuration.buildSessionFactory();
|
|
} catch (Exception e) {
|
|
System.err
|
|
.println("%%%% Error Creating SessionFactory %%%%");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
private HibernateSessionFactory() {
|
|
}
|
|
|
|
/**
|
|
* Returns the ThreadLocal Session instance. Lazy initialize
|
|
* the <code>SessionFactory</code> if needed.
|
|
*
|
|
* @return Session
|
|
* @throws HibernateException
|
|
*/
|
|
public static Session getSession() throws HibernateException {
|
|
Session session = (Session) threadLocal.get();
|
|
|
|
if (session == null || !session.isOpen()) {
|
|
if (sessionFactory == null) {
|
|
rebuildSessionFactory();
|
|
}
|
|
session = (sessionFactory != null) ? sessionFactory.openSession()
|
|
: null;
|
|
threadLocal.set(session);
|
|
}
|
|
|
|
return session;
|
|
}
|
|
|
|
/**
|
|
* Rebuild hibernate session factory
|
|
*
|
|
*/
|
|
public static void rebuildSessionFactory() {
|
|
try {
|
|
configuration.configure(configFile);
|
|
sessionFactory = configuration.buildSessionFactory();
|
|
} catch (Exception e) {
|
|
System.err
|
|
.println("%%%% Error Creating SessionFactory %%%%");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Close the single hibernate session instance.
|
|
*
|
|
* @throws HibernateException
|
|
*/
|
|
public static void closeSession() throws HibernateException {
|
|
Session session = (Session) threadLocal.get();
|
|
threadLocal.set(null);
|
|
|
|
if (session != null) {
|
|
session.close();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* return session factory
|
|
*
|
|
*/
|
|
public static org.hibernate.SessionFactory getSessionFactory() {
|
|
return sessionFactory;
|
|
}
|
|
|
|
/**
|
|
* return session factory
|
|
*
|
|
* session factory will be rebuilded in the next call
|
|
*/
|
|
public static void setConfigFile(String configFile) {
|
|
HibernateSessionFactory.configFile = configFile;
|
|
sessionFactory = null;
|
|
}
|
|
|
|
/**
|
|
* return hibernate configuration
|
|
*
|
|
*/
|
|
public static Configuration getConfiguration() {
|
|
return configuration;
|
|
}
|
|
|
|
} |