package cn.edu.ecut;
import com.fasterxml.classmate.AnnotationConfiguration;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.boot.MetadataSources;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
// private static Configuration configuration = new AnnotationConfiguration();
private static SessionFactory sessionFactory;
// private static String configFile = CONFIG_FILE_LOCATION;//github源代码--24
private static Configuration configuration= new Configuration();
private static ServiceRegistry serviceRegistry;
static {
try {
//configuration.configure(configFile);//github源代码--19
configuration.configure();//得到configuration
//sessionFactory = configuration.buildSessionFactory();
serviceRegistry =new StandardServiceRegistryBuilder().configure().build();
try {
sessionFactory= new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
}catch (Exception e){
StandardServiceRegistryBuilder.destroy(serviceRegistry);
}
} catch (Exception e) {
System.out.println("%%%% Error Creating SessionFactorv %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
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;
}
public static void rebuildSessionFactory(){
try {
//configuration.configure(configFile);//github源代码--19--24中的那个静态块
configuration.configure();//得到configuration
//sessionFactory = configuration.buildSessionFactory();
serviceRegistry =new StandardServiceRegistryBuilder().configure().build();
try {
sessionFactory= new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
}catch (Exception e){
StandardServiceRegistryBuilder.destroy(serviceRegistry);
}
} catch (Exception e) {
System.out.println("%%%% Error Creating SessionFactorv %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = threadlocal.get();
threadlocal.set(null);
if(session != null) {
session.close();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
/**github源代码有多出这个,
// public static void setConfigFile(String configFile){
// HibernateSessionFactory.configFile = configFile;
// sessionFactory = null;
// }
*/
public static Configuration getConfiguration() {
return configuration;
}
}
//其实github
源代码中就使获取configuration对
象方式不同
Github找到的源代码
package com.test.util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
private static Configuration configuration = new AnnotationConfiguration();
private static SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
public static Session getSession() throws HibernateException {
Session session = threadlocal.get();
if(session == null || !session.isOpen()) {
if(sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
threadlocal.set(session);
}
return session;
}
public static void rebuildSessionFactory(){
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = threadlocal.get();
threadlocal.set(null);
if(session != null) {
session.close();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void setConfigFile(String configFile){
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
public static Configuration getConfiguration() {
return configuration;
}
}