Skip to content

Commit

Permalink
Add built in ScheduledExecutorFactory to services, WELD-236
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Nov 3, 2009
1 parent 89cb91a commit 2a7fd52
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 26 deletions.
49 changes: 43 additions & 6 deletions impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
Expand Up @@ -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;
Expand Down Expand Up @@ -231,6 +234,7 @@ public String toString()
* 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;
Expand Down Expand Up @@ -284,6 +288,7 @@ public List<Context> get()
return new BeanManagerImpl(
serviceRegistry,
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<DecoratorImpl<?>>(),
new CopyOnWriteArrayList<InterceptorImpl<?>>(),
new CopyOnWriteArrayList<ObserverMethod<?>>(),
Expand Down Expand Up @@ -312,6 +317,7 @@ public static BeanManagerImpl newManager(BeanManagerImpl rootManager, String id,
return new BeanManagerImpl(
services,
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<Bean<?>>(),
new CopyOnWriteArrayList<DecoratorImpl<?>>(),
new CopyOnWriteArrayList<InterceptorImpl<?>>(),
new CopyOnWriteArrayList<ObserverMethod<?>>(),
Expand Down Expand Up @@ -339,6 +345,8 @@ public static BeanManagerImpl newChildActivityManager(BeanManagerImpl parentMana
{
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());
Expand All @@ -348,6 +356,7 @@ public static BeanManagerImpl newChildActivityManager(BeanManagerImpl parentMana
return new BeanManagerImpl(
parentManager.getServices(),
beans,
transitiveBeans,
parentManager.getDecorators(),
parentManager.getInterceptors(),
registeredObservers,
Expand All @@ -374,6 +383,7 @@ public static BeanManagerImpl newChildActivityManager(BeanManagerImpl parentMana
private BeanManagerImpl(
ServiceRegistry serviceRegistry,
List<Bean<?>> beans,
List<Bean<?>> transitiveBeans,
List<DecoratorImpl<?>> decorators,
List<InterceptorImpl<?>> interceptors,
List<ObserverMethod<?>> observers,
Expand All @@ -392,6 +402,7 @@ private BeanManagerImpl(
{
this.services = serviceRegistry;
this.beans = beans;
this.transitiveBeans = transitiveBeans;
this.decorators = decorators;
this.interceptors = interceptors;
this.enterpriseBeans = enterpriseBeans;
Expand All @@ -414,11 +425,12 @@ private BeanManagerImpl(


// 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>();

Expand Down Expand Up @@ -481,12 +493,27 @@ private <T> Iterable<T> createStaticAccessibleIterable(final Transform<T> transf
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();
}
}

};
Expand Down Expand Up @@ -561,6 +588,11 @@ public void addBean(Bean<?> bean)
{
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();
}
Expand Down Expand Up @@ -773,6 +805,11 @@ public List<Bean<?>> getBeans()
return Collections.unmodifiableList(beans);
}

private List<Bean<?>> getTransitiveBeans()
{
return Collections.unmodifiableList(transitiveBeans);
}

public List<DecoratorImpl<?>> getDecorators()
{
return Collections.unmodifiableList(decorators);
Expand All @@ -785,7 +822,7 @@ public List<InterceptorImpl<?>> getInterceptors()

public Iterable<Bean<?>> getAccessibleBeans()
{
return createDynamicAccessibleIterable(Transform.BEAN);
return createDynamicAccessibleIterable(new Transform.BeanTransform(this));
}

public void addContext(Context context)
Expand Down Expand Up @@ -1297,7 +1334,7 @@ public void validate(InjectionPoint ij)
}
}

public Set<Annotation> getInterceptorBindingTypeDefinition(Class<? extends Annotation> bindingType)
public Set<Annotation> getInterceptorBindingDefinition(Class<? extends Annotation> bindingType)
{
if (getServices().get(MetaAnnotationStore.class).getInterceptorBindingModel(bindingType).isValid())
{
Expand Down
2 changes: 0 additions & 2 deletions impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
Expand Up @@ -72,11 +72,9 @@ public BeanDeployer addClass(Class<?> clazz)
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;
}
Expand Down
14 changes: 0 additions & 14 deletions impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java
Expand Up @@ -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;
Expand Down Expand Up @@ -135,14 +129,6 @@ public void deployBeans(Environment environment)
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));
Expand Down
68 changes: 64 additions & 4 deletions impl/src/main/java/org/jboss/weld/bootstrap/WeldBootstrap.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -101,28 +112,71 @@ private static class DeploymentVisitor
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)
{
this.deploymentManager = deploymentManager;
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)
Expand All @@ -143,10 +197,12 @@ private BeanDeployment visit(BeanDeploymentArchive beanDeploymentArchive, Map<Be
// 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;
}

Expand Down Expand Up @@ -177,6 +233,10 @@ public Bootstrap startContainer(Environment environment, Deployment deployment,
{
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());

Expand Down

0 comments on commit 2a7fd52

Please sign in to comment.