package es.uniovi.asw.trivial.db.impl.local.persistencia.consultas.util;
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Jpa {
private static EntityManagerFactory emf = null;
private static ThreadLocal<EntityManager> emThread =
new ThreadLocal<EntityManager>();
public static EntityManager createEntityManager() {
EntityManager entityManager = null;
try{
entityManager = getEmf().createEntityManager();
emThread.set(entityManager);
}
catch(javax.persistence.PersistenceException e){
System.err.println("¡ ERROR - Seguramente NO se han añadido las dos librerias de la carpeta 'lib' (Donde se encuentra hibernate3.), al Build Path del proyecto. !");
System.exit(0);
}
return entityManager;
}
public static EntityManager getManager() {
return emThread.get();
}
private static EntityManagerFactory getEmf() {
if (emf == null){
String persistenceUnitName = loadPersistentUnitName();
emf = Persistence.createEntityManagerFactory(persistenceUnitName);
}
return emf;
}
private static String loadPersistentUnitName() {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(Jpa.class.getResourceAsStream("/META-INF/persistence.xml"));
doc.getDocumentElement().normalize();
NodeList nl = doc.getElementsByTagName("persistence-unit");
return ((Element)nl.item(0)).getAttribute("name");
} catch (ParserConfigurationException e1) {
throw new RuntimeException(e1);
} catch (SAXException e1) {
throw new RuntimeException(e1);
} catch (IOException e1) {
throw new RuntimeException(e1);
}
}
}