package cn.jcenterhome.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public class SessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static org.hibernate.SessionFactory sessionFactory;
public static synchronized void buildSessionFactory() throws SQLException {
if (sessionFactory == null) {
Map<String, String> jchConfig = JavaCenterHome.jchConfig;
String dbHost = jchConfig.get("dbHost");
String dbPort = jchConfig.get("dbPort");
String dbName = jchConfig.get("dbName");
String dbUser = jchConfig.get("dbUser");
String dbPw = jchConfig.get("dbPw");
String dbCharset = jchConfig.get("dbCharset");
if (connect(dbHost, dbPort, dbName, dbUser, dbPw, dbCharset)) {
Properties extraProperties = new Properties();
extraProperties.setProperty("hibernate.connection.url", "jdbc:mysql://" + dbHost + ":"
+ dbPort + "/" + dbName + "?zeroDateTimeBehavior=convertToNull");
extraProperties.setProperty("hibernate.connection.username", dbUser);
extraProperties.setProperty("hibernate.connection.password", dbPw);
extraProperties.setProperty("hibernate.connection.characterEncoding", dbCharset);
extraProperties.setProperty("hibernate.connection.characterSetResults", dbCharset);
Configuration configuration = new Configuration();
configuration = configuration.configure(CONFIG_FILE_LOCATION);
configuration = configuration.addProperties(extraProperties);
sessionFactory = configuration.buildSessionFactory();
}
}
}
public static Session getSession() throws SQLException {
if (sessionFactory == null) {
buildSessionFactory();
}
return sessionFactory.getCurrentSession();
}
public static void rebuildSessionFactory() throws SQLException {
sessionFactory = null;
buildSessionFactory();
}
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
private static boolean connect(String dbHost, String dbPort, String dbName, String dbUser, String dbPw,
String dbCharset) throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName
+ "?useUnicode=true&characterEncoding=" + dbCharset, dbUser, dbPw);
if (conn != null) {
if (!conn.isClosed()) {
conn.close();
conn = null;
}
return true;
}
return false;
}
}