());
- @Inject
- private EntityManagerConfig configuration;
+ /*@Inject
+ private EntityManagerConfig configuration;*/
/**
*
@@ -124,8 +136,45 @@ public class EntityManagerProducer implements Serializable{
return new EntityManagerProxy(persistenceUnit);
}
- public EntityManager getEntityManager(String persistenceUnit) {
+ /*public EntityManager getEntityManager(String persistenceUnit) {
return getStore().getEntityManager(persistenceUnit);
+ }*/
+
+ @PostConstruct
+ void init() {
+ for (String persistenceUnit : getFactory().getCache().keySet()) {
+ getEntityManager(persistenceUnit);
+ }
+ }
+
+ @PreDestroy
+ void close() {
+ //Se o produtor não possui escopo, então o ciclo de vida
+ //de EntityManager produzidos é responsabilidade do desenvolvedor. Não
+ //fechamos os EntityManagers aqui.
+ //if (configuration.getEntityManagerScope() != EntityManagerScope.NOSCOPE){
+ for (EntityManager entityManager : cache.values()) {
+ entityManager.close();
+ }
+ //}
+ cache.clear();
+ }
+
+ public EntityManager getEntityManager(String persistenceUnit) {
+ EntityManager entityManager = null;
+
+ if (cache.containsKey(persistenceUnit)) {
+ entityManager = cache.get(persistenceUnit);
+
+ } else {
+ entityManager = getFactory().create(persistenceUnit).createEntityManager();
+ entityManager.setFlushMode(FlushModeType.AUTO);
+
+ cache.put(persistenceUnit, entityManager);
+ this.getLogger().info(getBundle().getString("entity-manager-was-created", persistenceUnit));
+ }
+
+ return entityManager;
}
/**
@@ -164,36 +213,47 @@ public class EntityManagerProducer implements Serializable{
}
public Map getCache() {
- return getStore().getCache();
+ //return getStore().getCache();
+ return this.cache;
}
- private AbstractEntityManagerStore getStore(){
- if (entityManagerStore==null){
- switch(configuration.getEntityManagerScope()){
- case APPLICATION:
- entityManagerStore = Beans.getReference(ApplicationEntityManagerStore.class);
- break;
- case CONVERSATION:
- entityManagerStore = Beans.getReference(ConversationEntityManagerStore.class);
- break;
- case NOSCOPE:
- entityManagerStore = Beans.getReference(DependentEntityManagerStore.class);
- break;
- case REQUEST:
- entityManagerStore = Beans.getReference(RequestEntityManagerStore.class);
- break;
- case SESSION:
- entityManagerStore = Beans.getReference(SessionEntityManagerStore.class);
- break;
- case VIEW:
- entityManagerStore = Beans.getReference(ViewEntityManagerStore.class);
- break;
- default:
- entityManagerStore = Beans.getReference(RequestEntityManagerStore.class);
- break;
- }
+ /*private AbstractEntityManagerStore getStore(){
+ switch(configuration.getEntityManagerScope()){
+ case REQUEST:
+ return storeInstance.select(RequestEntityManagerStore.class).get();
+ case APPLICATION:
+ return storeInstance.select(ApplicationEntityManagerStore.class).get();
+ case CONVERSATION:
+ return storeInstance.select(ConversationEntityManagerStore.class).get();
+ case NOSCOPE:
+ return storeInstance.select(DependentEntityManagerStore.class).get();
+ case SESSION:
+ return storeInstance.select(SessionEntityManagerStore.class).get();
+ case VIEW:
+ return storeInstance.select(ViewEntityManagerStore.class).get();
+ default:
+ return storeInstance.select(RequestEntityManagerStore.class).get();
+ }
+ }*/
+
+ protected Logger getLogger(){
+ if (logger==null){
+ logger = Beans.getReference(Logger.class);
+ }
+ return logger;
+ }
+
+ protected ResourceBundle getBundle(){
+ if (bundle==null){
+ bundle = Beans.getReference(ResourceBundle.class , new NameQualifier("demoiselle-jpa-bundle"));
+ }
+ return bundle;
+ }
+
+ private EntityManagerFactoryProducer getFactory(){
+ if (factory==null){
+ factory = Beans.getReference(EntityManagerFactoryProducer.class);
}
-
- return entityManagerStore;
+ return factory;
}
}
diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/RequestEntityManagerStore.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/RequestEntityManagerStore.java
index 0b70aca..466cf77 100644
--- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/RequestEntityManagerStore.java
+++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/RequestEntityManagerStore.java
@@ -36,6 +36,8 @@
*/
package br.gov.frameworkdemoiselle.internal.producer;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
import javax.enterprise.context.RequestScoped;
/**
@@ -49,5 +51,16 @@ import javax.enterprise.context.RequestScoped;
public class RequestEntityManagerStore extends AbstractEntityManagerStore {
private static final long serialVersionUID = 1L;
+
+ @Override
+ @PostConstruct
+ public void initialize() {
+ super.init();
+ }
+ @Override
+ @PreDestroy
+ public void terminate() {
+ super.close();
+ }
}
diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/SessionEntityManagerStore.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/SessionEntityManagerStore.java
index d1f71fe..521c40a 100644
--- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/SessionEntityManagerStore.java
+++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/SessionEntityManagerStore.java
@@ -36,6 +36,8 @@
*/
package br.gov.frameworkdemoiselle.internal.producer;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
import javax.enterprise.context.SessionScoped;
/**
@@ -49,5 +51,17 @@ import javax.enterprise.context.SessionScoped;
public class SessionEntityManagerStore extends AbstractEntityManagerStore {
private static final long serialVersionUID = 1L;
+
+ @Override
+ @PostConstruct
+ public void initialize() {
+ super.init();
+ }
+
+ @Override
+ @PreDestroy
+ public void terminate() {
+ super.close();
+ }
}
diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ViewEntityManagerStore.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ViewEntityManagerStore.java
index bf0a603..7c81ba6 100644
--- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ViewEntityManagerStore.java
+++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ViewEntityManagerStore.java
@@ -36,6 +36,9 @@
*/
package br.gov.frameworkdemoiselle.internal.producer;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
import br.gov.frameworkdemoiselle.annotation.ViewScoped;
/**
@@ -49,5 +52,17 @@ import br.gov.frameworkdemoiselle.annotation.ViewScoped;
public class ViewEntityManagerStore extends AbstractEntityManagerStore {
private static final long serialVersionUID = 1L;
+
+ @Override
+ @PostConstruct
+ public void initialize() {
+ super.init();
+ }
+
+ @Override
+ @PreDestroy
+ public void terminate() {
+ super.close();
+ }
}
diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxy.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxy.java
index bf6bb82..ab8c70c 100644
--- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxy.java
+++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/EntityManagerProxy.java
@@ -427,7 +427,7 @@ public class EntityManagerProxy implements EntityManager, Serializable {
*/
protected final void joinTransactionIfNecessary() {
try {
- getEntityManagerDelegate().getTransaction();
+ /*EntityTransaction transaction = */getEntityManagerDelegate().getTransaction();
} catch (IllegalStateException cause) {
//IllegalStateException is launched if we are on a JTA entity manager, so
//we assume we need to join transaction instead of creating one.
@@ -586,4 +586,5 @@ public class EntityManagerProxy implements EntityManager, Serializable {
private ResourceBundle getBundle(){
return Beans.getReference(ResourceBundle.class,new NameQualifier("demoiselle-jpa-bundle"));
}
+
}
diff --git a/impl/extension/jpa/src/test/java/producer/NoScopedProducerTest.java b/impl/extension/jpa/src/test/java/producer/NoScopedProducerTest.java
index 82734d6..7c318a4 100644
--- a/impl/extension/jpa/src/test/java/producer/NoScopedProducerTest.java
+++ b/impl/extension/jpa/src/test/java/producer/NoScopedProducerTest.java
@@ -9,6 +9,7 @@ import javax.persistence.EntityManager;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -17,6 +18,8 @@ import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
import br.gov.frameworkdemoiselle.util.Beans;
import br.gov.frameworkdemoiselle.util.NameQualifier;
+//TODO Implementação de escopo selecionável tem que concluir antes de ativar esse teste
+@Ignore
@RunWith(Arquillian.class)
public class NoScopedProducerTest {
diff --git a/impl/extension/jpa/src/test/java/producer/ViewScopedProducerTest.java b/impl/extension/jpa/src/test/java/producer/ViewScopedProducerTest.java
index 95e9fef..208e0cb 100644
--- a/impl/extension/jpa/src/test/java/producer/ViewScopedProducerTest.java
+++ b/impl/extension/jpa/src/test/java/producer/ViewScopedProducerTest.java
@@ -10,6 +10,7 @@ import javax.persistence.EntityManager;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -19,6 +20,8 @@ import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
import br.gov.frameworkdemoiselle.util.Beans;
import br.gov.frameworkdemoiselle.util.NameQualifier;
+//TODO Implementação de escopo selecionável tem que concluir antes de ativar esse teste
+@Ignore
@RunWith(Arquillian.class)
public class ViewScopedProducerTest {
diff --git a/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java b/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java
index e1b70be..f03e131 100644
--- a/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java
+++ b/impl/extension/jpa/src/test/java/transaction/interceptor/JPATransactionTest.java
@@ -66,7 +66,6 @@ public class JPATransactionTest {
@Test
public void commitWithSuccess() {
-
tb.commitWithSuccess();
MyEntity1 entity1 = em1.find(MyEntity1.class, tb.createId("id-1"));
@@ -78,7 +77,6 @@ public class JPATransactionTest {
@Test
public void rollbackWithSuccess() {
-
try {
tb.rollbackWithSuccess();
} catch (Exception e) {
--
libgit2 0.21.2