/**
* JPAUtil.java
* Created On 2007, May 3, 2007 9:55:54 PM
* @author E. Rajasekar
*/
package app.astrosoft.persistence;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.hibernate.cfg.Configuration;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class JPAUtil {
private static final Logger log = Logger.getLogger(JPAUtil.class.getName());
public static final String PERSISTENT_UNIT_NAME = "astrosoft";
private static EntityManagerFactory emf = null;
static {
/*Ejb3Configuration cfg = new Ejb3Configuration().configure("/META-INF/persistence.xml");
Configuration hbmcfg = cfg.getHibernateConfiguration();
SchemaExport schemaExport = new SchemaExport(hbmcfg);
schemaExport.create(true, true);*/
}
public static synchronized EntityManagerFactory getEntityManagerFactory() {
if (emf == null || !emf.isOpen()){
emf = Persistence.createEntityManagerFactory("astrosoft");
if (!checkIfSchemaExists(emf)){
log.warning("DB Schema is not found, create new schema");
//TODO: This is hibernate specific, should be changed for other databases.
Map configOverrides = new HashMap();
configOverrides.put("hibernate.hbm2ddl.auto", "create");
emf = Persistence.createEntityManagerFactory("astrosoft", configOverrides);
}
}
return emf;
}
public static synchronized void closeEntityManagerFactory(){
if (emf != null){
emf.close();
}
}
private static boolean checkIfSchemaExists(EntityManagerFactory emf){
boolean exists = true;
EntityManager em = emf.createEntityManager();
Query q = em.createNamedQuery(NumerologicalName.FIND_ALL_NAMES);
q.setFirstResult(0);
q.setMaxResults(1);
try {
List names = q.getResultList();
}catch(Exception e){
log.log(Level.SEVERE, "Exception in querying names, Exception: " , e);
if (e.getCause().getCause().getMessage().indexOf("Table not found") >= 0){
exists = false;
}
}finally {
em.close();
}
return exists;
}
}