[webbeans-commits] Webbeans SVN: r312 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: servlet and 1 other directory.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Mon Nov 17 01:51:41 EST 2008


Author: nickarls
Date: 2008-11-17 01:51:41 -0500 (Mon, 17 Nov 2008)
New Revision: 312

Added:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/BeanMap.java
Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/AbstractContext.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/DependentContext.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/PrivateContext.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SharedContext.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
Log:
Refactor/clean up context hierarchy

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/AbstractContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/AbstractContext.java	2008-11-16 12:38:37 UTC (rev 311)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/AbstractContext.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -1,77 +1,73 @@
 package org.jboss.webbeans.contexts;
 
 import java.lang.annotation.Annotation;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import javax.webbeans.ContextNotActiveException;
 import javax.webbeans.manager.Bean;
 import javax.webbeans.manager.Context;
 import javax.webbeans.manager.Manager;
 
-import com.google.common.collect.ForwardingMap;
-
-/**
- * Basic implementation of javax.webbeans.Context, backed by a HashMap
- * 
- * @author Shane Bryzak
- * @author Nicklas Karlsson (nickarls at gmail.com)
- * @author Pete Muir
- * 
- */
 public abstract class AbstractContext implements Context
 {
-   
-   public class BeanMap extends ForwardingMap<Bean<? extends Object>, Object>
+   private Class<? extends Annotation> scopeType;
+
+   public AbstractContext(Class<? extends Annotation> scopeType)
    {
-      
-      protected Map<Bean<? extends Object>, Object> delegate;
-      
-      public BeanMap()
+      this.scopeType = scopeType;
+   }
+
+   public <T> T get(Bean<T> bean, boolean create)
+   {
+      if (!isActive())
       {
-         delegate = new ConcurrentHashMap<Bean<? extends Object>, Object>();
+         throw new ContextNotActiveException();
       }
-      
-      @SuppressWarnings("unchecked")
-      public <T extends Object> T get(Bean<? extends T> key)
+      T instance = getBeanMap().get(bean);
+      if (instance != null)
       {
-         return (T) super.get(key);
+         return instance;
       }
-      
-      @Override
-      protected Map<Bean<? extends Object>, Object> delegate()
+      if (!create)
       {
-         return delegate;
+         return null;
       }
 
+      // TODO should bean creation be synchronized?
+      instance = bean.create();
+      getBeanMap().put(bean, instance);
+      return instance;
    }
-   
-   private Class<? extends Annotation> scopeType;
-   protected AtomicBoolean active;
 
-   public AbstractContext(Class<? extends Annotation> scopeType)
-   {
-      this.scopeType = scopeType;
-      active = new AtomicBoolean(true);
-   }
-
-   public abstract <T> T get(Bean<T> bean, boolean create);
-
    public Class<? extends Annotation> getScopeType()
    {
       return scopeType;
    }
 
-   public abstract void destroy(Manager manager);
-
    public boolean isActive()
    {
-      return active.get();
+      return getActive().get();
    }
-
-   public void setActive(boolean value)
+   
+   public void setActive(boolean active) {
+      getActive().set(active);
+   }
+   
+   private <T> void destroy(Manager manager, Bean<T> bean)
    {
-      active.set(value);
+      bean.destroy(getBeanMap().get(bean));
    }
 
+   public void destroy(Manager manager)
+   {
+      for (Bean<? extends Object> bean : getBeanMap().keySet())
+      {
+         destroy(manager, bean);
+      }
+      getBeanMap().clear();
+   }   
+   
+   protected abstract BeanMap getBeanMap();
+   protected abstract AtomicBoolean getActive();
+
 }

Added: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/BeanMap.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/BeanMap.java	                        (rev 0)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/BeanMap.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -0,0 +1,32 @@
+package org.jboss.webbeans.contexts;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.webbeans.manager.Bean;
+
+import com.google.common.collect.ForwardingMap;
+
+public class BeanMap extends ForwardingMap<Bean<? extends Object>, Object>
+{
+
+   protected Map<Bean<? extends Object>, Object> delegate;
+
+   public BeanMap()
+   {
+      delegate = new ConcurrentHashMap<Bean<? extends Object>, Object>();
+   }
+
+   @SuppressWarnings("unchecked")
+   public <T extends Object> T get(Bean<? extends T> key)
+   {
+      return (T) super.get(key);
+   }
+
+   @Override
+   public Map<Bean<? extends Object>, Object> delegate()
+   {
+      return delegate;
+   }
+
+}
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/DependentContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/DependentContext.java	2008-11-16 12:38:37 UTC (rev 311)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/DependentContext.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -1,17 +1,21 @@
 package org.jboss.webbeans.contexts;
 
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.webbeans.ContextNotActiveException;
 import javax.webbeans.Dependent;
 import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Manager;
 
 public class DependentContext extends AbstractContext
 {
-
+   private BeanMap beans;
+   private AtomicBoolean active;
+   
    public DependentContext()
    {
       super(Dependent.class);
-      setActive(false);
+      beans = new BeanMap();
+      active = new AtomicBoolean(false);
    }
 
    @Override
@@ -26,15 +30,20 @@
    }   
 
    @Override
-   public String toString()
+   protected AtomicBoolean getActive()
    {
-      return "Dependent context";
+      return active;
    }
-   
+
    @Override
