[weld-commits] Weld SVN: r4587 - in core/trunk/impl/src/main/java/org/jboss/weld: bootstrap and 1 other directory.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Mon Nov 2 19:19:36 EST 2009


Author: pete.muir at jboss.org
Date: 2009-11-02 19:19:36 -0500 (Mon, 02 Nov 2009)
New Revision: 4587

Modified:
   core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
   core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
   core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java
   core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java
Log:
Add built in ScheduledExecutorFactory to services, WELD-236

Modified: core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java	2009-11-03 00:18:32 UTC (rev 4586)
+++ core/trunk/impl/src/main/java/org/jboss/weld/BeanManagerImpl.java	2009-11-03 00:19:36 UTC (rev 4587)
@@ -59,7 +59,10 @@
 import org.jboss.interceptor.registry.InterceptorRegistry;
 import org.jboss.weld.bean.DecoratorImpl;
 import org.jboss.weld.bean.InterceptorImpl;
+import org.jboss.weld.bean.NewBean;
 import org.jboss.weld.bean.SessionBean;
+import org.jboss.weld.bean.builtin.AbstractBuiltInBean;
+import org.jboss.weld.bean.builtin.ExtensionBean;
 import org.jboss.weld.bean.proxy.ClientProxyProvider;
 import org.jboss.weld.bootstrap.api.ServiceRegistry;
 import org.jboss.weld.bootstrap.events.AbstractProcessInjectionTarget;
@@ -231,6 +234,7 @@
     * observers deployed in this bean deployment archive activity
     */
    private transient final List<Bean<?>> beans;
+   private transient final List<Bean<?>> transitiveBeans;
    private transient final List<DecoratorImpl<?>> decorators;
    private transient final List<InterceptorImpl<?>> interceptors;
    private transient final List<String> namespaces;
