Ok, przeczytałem garść artykułów/przykładów jak napisać Entity Manager Factory w singleton.Kiedy należy utworzyć lub otworzyć instancję EntityManagerFactory?
Jednym z nich najłatwiejszy dla mnie do zrozumienia trochę:
http://javanotepad.blogspot.com/2007/05/jpa-entitymanagerfactory-in-web.html
dowiedziałem się, że EntityManagerFactory (EMF) powinny być tworzone tylko raz korzystniej w zakresie aplikacji. (?)
a także upewnić się, aby zamknąć EMF gdy jest używany
Więc napisałem EMF klasy pomocnika na użycie metody prowadzenia działalności gospodarczej:
public class EmProvider {
private static final String DB_PU = "KogaAlphaPU";
public static final boolean DEBUG = true;
private static final EmProvider singleton = new EmProvider();
private EntityManagerFactory emf;
private EmProvider() {}
public static EmProvider getInstance() {
return singleton;
}
public EntityManagerFactory getEntityManagerFactory() {
if(emf == null) {
emf = Persistence.createEntityManagerFactory(DB_PU);
}
if(DEBUG) {
System.out.println("factory created on: " + new Date());
}
return emf;
}
public void closeEmf() {
if(emf.isOpen() || emf != null) {
emf.close();
}
emf = null;
if(DEBUG) {
System.out.println("EMF closed at: " + new Date());
}
}
}//end class
i mój sposób korzystania EmProvider:
public String foo() {
EntityManager em = null;
List<Object[]> out = null;
try {
em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
Query query = em.createNativeQuery(JPQL_JOIN); //just some random query
out = query.getResultList();
}
catch(Exception e) {
//handle error....
}
finally {
if(em != null) {
em.close(); //make sure to close EntityManager
}
//should I not close the EMF itself here?????
EmProvider.getInstance().closeEmf();
}
I zadbał, aby zamknąć EntityManager (eM) wewnątrz poziomie metody jak sugeruje. Ale kiedy należy wtedy zamknąć EntityManagerFactory? A dlaczego EMF ma być tak źle? Czytałem o problemach ze współbieżnością, ale ponieważ nie jestem doświadczonym gramatykiem wielu wątków, nie jestem w stanie jasno określić tego pomysłu.
"A dlaczego EMF ma być tak źle?" to oświadczenie powinien prawdopodobnie otworzyć inne pytanie .... –