package li.hibernate;
import java.io.File;
import java.util.List;
import javax.sql.DataSource;
import li.util.Files;
import org.hibernate.cfg.Configuration;
/**
* SessionFactory
*
* @author 明伟
*/
public class SessionFactory extends SessionFactoryWrapper {
private static final long serialVersionUID = -8786008904930067379L;
static final ThreadLocal<DataSource> DATASOURCE_THREADLOCAL = new ThreadLocal<DataSource>();
private Configuration configuration;
private org.hibernate.SessionFactory sessionFactory;
public void setDataSource(DataSource dataSource) {
DATASOURCE_THREADLOCAL.set(dataSource);
}
public DataSource getDataSource() {
return DATASOURCE_THREADLOCAL.get();
}
/**
* read hibernate configuration
*/
public Configuration getConfiguration() {
if (null == this.configuration) {
Configuration configuration = new Configuration();
configuration.setProperty("hibernate.connection.provider_class", "li.hibernate.DataSourceConnectionProvider");
if (new File(Files.root() + File.separator + "hibernate.cfg.xml").exists()) {
configuration.configure();// 读取 hibernate.cfg.xml
}
File root = Files.root();
List<String> hbms = Files.list(root, "^.*\\.hbm\\.xml$", true, 1);
for (String hbm : hbms) {
configuration.addResource(hbm.replace(root + "", ""));
}
this.configuration = configuration;
}
return this.configuration;
}
/**
* buildSessionFactory
*/
public org.hibernate.SessionFactory getSessionFactory() {
if (null == this.sessionFactory) {
this.sessionFactory = this.getConfiguration().buildSessionFactory();
}
return this.sessionFactory;
}
}