2016-04-13 62 views
0

benim dao sınıfları bir varlık yöneticisi enjekte bir sınıf üzerinde çalışıyorum ama varlık yöneticisi kapattığınızda ben Bu sınıfBir yakınsama() sonra varlık yöneticisi nasıl açılır; JAVA EE

public class EMinjector { 

public static EntityManagerFactory eMF; 
public static EntityManager eM; 

static { 
    eMF = Persistence.createEntityManagerFactory("persistenceUnit"); 
    eM = eMF.createEntityManager(); 
} 

public static EntityManager getEM(){ 
    if (eM.getTransaction().isActive()==false) 
     //here where I want to open eM 
    return eM; 
} 

public static void closeEM() { 
    eM.getTransaction().commit(); 
    eM.close(); 
} 
} 
olduğunu

tekrar açamazsınız

eM.getTransaction() 'ı denedim begin();

Stacktraces 

java.lang.IllegalStateException: EntityManager is closed 
org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:97) 
org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:88) 
org.hibernate.jpa.internal.EntityManagerImpl.getSession(EntityManagerImpl.java:103) 
org.hibernate.jpa.internal.TransactionImpl.getSession(TransactionImpl.java:35) 
org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:45) 
com.iticsys.GBO.dao.EMinjector.getEM(EMinjector.java:21) 

// line 21 is where I pointed before 
+0

Kodunuz bir EntityManager'ın nasıl oluşturulacağını anlatır _eM = eMF.createEntityManager(); _ –

+0

Bir işlem yapmak istediğimde her zaman bir varlık yöneticisi oluşturmak istemiyorum, bunun yerine yalnızca bir tane oluşturmak istiyorum Bir işlemden önce ve bundan sonra kapatın. –

+0

bir EM oluşturuluyor EM EM A ise! –

cevap

0

bir JavaEE ortamında size RESOURCE_LOCAL ancak JTA kullanmamalısınız: ama bu exeption atar. EntityManager'ı @PersistenceContext ile enjekte edebilirsiniz ve EJB'ler zaten işlemsel olduğundan, işlemek, kapatmak zorunda değilsiniz.

Yukarıdaki örnekte olduğu gibi bir RESOURCE_LOCAL EntityManager için kapalı EntityManager'ı yeniden kullanamazsınız, ancak fabrika kullanarak yeni bir tane oluşturmanız gerekir.