Commit 0b45150016ad6db5d028777202b7e050683d7dd8

Authored by Cleverson Sacramento
1 parent 393d4c69
Exists in master

Modificações para funcionar JPATransaction em EAR com mais de um WAR

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