From b485028f7b5c5b1270eefea6a72101d9b4164f28 Mon Sep 17 00:00:00 2001 From: Emerson Oliveira Date: Mon, 23 Dec 2013 13:44:35 -0300 Subject: [PATCH] IN PROGRESS - issue FWK-166: Possibilidade do usuário injetar EntityManagerFactory em sua aplicação --- impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java | 84 +++++++++++++++++------------------------------------------------------------------- 1 file changed, 17 insertions(+), 67 deletions(-) diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java index 9e6cd51..03f2b2a 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java @@ -38,7 +38,6 @@ package br.gov.frameworkdemoiselle.internal.producer; import java.io.Serializable; import java.util.Map; -import java.util.Set; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Default; @@ -48,14 +47,9 @@ import javax.enterprise.inject.spi.InjectionPoint; import javax.inject.Inject; import javax.persistence.EntityManager; -import org.slf4j.Logger; - -import br.gov.frameworkdemoiselle.DemoiselleException; import br.gov.frameworkdemoiselle.annotation.Name; -import br.gov.frameworkdemoiselle.configuration.Configuration; import br.gov.frameworkdemoiselle.internal.configuration.EntityManagerConfig; import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy; -import br.gov.frameworkdemoiselle.util.ResourceBundle; /** *

@@ -64,26 +58,19 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; *

*/ @ApplicationScoped -public class EntityManagerProducer implements Serializable{ +public class EntityManagerProducer implements Serializable { private static final long serialVersionUID = 1L; @Inject - private Logger logger; - - @Inject - @Name("demoiselle-jpa-bundle") - private ResourceBundle bundle; - - @Inject - private EntityManagerFactoryProducer factory; - - @Inject private Instance storeInstance; - + @Inject private EntityManagerConfig configuration; - + + @Inject + private Persistences persistenceUnitReader; + /** *

* Default EntityManager factory. Tries two strategies to produces EntityManager instances. @@ -98,80 +85,43 @@ public class EntityManagerProducer implements Serializable{ */ @Default @Produces - protected EntityManager createDefault(InjectionPoint ip, EntityManagerConfig config) { - String persistenceUnit = getFromProperties(config); + protected EntityManager createDefault(EntityManagerConfig config) { + String persistenceUnit = persistenceUnitReader.getFromProperties(config); if (persistenceUnit == null) { - persistenceUnit = getFromXML(); + persistenceUnit = persistenceUnitReader.getFromXML(); } return new EntityManagerProxy(persistenceUnit); } /** - * *

- * Factory that reads the {@link AmbiguousQualifier} qualifier and creates an entity manager with - * a matching persistence unit name. + * Factory that reads the {@link AmbiguousQualifier} qualifier and creates an entity manager with a matching + * persistence unit name. *

* - * * @param config * Suplies informations about EntityManager defined in properties file. * @return Produced EntityManager. */ @Name("") @Produces - protected EntityManager createNamed(InjectionPoint ip, EntityManagerConfig config) { + protected EntityManager createNamed(InjectionPoint ip) { String persistenceUnit = ip.getAnnotated().getAnnotation(Name.class).value(); return new EntityManagerProxy(persistenceUnit); } - /** - * Tries to get persistence unit name from demoiselle.properties. - * - * @param config - * Configuration containing persistence unit name. - * @return Persistence unit name. - */ - private String getFromProperties(EntityManagerConfig config) { - String persistenceUnit = config.getDefaultPersistenceUnitName(); - - if (persistenceUnit != null) { - this.logger.debug(bundle.getString("getting-persistence-unit-from-properties", - Configuration.DEFAULT_RESOURCE)); - } - - return persistenceUnit; - } - - /** - * Uses persistence.xml to get informations about which persistence unit to use. Throws DemoiselleException if more - * than one Persistence Unit is defined. - * - * @return Persistence Unit AmbiguousQualifier - */ - private String getFromXML() { - Set persistenceUnits = factory.getCache().keySet(); - - if (persistenceUnits.size() > 1) { - throw new DemoiselleException(bundle.getString("more-than-one-persistence-unit-defined", - Name.class.getSimpleName())); - } else { - return persistenceUnits.iterator().next(); - } - } - public EntityManager getEntityManager(String persistenceUnit) { return getStore().getEntityManager(persistenceUnit); } - + public Map getCache() { return getStore().getCache(); } - - private EntityManagerStore getStore(){ - switch(configuration.getEntityManagerScope()){ + + private EntityManagerStore getStore() { + switch (configuration.getEntityManagerScope()) { case REQUEST: return storeInstance.select(RequestEntityManagerStore.class).get(); case APPLICATION: @@ -188,5 +138,5 @@ public class EntityManagerProducer implements Serializable{ return storeInstance.select(RequestEntityManagerStore.class).get(); } } - + } -- libgit2 0.21.2