Commit 3ba5b60a9f3a364f2ecd27cb2248dbf879e51ac5
1 parent
15dffee5
Exists in
master
Regressão de solução para contextos não serializáveis, até encontrar
forma de identificar unicamente classloaders.
Showing
1 changed file
with
13 additions
and
16 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java
| @@ -36,7 +36,6 @@ | @@ -36,7 +36,6 @@ | ||
| 36 | */ | 36 | */ |
| 37 | package br.gov.frameworkdemoiselle.internal.context; | 37 | package br.gov.frameworkdemoiselle.internal.context; |
| 38 | 38 | ||
| 39 | -import java.io.Serializable; | ||
| 40 | import java.lang.annotation.Annotation; | 39 | import java.lang.annotation.Annotation; |
| 41 | import java.util.Collections; | 40 | import java.util.Collections; |
| 42 | import java.util.HashMap; | 41 | import java.util.HashMap; |
| @@ -194,40 +193,38 @@ public abstract class AbstractCustomContext implements CustomContext { | @@ -194,40 +193,38 @@ public abstract class AbstractCustomContext implements CustomContext { | ||
| 194 | return true; | 193 | return true; |
| 195 | } | 194 | } |
| 196 | 195 | ||
| 197 | - static class Store implements Serializable { | 196 | + static class Store { |
| 198 | 197 | ||
| 199 | - private static final long serialVersionUID = -8237464177510563034L; | ||
| 200 | - | ||
| 201 | - private final String SEPARATOR = "#"; | ||
| 202 | - | ||
| 203 | - private Map<String, Object> cache = Collections.synchronizedMap(new HashMap<String, Object>()); | 198 | + private Map<ClassLoader, Map<Class<?>, Object>> cache = Collections |
| 199 | + .synchronizedMap(new HashMap<ClassLoader, Map<Class<?>, Object>>()); | ||
| 200 | + | ||
| 201 | + private Store() { | ||
| 202 | + } | ||
| 204 | 203 | ||
| 205 | private boolean contains(final Class<?> type) { | 204 | private boolean contains(final Class<?> type) { |
| 206 | - return cache.containsKey( prefixId(type) ); | 205 | + return this.getMap().containsKey(type); |
| 207 | } | 206 | } |
| 208 | 207 | ||
| 209 | private Object get(final Class<?> type) { | 208 | private Object get(final Class<?> type) { |
| 210 | - return cache.get( prefixId(type) ); | 209 | + return this.getMap().get(type); |
| 211 | } | 210 | } |
| 212 | 211 | ||
| 213 | private void put(final Class<?> type, final Object instance) { | 212 | private void put(final Class<?> type, final Object instance) { |
| 214 | - cache.put( prefixId(type) , instance); | 213 | + this.getMap().put(type, instance); |
| 215 | } | 214 | } |
| 216 | 215 | ||
| 217 | public void clear() { | 216 | public void clear() { |
| 218 | cache.clear(); | 217 | cache.clear(); |
| 219 | } | 218 | } |
| 220 | - | ||
| 221 | - private String prefixId(Class<?> type){ | ||
| 222 | - return Thread.currentThread().getContextClassLoader().toString() + SEPARATOR + type.getCanonicalName(); | ||
| 223 | - } | ||
| 224 | 219 | ||
| 225 | - /*private Map<String, Object> getMap() { | 220 | + private Map<Class<?>, Object> getMap() { |
| 221 | + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | ||
| 222 | + | ||
| 226 | if (!cache.containsKey(classLoader)) { | 223 | if (!cache.containsKey(classLoader)) { |
| 227 | cache.put(classLoader, Collections.synchronizedMap(new HashMap<Class<?>, Object>())); | 224 | cache.put(classLoader, Collections.synchronizedMap(new HashMap<Class<?>, Object>())); |
| 228 | } | 225 | } |
| 229 | 226 | ||
| 230 | return cache.get(classLoader); | 227 | return cache.get(classLoader); |
| 231 | - }*/ | 228 | + } |
| 232 | } | 229 | } |
| 233 | } | 230 | } |