mirror of https://github.com/sismics/docs.git
111 lines
3.8 KiB
Java
111 lines
3.8 KiB
Java
package com.sismics.util.jpa;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.URL;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Properties;
|
|
|
|
import javax.persistence.EntityManagerFactory;
|
|
import javax.persistence.Persistence;
|
|
|
|
import org.hibernate.cfg.Environment;
|
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
|
import org.hibernate.service.ServiceRegistry;
|
|
import org.hibernate.service.ServiceRegistryBuilder;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.sismics.docs.core.util.DirectoryUtil;
|
|
|
|
/**
|
|
* Entity manager factory.
|
|
*
|
|
* @author jtremeaux
|
|
*/
|
|
public final class EMF {
|
|
private static final Logger log = LoggerFactory.getLogger(EMF.class);
|
|
|
|
private static EntityManagerFactory emfInstance;
|
|
|
|
static {
|
|
try {
|
|
Map<Object, Object> properties = getEntityManagerProperties();
|
|
|
|
Environment.verifyProperties(properties);
|
|
ConfigurationHelper.resolvePlaceHolders(properties);
|
|
ServiceRegistry reg = new ServiceRegistryBuilder().applySettings(properties).buildServiceRegistry();
|
|
|
|
DbOpenHelper openHelper = new DbOpenHelper(reg) {
|
|
|
|
@Override
|
|
public void onCreate() throws Exception {
|
|
executeAllScript(0);
|
|
}
|
|
|
|
@Override
|
|
public void onUpgrade(int oldVersion, int newVersion) throws Exception {
|
|
for (int version = oldVersion + 1; version <= newVersion; version++) {
|
|
executeAllScript(version);
|
|
}
|
|
}
|
|
};
|
|
openHelper.open();
|
|
|
|
emfInstance = Persistence.createEntityManagerFactory("transactions-optional", getEntityManagerProperties());
|
|
|
|
} catch (Throwable t) {
|
|
log.error("Error creating EMF", t);
|
|
}
|
|
}
|
|
|
|
private static Map<Object, Object> getEntityManagerProperties() {
|
|
// Use properties file if exists
|
|
try {
|
|
URL hibernatePropertiesUrl = EMF.class.getResource("/hibernate.properties");
|
|
if (hibernatePropertiesUrl != null) {
|
|
log.info("Configuring EntityManager from hibernate.properties");
|
|
|
|
InputStream is = hibernatePropertiesUrl.openStream();
|
|
Properties properties = new Properties();
|
|
properties.load(is);
|
|
return properties;
|
|
}
|
|
} catch (IOException e) {
|
|
log.error("Error reading hibernate.properties", e);
|
|
}
|
|
|
|
// Use environment parameters
|
|
log.info("Configuring EntityManager from environment parameters");
|
|
Map<Object, Object> props = new HashMap<Object, Object>();
|
|
props.put("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver");
|
|
File dbDirectory = DirectoryUtil.getDbDirectory();
|
|
String dbFile = dbDirectory.getAbsoluteFile() + File.separator + "docs";
|
|
props.put("hibernate.connection.url", "jdbc:hsqldb:file:" + dbFile + ";hsqldb.write_delay=false;shutdown=true");
|
|
props.put("hibernate.connection.username", "sa");
|
|
props.put("hibernate.hbm2ddl.auto", "none");
|
|
props.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
|
|
props.put("hibernate.show_sql", "false");
|
|
props.put("hibernate.format_sql", "false");
|
|
props.put("hibernate.max_fetch_depth", "5");
|
|
props.put("hibernate.cache.use_second_level_cache", "false");
|
|
return props;
|
|
}
|
|
|
|
/**
|
|
* Private constructor.
|
|
*/
|
|
private EMF() {
|
|
}
|
|
|
|
/**
|
|
* Returns an instance of EMF.
|
|
*
|
|
* @return Instance of EMF
|
|
*/
|
|
public static EntityManagerFactory get() {
|
|
return emfInstance;
|
|
}
|
|
} |