packagecom.oracle.dao;importorg.hibernate.HibernateException;importorg.hibernate.Session;importorg.hibernate.cfg.Configuration;importorg.hibernate.service.ServiceRegistry;importorg.hibernate.service.ServiceRegistryBuilder;/*** 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 classHibernateSessionFactory {/*** 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 final ThreadLocal threadLocal = new ThreadLocal();private staticorg.hibernate.SessionFactory sessionFactory;private static Configuration configuration = newConfiguration();private staticServiceRegistry serviceRegistry;static{try{
configuration.configure();
serviceRegistry= newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
}catch(Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}privateHibernateSessionFactory() {
}/*** Returns the ThreadLocal Session instance. Lazy initialize
* the SessionFactory
if needed.
*
*@returnSession
*@throwsHibernateException*/
public static Session getSession() throwsHibernateException {
Session session=(Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {
rebuildSessionFactory();
}
session= (sessionFactory != null) ?sessionFactory.openSession()
:null;
threadLocal.set(session);
}returnsession;
}/*** Rebuild hibernate session factory
**/
public static voidrebuildSessionFactory() {try{
configuration.configure();
serviceRegistry= newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
}catch(Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}/*** Close the single hibernate session instance.
*
*@throwsHibernateException*/
public static void closeSession() throwsHibernateException {
Session session=(Session) threadLocal.get();
threadLocal.set(null);if (session != null) {
session.close();
}
}/*** return session factory
**/
public staticorg.hibernate.SessionFactory getSessionFactory() {returnsessionFactory;
}/*** return hibernate configuration
**/
public staticConfiguration getConfiguration() {returnconfiguration;
}
}