Commit 0b45150016ad6db5d028777202b7e050683d7dd8
1 parent
393d4c69
Exists in
master
Modificações para funcionar JPATransaction em EAR com mais de um WAR
Showing
1 changed file
with
22 additions
and
8 deletions
Show diff stats
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerFactoryProducer.java
| ... | ... | @@ -5,7 +5,6 @@ import java.util.Collections; |
| 5 | 5 | import java.util.HashMap; |
| 6 | 6 | import java.util.Map; |
| 7 | 7 | |
| 8 | -import javax.annotation.PostConstruct; | |
| 9 | 8 | import javax.annotation.PreDestroy; |
| 10 | 9 | import javax.enterprise.context.ApplicationScoped; |
| 11 | 10 | import javax.inject.Inject; |
| ... | ... | @@ -38,23 +37,28 @@ public class EntityManagerFactoryProducer implements Serializable { |
| 38 | 37 | @Name("demoiselle-jpa-bundle") |
| 39 | 38 | private ResourceBundle bundle; |
| 40 | 39 | |
| 41 | - private final Map<String, EntityManagerFactory> cache = Collections | |
| 42 | - .synchronizedMap(new HashMap<String, EntityManagerFactory>()); | |
| 40 | + // private final Map<String, EntityManagerFactory> cache = Collections | |
| 41 | + // .synchronizedMap(new HashMap<String, EntityManagerFactory>()); | |
| 42 | + | |
| 43 | + private final Map<String [], EntityManagerFactory> cache = Collections | |
| 44 | + .synchronizedMap(new HashMap<String [], EntityManagerFactory>()); | |
| 43 | 45 | |
| 44 | 46 | public EntityManagerFactory create(String persistenceUnit) { |
| 45 | 47 | EntityManagerFactory factory; |
| 46 | 48 | |
| 47 | - if (cache.containsKey(persistenceUnit)) { | |
| 48 | - factory = cache.get(persistenceUnit); | |
| 49 | + String[] key = new String [] { persistenceUnit, Thread.currentThread().getContextClassLoader().toString()}; | |
| 50 | + | |
| 51 | + if (cache.containsKey(key)) { | |
| 52 | + factory = cache.get(key); | |
| 49 | 53 | } else { |
| 50 | 54 | factory = Persistence.createEntityManagerFactory(persistenceUnit); |
| 51 | - cache.put(persistenceUnit, factory); | |
| 55 | + cache.put(key, factory); | |
| 52 | 56 | } |
| 53 | 57 | |
| 54 | 58 | return factory; |
| 55 | 59 | } |
| 56 | 60 | |
| 57 | - @PostConstruct | |
| 61 | + // @PostConstruct | |
| 58 | 62 | public void init() { |
| 59 | 63 | ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); |
| 60 | 64 | |
| ... | ... | @@ -94,6 +98,16 @@ public class EntityManagerFactoryProducer implements Serializable { |
| 94 | 98 | } |
| 95 | 99 | |
| 96 | 100 | public Map<String, EntityManagerFactory> getCache() { |
| 97 | - return cache; | |
| 101 | + init(); | |
| 102 | + Map<String, EntityManagerFactory> result = new HashMap<String, EntityManagerFactory>(); | |
| 103 | + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | |
| 104 | + | |
| 105 | + for (String[] key : cache.keySet()) { | |
| 106 | + if(key[1].equals(classLoader.toString())) { | |
| 107 | + result.put(key[0], cache.get(key)); | |
| 108 | + } | |
| 109 | + } | |
| 110 | + | |
| 111 | + return result; | |
| 98 | 112 | } |
| 99 | 113 | } | ... | ... |