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 | } | ... | ... |