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

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Jul 1 11:03:49 EDT 2009


Author: pete.muir at jboss.org
Date: 2009-07-01 11:03:48 -0400 (Wed, 01 Jul 2009)
New Revision: 2943

Modified:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/el/Namespace.java
Log:
Split out namespaces data structure from namespace resolver service

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java	2009-07-01 14:37:36 UTC (rev 2942)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java	2009-07-01 15:03:48 UTC (rev 2943)
@@ -206,6 +206,7 @@
    private transient final TypeSafeResolver<EventObserver<?>> observerResolver;
    private transient final NameBasedResolver nameBasedResolver;
    private transient final ELResolver webbeansELResolver;
+   private transient Namespace rootNamespace;
 
    /*
     * Activity scoped data structures 
@@ -213,8 +214,9 @@
     */
    private transient final List<Bean<?>> beans;
    private transient final List<DecoratorBean<?>> decorators;
-   private transient final Namespace rootNamespace;
+   private transient final List<String> namespaces;
    private transient final List<EventObserver<?>> observers;
+   
    private transient final Set<BeanManagerImpl> childActivities;
    
    private final Integer id;
@@ -244,7 +246,7 @@
             new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<DecoratorBean<?>>(),
             new CopyOnWriteArrayList<EventObserver<?>>(),
-            new Namespace(),
+            new CopyOnWriteArrayList<String>(),
             new ConcurrentHashMap<Class<?>, EnterpriseBean<?>>(),
             new ConcurrentHashMap<String, RIBean<?>>(),
             new ClientProxyProvider(),
@@ -267,14 +269,15 @@
       
       List<EventObserver<?>> registeredObservers = new CopyOnWriteArrayList<EventObserver<?>>();
       registeredObservers.addAll(parentManager.getObservers());
-      Namespace rootNamespace = new Namespace(parentManager.getRootNamespace());
+      List<String> namespaces = new CopyOnWriteArrayList<String>();
+      namespaces.addAll(parentManager.getNamespaces());
 
       return new BeanManagerImpl(
             parentManager.getServices(), 
             beans, 
             parentManager.getDecorators(), 
             registeredObservers, 
-            rootNamespace, 
+            namespaces, 
             parentManager.getNewEnterpriseBeanMap(), 
             parentManager.getRiBeans(), 
             parentManager.getClientProxyProvider(), 
@@ -292,7 +295,22 @@
     * 
     * @param ejbServices the ejbResolver to use
     */
-   private BeanManagerImpl(ServiceRegistry serviceRegistry, List<Bean<?>> beans, List<DecoratorBean<?>> decorators, List<EventObserver<?>> registeredObservers, Namespace rootNamespace, Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeans, Map<String, RIBean<?>> riBeans, ClientProxyProvider clientProxyProvider, ConcurrentListMultiMap<Class<? extends Annotation>, Context> contexts, Set<CurrentActivity> currentActivities, Map<Contextual<?>, Contextual<?>> specializedBeans, List<Class<? extends Annotation>> enabledDeploymentTypes, List<Class<?>> enabledDecoratorClasses, AtomicInteger ids)
+   private BeanManagerImpl(
+         ServiceRegistry serviceRegistry, 
+         List<Bean<?>> beans, 
+         List<DecoratorBean<?>> decorators, 
+         List<EventObserver<?>> registeredObservers, 
+         List<String> namespaces,
+         Map<Class<?>, EnterpriseBean<?>> newEnterpriseBeans, 
+         Map<String, RIBean<?>> riBeans, 
+         ClientProxyProvider clientProxyProvider, 
+         ConcurrentListMultiMap<Class<? extends Annotation>,
+         Context> contexts, 
+         Set<CurrentActivity> currentActivities, 
+         Map<Contextual<?>, Contextual<?>> specializedBeans, 
+         List<Class<? extends Annotation>> enabledDeploymentTypes, 
+         List<Class<?>> enabledDecoratorClasses, 
+         AtomicInteger ids)
    {
       this.services = serviceRegistry;
       this.beans = beans;
@@ -306,7 +324,7 @@
       this.observers = registeredObservers;
       setEnabledDeploymentTypes(enabledDeploymentTypes);
       setEnabledDecoratorClasses(enabledDecoratorClasses);
-      this.rootNamespace = rootNamespace;
+      this.namespaces = namespaces;
       this.ids = ids;
       this.id = ids.incrementAndGet();
 
@@ -557,13 +575,7 @@
    {
       if (bean.getName() != null && bean.getName().indexOf('.') > 0)
       {
-         String name = bean.getName().substring(0, bean.getName().lastIndexOf('.'));
-         String[] hierarchy = name.split("\\.");
-         Namespace namespace = getRootNamespace();
-         for (String s : hierarchy)
-         {
-            namespace = namespace.putIfAbsent(s);
-         }
+         namespaces.add(bean.getName().substring(0, bean.getName().lastIndexOf('.')));
       }
    }
 
@@ -1040,6 +1052,14 @@
       return contexts;
    }
    
+   /**
+    * @return the namespaces
+    */
+   protected List<String> getNamespaces()
+   {
+      return namespaces;
+   }
+   
    protected AtomicInteger getIds()
    {
       return ids;
@@ -1062,6 +1082,11 @@
    
    public Namespace getRootNamespace()
    {
+      // TODO I don't like this lazy init
+      if (rootNamespace == null)
+      {
+         rootNamespace = new Namespace(getNamespaces());
+      }
       return rootNamespace;
    }
 

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/el/Namespace.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/el/Namespace.java	2009-07-01 14:37:36 UTC (rev 2942)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/el/Namespace.java	2009-07-01 15:03:48 UTC (rev 2943)
@@ -18,7 +18,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * A namespace for bean names
@@ -33,29 +32,24 @@
    private final Map<String, Namespace> children;
    
    /**
-    * Create a new namespace hierarchy, creating copies of all children as
-    * children of this node
+    * Create a new namespace hierarchy
     *
     * @param namespace
     */
-   public Namespace(Namespace namespace)
+   public Namespace(Iterable<String> namespaces)
    {
-      this(namespace.getName(), namespace.getQualifiedName());
-      for (Entry<String, Namespace> entry : namespace.getChildren().entrySet())
+      this(null, null);
+      for (String namespace : namespaces)
       {
-         children.put(entry.getKey(), new Namespace(entry.getValue()));
+         String[] hierarchy = namespace.split("\\.");
+         Namespace n = this;
+         for (String s : hierarchy)
+         {
+            n = n.putIfAbsent(s);
+         }
       }
    }
    
-   /**
-    * Create a new, root, namespace
-    * 
-    */
-   public Namespace()
-   {
-      this(null, null);
-   }
-   
    protected Namespace(String name, String qualifiedName) 
    {
       this.name = name;
@@ -63,7 +57,7 @@
       this.children  = new HashMap<String, Namespace>();
    }
    
-   public Namespace putIfAbsent(String key)
+   private Namespace putIfAbsent(String key)
    {
       Namespace result = children.get(key);
       if (result==null)




More information about the weld-commits mailing list