Commit b485028f7b5c5b1270eefea6a72101d9b4164f28

Authored by Emerson Oliveira
1 parent 82f3bf45
Exists in master

IN PROGRESS - issue FWK-166: Possibilidade do usuário injetar

EntityManagerFactory em sua aplicação 
https://demoiselle.atlassian.net/browse/FWK-166

Refatoração da classe, que agora utliza métodos da classe Persistences
para extrair nomes de unidades de persistência, e exclusão de parâmetros
desnecessários nos métodos produtores
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java
@@ -38,7 +38,6 @@ package br.gov.frameworkdemoiselle.internal.producer; @@ -38,7 +38,6 @@ package br.gov.frameworkdemoiselle.internal.producer;
38 38
39 import java.io.Serializable; 39 import java.io.Serializable;
40 import java.util.Map; 40 import java.util.Map;
41 -import java.util.Set;  
42 41
43 import javax.enterprise.context.ApplicationScoped; 42 import javax.enterprise.context.ApplicationScoped;
44 import javax.enterprise.inject.Default; 43 import javax.enterprise.inject.Default;
@@ -48,14 +47,9 @@ import javax.enterprise.inject.spi.InjectionPoint; @@ -48,14 +47,9 @@ import javax.enterprise.inject.spi.InjectionPoint;
48 import javax.inject.Inject; 47 import javax.inject.Inject;
49 import javax.persistence.EntityManager; 48 import javax.persistence.EntityManager;
50 49
51 -import org.slf4j.Logger;  
52 -  
53 -import br.gov.frameworkdemoiselle.DemoiselleException;  
54 import br.gov.frameworkdemoiselle.annotation.Name; 50 import br.gov.frameworkdemoiselle.annotation.Name;
55 -import br.gov.frameworkdemoiselle.configuration.Configuration;  
56 import br.gov.frameworkdemoiselle.internal.configuration.EntityManagerConfig; 51 import br.gov.frameworkdemoiselle.internal.configuration.EntityManagerConfig;
57 import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy; 52 import br.gov.frameworkdemoiselle.internal.proxy.EntityManagerProxy;
58 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
59 53
60 /** 54 /**
61 * <p> 55 * <p>
@@ -64,26 +58,19 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; @@ -64,26 +58,19 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle;
64 * </p> 58 * </p>
65 */ 59 */
66 @ApplicationScoped 60 @ApplicationScoped
67 -public class EntityManagerProducer implements Serializable{ 61 +public class EntityManagerProducer implements Serializable {
68 62
69 private static final long serialVersionUID = 1L; 63 private static final long serialVersionUID = 1L;
70 64
71 @Inject 65 @Inject
72 - private Logger logger;  
73 -  
74 - @Inject  
75 - @Name("demoiselle-jpa-bundle")  
76 - private ResourceBundle bundle;  
77 -  
78 - @Inject  
79 - private EntityManagerFactoryProducer factory;  
80 -  
81 - @Inject  
82 private Instance<EntityManagerStore> storeInstance; 66 private Instance<EntityManagerStore> storeInstance;
83 - 67 +
84 @Inject 68 @Inject
85 private EntityManagerConfig configuration; 69 private EntityManagerConfig configuration;
86 - 70 +
  71 + @Inject
  72 + private Persistences persistenceUnitReader;
  73 +
87 /** 74 /**
88 * <p> 75 * <p>
89 * Default EntityManager factory. Tries two strategies to produces EntityManager instances. 76 * Default EntityManager factory. Tries two strategies to produces EntityManager instances.
@@ -98,80 +85,43 @@ public class EntityManagerProducer implements Serializable{ @@ -98,80 +85,43 @@ public class EntityManagerProducer implements Serializable{
98 */ 85 */
99 @Default 86 @Default
100 @Produces 87 @Produces
101 - protected EntityManager createDefault(InjectionPoint ip, EntityManagerConfig config) {  
102 - String persistenceUnit = getFromProperties(config); 88 + protected EntityManager createDefault(EntityManagerConfig config) {
  89 + String persistenceUnit = persistenceUnitReader.getFromProperties(config);
103 90
104 if (persistenceUnit == null) { 91 if (persistenceUnit == null) {
105 - persistenceUnit = getFromXML(); 92 + persistenceUnit = persistenceUnitReader.getFromXML();
106 } 93 }
107 94
108 return new EntityManagerProxy(persistenceUnit); 95 return new EntityManagerProxy(persistenceUnit);
109 } 96 }
110 97
111 /** 98 /**
112 - *  
113 * <p> 99 * <p>
114 - * Factory that reads the {@link AmbiguousQualifier} qualifier and creates an entity manager with  
115 - * a matching persistence unit name. 100 + * Factory that reads the {@link AmbiguousQualifier} qualifier and creates an entity manager with a matching
  101 + * persistence unit name.
116 * </p> 102 * </p>
117 * 103 *
118 - *  
119 * @param config 104 * @param config
120 * Suplies informations about EntityManager defined in properties file. 105 * Suplies informations about EntityManager defined in properties file.
121 * @return Produced EntityManager. 106 * @return Produced EntityManager.
122 */ 107 */
123 @Name("") 108 @Name("")
124 @Produces 109 @Produces
125 - protected EntityManager createNamed(InjectionPoint ip, EntityManagerConfig config) { 110 + protected EntityManager createNamed(InjectionPoint ip) {
126 String persistenceUnit = ip.getAnnotated().getAnnotation(Name.class).value(); 111 String persistenceUnit = ip.getAnnotated().getAnnotation(Name.class).value();
127 return new EntityManagerProxy(persistenceUnit); 112 return new EntityManagerProxy(persistenceUnit);
128 } 113 }
129 114
130 - /**  
131 - * Tries to get persistence unit name from demoiselle.properties.  
132 - *  
133 - * @param config  
134 - * Configuration containing persistence unit name.  
135 - * @return Persistence unit name.  
136 - */  
137 - private String getFromProperties(EntityManagerConfig config) {  
138 - String persistenceUnit = config.getDefaultPersistenceUnitName();  
139 -  
140 - if (persistenceUnit != null) {  
141 - this.logger.debug(bundle.getString("getting-persistence-unit-from-properties",  
142 - Configuration.DEFAULT_RESOURCE));  
143 - }  
144 -  
145 - return persistenceUnit;  
146 - }  
147 -  
148 - /**  
149 - * Uses persistence.xml to get informations about which persistence unit to use. Throws DemoiselleException if more  
150 - * than one Persistence Unit is defined.  
151 - *  
152 - * @return Persistence Unit AmbiguousQualifier  
153 - */  
154 - private String getFromXML() {  
155 - Set<String> persistenceUnits = factory.getCache().keySet();  
156 -  
157 - if (persistenceUnits.size() > 1) {  
158 - throw new DemoiselleException(bundle.getString("more-than-one-persistence-unit-defined",  
159 - Name.class.getSimpleName()));  
160 - } else {  
161 - return persistenceUnits.iterator().next();  
162 - }  
163 - }  
164 -  
165 public EntityManager getEntityManager(String persistenceUnit) { 115 public EntityManager getEntityManager(String persistenceUnit) {
166 return getStore().getEntityManager(persistenceUnit); 116 return getStore().getEntityManager(persistenceUnit);
167 } 117 }
168 - 118 +
169 public Map<String, EntityManager> getCache() { 119 public Map<String, EntityManager> getCache() {
170 return getStore().getCache(); 120 return getStore().getCache();
171 } 121 }
172 -  
173 - private EntityManagerStore getStore(){  
174 - switch(configuration.getEntityManagerScope()){ 122 +
  123 + private EntityManagerStore getStore() {
  124 + switch (configuration.getEntityManagerScope()) {
175 case REQUEST: 125 case REQUEST:
176 return storeInstance.select(RequestEntityManagerStore.class).get(); 126 return storeInstance.select(RequestEntityManagerStore.class).get();
177 case APPLICATION: 127 case APPLICATION:
@@ -188,5 +138,5 @@ public class EntityManagerProducer implements Serializable{ @@ -188,5 +138,5 @@ public class EntityManagerProducer implements Serializable{
188 return storeInstance.select(RequestEntityManagerStore.class).get(); 138 return storeInstance.select(RequestEntityManagerStore.class).get();
189 } 139 }
190 } 140 }
191 - 141 +
192 } 142 }