Commit 2a2a9988ed79e1779cb2025cd17523ab4f1f0509

Authored by Dancovich
1 parent 3ba5b60a
Exists in master

Implementando nova forma de armazenar beans em contexto

impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/BeanStore.java 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +package br.gov.frameworkdemoiselle.internal.context;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.Collections;
  5 +import java.util.HashMap;
  6 +import java.util.Iterator;
  7 +import java.util.Map;
  8 +
  9 +import javax.enterprise.context.spi.CreationalContext;
  10 +
  11 +public class BeanStore<T> implements Iterable<String>,Serializable {
  12 +
  13 + private static final long serialVersionUID = 1L;
  14 +
  15 + private Map<String, T> instanceCache = Collections.synchronizedMap( new HashMap<String, T>() );
  16 + private Map<String, CreationalContext<T>> creationalCache = Collections.synchronizedMap( new HashMap<String, CreationalContext<T>>() );;
  17 +
  18 + public void put(String id, T instance,CreationalContext<T> creationalContext){
  19 + if (!instanceCache.containsKey(id)){
  20 + instanceCache.put(id, instance);
  21 + creationalCache.put(id, creationalContext);
  22 + }
  23 + }
  24 +
  25 + public T getInstance(String id){
  26 + return instanceCache.get(id);
  27 + }
  28 +
  29 + public CreationalContext<T> getCreationalContext(String id){
  30 + return creationalCache.get(id);
  31 + }
  32 +
  33 + public void clear(){
  34 + instanceCache.clear();
  35 + creationalCache.clear();
  36 + }
  37 +
  38 + public boolean contains(String id){
  39 + return instanceCache.containsKey(id);
  40 + }
  41 +
  42 + @Override
  43 + public Iterator<String> iterator() {
  44 + return instanceCache.keySet().iterator();
  45 + }
  46 +
  47 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextualStore.java 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +package br.gov.frameworkdemoiselle.internal.context;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.HashMap;
  5 +import java.util.concurrent.atomic.AtomicInteger;
  6 +
  7 +import javax.enterprise.context.spi.Contextual;
  8 +import javax.enterprise.inject.spi.PassivationCapable;
  9 +
  10 +
  11 +public class ContextualStore<T> implements Serializable {
  12 +
  13 + private static final long serialVersionUID = 1L;
  14 +
  15 + private static final String PREFIX = ContextualStore.class.getCanonicalName() + "#";
  16 +
  17 + private AtomicInteger idGenerator = new AtomicInteger();
  18 +
  19 + private HashMap<String, Contextual<T>> idToContextual = new HashMap<String, Contextual<T>>();
  20 +
  21 + private HashMap<Contextual<T>, String> contextualToId = new HashMap<Contextual<T>, String>();
  22 +
  23 + public String tryRegisterAndGetId(Contextual<T> contextual){
  24 + String returnedId;
  25 +
  26 + if (contextualToId.containsKey(contextual)){
  27 + returnedId = contextualToId.get(contextual);
  28 + }
  29 + else if (contextual instanceof PassivationCapable){
  30 + returnedId = ((PassivationCapable)contextual).getId();
  31 + idToContextual.put(returnedId, contextual);
  32 + contextualToId.put(contextual, returnedId);
  33 + }
  34 + else{
  35 + returnedId = PREFIX + idGenerator.addAndGet(1);
  36 + idToContextual.put(returnedId, contextual);
  37 + contextualToId.put(contextual, returnedId);
  38 + }
  39 +
  40 + return returnedId;
  41 + }
  42 +
  43 + public Contextual<T> getContextual(String id){
  44 + return idToContextual.get(id);
  45 + }
  46 +
  47 + public void clear(){
  48 + idToContextual.clear();
  49 + contextualToId.clear();
  50 + }
  51 +
  52 +}
... ...