From 0bac8554b36c32f2601712c8b32a31c3f2856b24 Mon Sep 17 00:00:00 2001 From: Dancovich Date: Thu, 3 Oct 2013 11:37:08 -0300 Subject: [PATCH] Resolvendo problema onde contextos personalizados não suportam serialização. --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java | 21 +++++++-------------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java | 12 ++---------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java | 2 +- impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java | 2 +- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java index d62a174..4ac5cac 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java @@ -157,8 +157,8 @@ public abstract class AbstractCustomContext implements CustomContext { return this.scope; } - protected static Store createStore(Class owningClass) { - return new Store(owningClass); + protected static Store createStore() { + return new Store(); } private ResourceBundle getBundle(){ @@ -200,33 +200,26 @@ public abstract class AbstractCustomContext implements CustomContext { private final String SEPARATOR = "#"; - private final String ID_PREFIX; - private Map cache = Collections.synchronizedMap(new HashMap()); - private Store(Class owningClass) { - ID_PREFIX = Thread.currentThread().getContextClassLoader().toString() - + SEPARATOR + owningClass.getCanonicalName(); - } - private boolean contains(final Class type) { - return cache.containsKey( prefixId(type.getCanonicalName()) ); + return cache.containsKey( prefixId(type) ); } private Object get(final Class type) { - return cache.get( prefixId(type.getCanonicalName()) ); + return cache.get( prefixId(type) ); } private void put(final Class type, final Object instance) { - cache.put( prefixId(type.getCanonicalName()) , instance); + cache.put( prefixId(type) , instance); } public void clear() { cache.clear(); } - private String prefixId(String id){ - return ID_PREFIX + SEPARATOR + id; + private String prefixId(Class type){ + return Thread.currentThread().getContextClassLoader().toString() + SEPARATOR + type.getCanonicalName(); } /*private Map getMap() { diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java index 63a5ac8..8db69fe 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java @@ -37,9 +37,6 @@ package br.gov.frameworkdemoiselle.internal.context; import java.lang.annotation.Annotation; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import br.gov.frameworkdemoiselle.annotation.Priority; import br.gov.frameworkdemoiselle.annotation.StaticScoped; @@ -61,7 +58,7 @@ import br.gov.frameworkdemoiselle.configuration.Configuration; @Priority(Priority.MIN_PRIORITY) public abstract class AbstractStaticContext extends AbstractCustomContext { - private static Map cache = Collections.synchronizedMap( new HashMap() ); + private final static Store store = createStore(); /** * Constructs this context to control the provided scope @@ -72,16 +69,11 @@ public abstract class AbstractStaticContext extends AbstractCustomContext { @Override protected Store getStore() { - Store store = cache.get( this.getClass().getCanonicalName() ); - if ( store==null ){ - store = createStore(this.getClass()); - cache.put(this.getClass().getCanonicalName(), store); - } return store; } @Override protected boolean isStoreInitialized() { - return cache.get( this.getClass().getCanonicalName() )!=null; + return store!=null; } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java index 13208bb..67958e9 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java @@ -73,7 +73,7 @@ public abstract class AbstractThreadLocalContext extends AbstractCustomContext { @Override protected Store getStore() { if (this.threadLocal.get() == null) { - this.threadLocal.set(createStore(getClass())); + this.threadLocal.set(createStore()); } return this.threadLocal.get(); diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java index 54b6d1b..3910557 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java @@ -75,7 +75,7 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC String key = Store.class.getName(); if (!viewMap.containsKey(key)) { - viewMap.put(key, createStore( getClass() )); + viewMap.put(key, createStore()); } return (Store) viewMap.get(key); -- libgit2 0.21.2