@@ -284,6 +288,7 @@
       return new BeanManagerImpl(
             serviceRegistry, 
             new CopyOnWriteArrayList<Bean<?>>(),
+            new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<DecoratorImpl<?>>(),
             new CopyOnWriteArrayList<InterceptorImpl<?>>(),
             new CopyOnWriteArrayList<ObserverMethod<?>>(),
@@ -312,6 +317,7 @@
       return new BeanManagerImpl(
             services, 
             new CopyOnWriteArrayList<Bean<?>>(),
+            new CopyOnWriteArrayList<Bean<?>>(),
             new CopyOnWriteArrayList<DecoratorImpl<?>>(),
             new CopyOnWriteArrayList<InterceptorImpl<?>>(),
             new CopyOnWriteArrayList<ObserverMethod<?>>(),
@@ -339,6 +345,8 @@
    {
       List<Bean<?>> beans = new CopyOnWriteArrayList<Bean<?>>();
       beans.addAll(parentManager.getBeans());
+      List<Bean<?>> transitiveBeans = new CopyOnWriteArrayList<Bean<?>>();
+      beans.addAll(parentManager.getTransitiveBeans());
       
       List<ObserverMethod<?>> registeredObservers = new CopyOnWriteArrayList<ObserverMethod<?>>();
       registeredObservers.addAll(parentManager.getObservers());
@@ -348,6 +356,7 @@
       return new BeanManagerImpl(
             parentManager.getServices(), 
             beans, 
+            transitiveBeans,
             parentManager.getDecorators(),
             parentManager.getInterceptors(),
             registeredObservers, 
@@ -374,6 +383,7 @@
    private BeanManagerImpl(
          ServiceRegistry serviceRegistry, 
          List<Bean<?>> beans, 
+         List<Bean<?>> transitiveBeans,
          List<DecoratorImpl<?>> decorators,
          List<InterceptorImpl<?>> interceptors,
          List<ObserverMethod<?>> observers, 
@@ -392,6 +402,7 @@
    {
       this.services = serviceRegistry;
       this.beans = beans;
+      this.transitiveBeans = transitiveBeans;
       this.decorators = decorators;
       this.interceptors = interceptors;
       this.enterpriseBeans = enterpriseBeans;
@@ -414,11 +425,12 @@
       
 
       // TODO Currently we build the accessible bean list on the fly, we need to set it in stone once bootstrap is finished...
-      this.beanResolver = new TypeSafeBeanResolver<Bean<?>>(this, createDynamicAccessibleIterable(Transform.BEAN));
+      Transform<Bean<?>> beanTransform = new Transform.BeanTransform(this);
+      this.beanResolver = new TypeSafeBeanResolver<Bean<?>>(this, createDynamicAccessibleIterable(beanTransform));
       this.decoratorResolver = new TypeSafeDecoratorResolver(this, createDynamicAccessibleIterable(Transform.DECORATOR_BEAN));
       this.interceptorResolver = new TypeSafeInterceptorResolver(this, createDynamicAccessibleIterable(Transform.INTERCEPTOR_BEAN));
       this.observerResolver = new TypeSafeObserverResolver(this, createDynamicAccessibleIterable(Transform.EVENT_OBSERVER));
-      this.nameBasedResolver = new NameBasedResolver(this, createDynamicAccessibleIterable(Transform.BEAN));
+      this.nameBasedResolver = new NameBasedResolver(this, createDynamicAccessibleIterable(beanTransform));
       this.weldELResolver = new WeldELResolver(this);
       this.childActivities = new CopyOnWriteArraySet<BeanManagerImpl>();
       
@@ -481,12 +493,27 @@
    private static interface Transform<T>
    {
       
-      public static Transform<Bean<?>> BEAN = new Transform<Bean<?>>()
+      public static class BeanTransform implements Transform<Bean<?>>
       {
+         
+         private final BeanManagerImpl declaringBeanManager;
 
+         public BeanTransform(BeanManagerImpl declaringBeanManager)
+         {
+            this.declaringBeanManager = declaringBeanManager;
+         }
+
          public Iterable<Bean<?>> transform(BeanManagerImpl beanManager)
          {
-            return beanManager.getBeans();
+            // New beans and built in beans aren't resolvable transitively
+            if (beanManager.equals(declaringBeanManager))
+            {
+               return beanManager.getBeans();
+            }
+            else
+            {
+               return beanManager.getTransitiveBeans();
+            }
          }
          
       };
@@ -561,6 +588,11 @@
       {
          childActivity.addBean(bean);
       }
+      // New beans and most built in beans aren't resolvable transtively
+      if (bean instanceof ExtensionBean || (!(bean instanceof NewBean) && !(bean instanceof AbstractBuiltInBean<?>)))
+      {
+         this.transitiveBeans.add(bean);
+      }
       this.beans.add(bean);
       beanResolver.clear();
    }
@@ -773,6 +805,11 @@
       return Collections.unmodifiableList(beans);
    }
    
+   private List<Bean<?>> getTransitiveBeans()
+   {
+      return Collections.unmodifiableList(transitiveBeans);
+   }
+   
    public List<DecoratorImpl<?>> getDecorators()
    {
       return Collections.unmodifiableList(decorators);
@@ -785,7 +822,7 @@
    
    public Iterable<Bean<?>> getAccessibleBeans()
    {
-      return createDynamicAccessibleIterable(Transform.BEAN);
+      return createDynamicAccessibleIterable(new Transform.BeanTransform(this));
    }
 
    public void addContext(Context context)
@@ -1297,7 +1334,7 @@
       }
    }
 
-   public Set<Annotation> getInterceptorBindingTypeDefinition(Class<? extends Annotation> bindingType)
+   public Set<Annotation> getInterceptorBindingDefinition(Class<? extends Annotation> bindingType)
    {
       if (getServices().get(MetaAnnotationStore.class).getInterceptorBindingModel(bindingType).isValid())
       {

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java	2009-11-03 00:18:32 UTC (rev 4586)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java	2009-11-03 00:19:36 UTC (rev 4587)
@@ -72,11 +72,9 @@
       return this;
    }
    
-   // TODO Do we need to fire PAT for annotated types added via BBD? Probably not PLM.
    public BeanDeployer addClass(AnnotatedType<?> clazz)
    {
       ClassTransformer classTransformer = Container.instance().deploymentServices().get(ClassTransformer.class);
-      // TODO Discover any @New injection points, and store as newClasses
       classes.add(classTransformer.loadClass(clazz));
       return this;
    }

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java	2009-11-03 00:18:32 UTC (rev 4586)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java	2009-11-03 00:19:36 UTC (rev 4587)
@@ -32,19 +32,13 @@
 import org.jboss.weld.bean.builtin.facade.EventBean;
 import org.jboss.weld.bean.builtin.facade.InstanceBean;
 import org.jboss.weld.bootstrap.api.Environment;
-import org.jboss.weld.bootstrap.api.Environments;
 import org.jboss.weld.bootstrap.api.ServiceRegistry;
 import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry;
 import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-import org.jboss.weld.conversation.ConversationImpl;
-import org.jboss.weld.conversation.JavaSEConversationTerminator;
-import org.jboss.weld.conversation.NumericConversationIdGenerator;
-import org.jboss.weld.conversation.ServletConversationManager;
 import org.jboss.weld.ejb.EjbDescriptors;
 import org.jboss.weld.ejb.spi.EjbServices;
 import org.jboss.weld.resources.spi.ResourceLoader;
 import org.jboss.weld.security.spi.SecurityServices;
-import org.jboss.weld.servlet.HttpSessionManager;
 import org.jboss.weld.transaction.spi.TransactionServices;
 import org.jboss.weld.validation.spi.ValidationServices;
 import org.jboss.weld.xml.BeansXmlParser;
@@ -135,14 +129,6 @@
       beanDeployer.getEnvironment().addBuiltInBean(new InjectionPointBean(beanManager));
       beanDeployer.getEnvironment().addBuiltInBean(new EventBean(beanManager));
       beanDeployer.getEnvironment().addBuiltInBean(new InstanceBean(beanManager));
-      if (!environment.equals(Environments.SE))
-      {
-         beanDeployer.addClass(ConversationImpl.class);
-         beanDeployer.addClass(ServletConversationManager.class);
-         beanDeployer.addClass(JavaSEConversationTerminator.class);
-         beanDeployer.addClass(NumericConversationIdGenerator.class);
-         beanDeployer.addClass(HttpSessionManager.class);
-      }
       if (beanManager.getServices().contains(TransactionServices.class))
       {
          beanDeployer.getEnvironment().addBuiltInBean(new UserTransactionBean(beanManager));

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java	2009-11-03 00:18:32 UTC (rev 4586)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java	2009-11-03 00:19:36 UTC (rev 4587)
@@ -22,6 +22,9 @@
 import static org.jboss.weld.util.log.Category.BOOTSTRAP;
 import static org.jboss.weld.util.log.LoggerFactory.loggerFactory;
 
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -57,19 +60,27 @@
 import org.jboss.weld.context.SessionContext;
 import org.jboss.weld.context.SingletonContext;
 import org.jboss.weld.context.api.BeanStore;
+import org.jboss.weld.conversation.ConversationImpl;
+import org.jboss.weld.conversation.NumericConversationIdGenerator;
+import org.jboss.weld.conversation.ServletConversationManager;
 import org.jboss.weld.ejb.EJBApiAbstraction;
 import org.jboss.weld.ejb.EjbDescriptors;
+import org.jboss.weld.ejb.spi.EjbDescriptor;
 import org.jboss.weld.jsf.JsfApiAbstraction;
 import org.jboss.weld.metadata.TypeStore;
 import org.jboss.weld.metadata.cache.MetaAnnotationStore;
 import org.jboss.weld.persistence.PersistenceApiAbstraction;
 import org.jboss.weld.resources.ClassTransformer;
 import org.jboss.weld.resources.DefaultResourceLoader;
+import org.jboss.weld.resources.SingleThreadScheduledExecutorServiceFactory;
 import org.jboss.weld.resources.spi.ResourceLoader;
+import org.jboss.weld.resources.spi.ScheduledExecutorServiceFactory;
 import org.jboss.weld.serialization.spi.ContextualStore;
+import org.jboss.weld.servlet.HttpSessionManager;
 import org.jboss.weld.servlet.ServletApiAbstraction;
 import org.jboss.weld.transaction.spi.TransactionServices;
 import org.jboss.weld.util.Names;
+import org.jboss.weld.util.collections.Arrays2;
 import org.jboss.weld.util.serviceProvider.DefaultServiceLoaderFactory;
 import org.jboss.weld.util.serviceProvider.ServiceLoaderFactory;
 import org.jboss.weld.ws.WSApiAbstraction;
@@ -101,6 +112,7 @@
       private final Environment environment;
       private final Deployment deployment;
       private final Map<BeanDeploymentArchive, BeanDeployment> managerAwareBeanDeploymentArchives;
+      private final BeanDeploymentArchive implementationBeanDeploymentArchive;
       
       public DeploymentVisitor(BeanManagerImpl deploymentManager, Environment environment, Deployment deployment)
       {
@@ -108,21 +120,63 @@
          this.environment = environment;
          this.deployment = deployment;
          this.managerAwareBeanDeploymentArchives = new HashMap<BeanDeploymentArchive, BeanDeployment>();
+         this.implementationBeanDeploymentArchive = new BeanDeploymentArchive()
+         {
+            
+            private  final ServiceRegistry serviceRegistry = new SimpleServiceRegistry();
+            private final Set<Class<?>> beanClasses = Arrays2.<Class<?>>asSet(ConversationImpl.class, ServletConversationManager.class, NumericConversationIdGenerator.class, HttpSessionManager.class);
+            
+            public ServiceRegistry getServices()
+            {
+               return serviceRegistry;
+            }
+            
+            public String getId()
+            {
+               return "weld";
+            }
+            
+            public Collection<EjbDescriptor<?>> getEjbs()
+            {
+               return Collections.emptySet();
+            }
+            
+            public Collection<URL> getBeansXml()
+            {
+               return Collections.emptySet();
+            }
+            
+            public Collection<BeanDeploymentArchive> getBeanDeploymentArchives()
+            {
+               return Collections.emptySet();
+            }
+            
+            public Collection<Class<?>> getBeanClasses()
+            {
+               return beanClasses;
+            }
+         };
       }
       
       public Map<BeanDeploymentArchive, BeanDeployment> visit()
       {
+         // Add the impl beans
+         visit(implementationBeanDeploymentArchive, managerAwareBeanDeploymentArchives, new HashSet<BeanDeploymentArchive>(), false);
+         
          for (BeanDeploymentArchive archvive : deployment.getBeanDeploymentArchives())
          {
-            visit(archvive, managerAwareBeanDeploymentArchives, new HashSet<BeanDeploymentArchive>());
+            visit(archvive, managerAwareBeanDeploymentArchives, new HashSet<BeanDeploymentArchive>(), true);
          }
          return managerAwareBeanDeploymentArchives;
       }
       
-      private BeanDeployment visit(BeanDeploymentArchive beanDeploymentArchive, Map<BeanDeploymentArchive, BeanDeployment> managerAwareBeanDeploymentArchives, Set<BeanDeploymentArchive> seenBeanDeploymentArchives)
+      private BeanDeployment visit(BeanDeploymentArchive beanDeploymentArchive, Map<BeanDeploymentArchive, BeanDeployment> managerAwareBeanDeploymentArchives, Set<BeanDeploymentArchive> seenBeanDeploymentArchives, boolean validate)
       {
          // Check that the required services are specified
-         verifyServices(beanDeploymentArchive.getServices(), environment.getRequiredBeanDeploymentArchiveServices());
+         if (validate)
+         {
+            verifyServices(beanDeploymentArchive.getServices(), environment.getRequiredBeanDeploymentArchiveServices());
+         }
          
          // Check the id is not null
          if (beanDeploymentArchive.getId() == null)
@@ -143,10 +197,12 @@
             // Cut any circularties
             if (!seenBeanDeploymentArchives.contains(archive))
             {
-               BeanDeployment child = visit(archive, managerAwareBeanDeploymentArchives, seenBeanDeploymentArchives);
+               BeanDeployment child = visit(archive, managerAwareBeanDeploymentArchives, seenBeanDeploymentArchives, validate);
                parent.getBeanManager().addAccessibleBeanManager(child.getBeanManager());
             }
          }
+         // Make the implementation beans accessible
+         parent.getBeanManager().addAccessibleBeanManager(managerAwareBeanDeploymentArchives.get(implementationBeanDeploymentArchive).getBeanManager());
          return parent;
       }
       
@@ -177,6 +233,10 @@
          {
             deployment.getServices().add(ResourceLoader.class, new DefaultResourceLoader());
          }
+         if (!deployment.getServices().contains(ScheduledExecutorServiceFactory.class))
+         {
+            deployment.getServices().add(ScheduledExecutorServiceFactory.class, new SingleThreadScheduledExecutorServiceFactory());
+         }
          
          verifyServices(deployment.getServices(), environment.getRequiredDeploymentServices());
          



More information about the weld-commits mailing list