ठीक है, मैंने लेखों/उदाहरणों का समूह पढ़ा है कि सिंगलटन में एंटीटी मैनेजर फैक्ट्री कैसे लिखें।EntityManagerFactory उदाहरण कब बनाया/खोला जाना चाहिए?
उनमें से मेरे लिए सबसे आसान एक थोड़ा समझने के लिए:
http://javanotepad.blogspot.com/2007/05/jpa-entitymanagerfactory-in-web.html
मुझे पता चला कि EntityManagerFactory (ईएमएफ) केवल आवेदन दायरे में एक बार बेहतर बनाया जाना चाहिए। (?):
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
और मेरे विधि EmProvider का उपयोग कर:
और यह भी एक बार यह प्रयोग किया जाता है ईएमएफ बंद करने के लिए सुनिश्चित करें कि
तो मैं EMF सहायक वर्ग व्यापार के तरीकों का उपयोग करने के लिए लिखा था
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();
}
मैंने विधि स्तर के भीतर EntityManager (em) को बंद करने के लिए सुनिश्चित किया है। लेकिन जब EntityManagerFactory को बंद किया जाना चाहिए तो? और क्यों ईएमएफ को सिंगलटन इतना बुरा होना चाहिए ??? मैंने समवर्ती मुद्दों के बारे में पढ़ा लेकिन जैसा कि मुझे बहु-थ्रेड-व्याकरण नहीं मिला है, मैं वास्तव में इस विचार पर स्पष्ट नहीं हो सकता।
"और क्यों ईएमएफ को सिंगलटन इतना बुरा होना चाहिए ???" यह कथन मुझे शायद एक और सवाल खोलना चाहिए .... –