-   public void destroy(Manager manager)
+   protected BeanMap getBeanMap()
    {
-      
+      return beans;
    }
    
+   @Override
+   public String toString()
+   {
+      return "Dependent context";
+   }   
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/PrivateContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/PrivateContext.java	2008-11-16 12:38:37 UTC (rev 311)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/PrivateContext.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -3,15 +3,11 @@
 import java.lang.annotation.Annotation;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.webbeans.ContextNotActiveException;
-import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Manager;
-
-public abstract class PrivateContext extends AbstractContext
+public class PrivateContext extends AbstractContext
 {
    private ThreadLocal<AtomicBoolean> active;
    private ThreadLocal<BeanMap> beans;
-   
+
    public PrivateContext(Class<? extends Annotation> scopeType)
    {
       super(scopeType);
@@ -20,57 +16,22 @@
       active = new ThreadLocal<AtomicBoolean>();
       active.set(new AtomicBoolean(true));
    }
-   
-   public void setBeans(BeanMap beans) {
-      this.beans.set(beans);
-   }
-   
-   public <T> T get(Bean<T> bean, boolean create)
-   {
-      if (!isActive())
-      {
-         throw new ContextNotActiveException();
-      }
-      T instance = beans.get().get(bean);
-      if (instance != null)
-      {
-         return instance;
-      }
-      if (!create)
-      {
-         return null;
-      }
 
-      // TODO should bean creation be synchronized?
-      instance = bean.create();
-      beans.get().put(bean, instance);
-      return instance;
-   }
-   
-   private <T> void destroy(Manager manager, Bean<T> bean)
+   public void setBeans(BeanMap beans)
    {
-      bean.destroy(beans.get().get(bean));
+      this.beans.set(beans);
    }
 
-   public void destroy(Manager manager)
-   {
-      for (Bean<? extends Object> bean : beans.get().keySet())
-      {
-         destroy(manager, bean);
-      }
-      beans.set(new BeanMap());
-   }
-
    @Override
-   public boolean isActive()
+   protected AtomicBoolean getActive()
    {
-      return active.get().get();
+      return active.get();
    }
 
    @Override
-   public void setActive(boolean value)
+   protected BeanMap getBeanMap()
    {
-      active.get().set(value);
+      return beans.get();
    }
 
 }

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SharedContext.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SharedContext.java	2008-11-16 12:38:37 UTC (rev 311)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SharedContext.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -1,56 +1,30 @@
 package org.jboss.webbeans.contexts;
 
 import java.lang.annotation.Annotation;
+import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.webbeans.ContextNotActiveException;
-import javax.webbeans.manager.Bean;
-import javax.webbeans.manager.Manager;
-
-public abstract class SharedContext extends AbstractContext
+public class SharedContext extends AbstractContext
 {
    private BeanMap beans;
+   private AtomicBoolean active;
 
    public SharedContext(Class<? extends Annotation> scopeType)
    {
       super(scopeType);
       beans = new BeanMap();
-      setActive(true);
+      active = new AtomicBoolean(true);
    }
-   
-   public <T> T get(Bean<T> bean, boolean create)
-   {
-      if (!isActive())
-      {
-         throw new ContextNotActiveException();
-      }
-      T instance = beans.get(bean);
-      if (instance != null)
-      {
-         return instance;
-      }
-      if (!create)
-      {
-         return null;
-      }
 
-      // TODO should bean creation be synchronized?
-      instance = bean.create();
-      beans.put(bean, instance);
-      return instance;
-   }
-   
-   private <T> void destroy(Manager manager, Bean<T> bean)
+   @Override
+   protected AtomicBoolean getActive()
    {
-      bean.destroy(beans.get(bean));
+      return active;
    }
 
-   public void destroy(Manager manager)
+   @Override
+   protected BeanMap getBeanMap()
    {
-      for (Bean<? extends Object> bean : beans.keySet())
-      {
-         destroy(manager, bean);
-      }
-      beans = new BeanMap();
+      return beans;
    }
 
 }
\ No newline at end of file

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java	2008-11-16 12:38:37 UTC (rev 311)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/servlet/ServletLifecycle.java	2008-11-17 06:51:41 UTC (rev 312)
@@ -3,17 +3,10 @@
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import javax.webbeans.SessionScoped;
 
-import org.jboss.webbeans.ManagerImpl;
-import org.jboss.webbeans.contexts.SessionContext;
-import org.jboss.webbeans.contexts.AbstractContext.BeanMap;
-import org.jboss.webbeans.util.JNDI;
-
 public class ServletLifecycle
 {
    private static ServletContext servletContext;
-   private static final String SESSION_BEANMAP_KEY = "org.jboss.webbeans.context.session.data";
    
    public static void beginApplication(ServletContext context)
    {
@@ -32,10 +25,6 @@
    }   
    
    public static void beginRequest(HttpServletRequest request) {
-      ManagerImpl manager = (ManagerImpl) JNDI.lookup("manager");
-      SessionContext sessionContext = (SessionContext) manager.getContext(SessionScoped.class);
-      BeanMap sessionBeans = (BeanMap) request.getAttribute(SESSION_BEANMAP_KEY);
-      sessionContext.setBeans(sessionBeans);
    }
    
    public static void endRequest(HttpServletRequest request) {




More information about the weld-commits mailing list