package net.csdn.jpa;
import net.csdn.ServiceFramwork;
import net.csdn.common.settings.Settings;
import net.csdn.env.Environment;
import net.csdn.jpa.context.JPAConfig;
import net.csdn.jpa.model.Model;
import java.util.HashMap;
import java.util.Map;
/**
* BlogInfo: WilliamZhu
* Date: 12-6-26
* Time: 下午9:46
* 因为无法通过IOC管理jpa生成的对象(当然可以通过AOP解决,避免复杂,我们这里采用静态工厂,这个会在系统启动的时候设置值)
* 目前不支持多数据库
*/
public class JPA {
private static JPAConfig jpaConfig;
private static Settings settings;
private static Environment environment;
public final static Map<String, Class<Model>> models = new HashMap<String, Class<Model>>();
public static JPAConfig getJPAConfig() {
if (jpaConfig == null) {
jpaConfig = new JPAConfig(properties(), settings.get("datasources.mysql.database"));
}
return jpaConfig;
}
public static void setJPAConfig(JPAConfig _jpaConfig) {
jpaConfig = _jpaConfig;
}
public static Settings getSettings() {
return settings;
}
public static void setSettings(Settings settings) {
JPA.settings = settings;
}
public Environment getEnvironment() {
return environment;
}
public void setEnvironment(Environment environment) {
this.environment = environment;
}
private static Map<String, String> properties() {
Map<String, String> properties = new HashMap<String, String>();
Map<String, Settings> groups = settings.getGroups(ServiceFramwork.mode.name() + ".datasources");
Settings mysqlSetting = groups.get("mysql");
properties.put("hibernate.show_sql", settings.get("orm.show_sql", "true"));
properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
properties.put("hibernate.connection.password", mysqlSetting.get("password"));
properties.put("hibernate.connection.url", "jdbc:mysql://" + mysqlSetting.get("host") + "/" + mysqlSetting.get("database"));
properties.put("hibernate.connection.username", mysqlSetting.get("username"));
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.c3p0.min_size", settings.get("orm.pool_min_size", "20"));
properties.put("hibernate.c3p0.max_size", settings.get("orm.pool_max_size", "20"));
properties.put("hibernate.c3p0.timeout", settings.get("orm.timeout", "300"));
properties.put("hibernate.c3p0.max_statements", settings.get("orm.max_statements", "50"));
properties.put("hibernate.c3p0.idle_test_period", settings.get("orm.idle_test_period", "3000"));
// properties.put("hibernate.query.factory_class", "org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory");
return properties;
}
}