[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