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); } } }