Skip to content

Commit

Permalink
WELD-212, WELD-233
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Nov 1, 2009
1 parent 401ec24 commit 6f99ed2
Show file tree
Hide file tree
Showing 33 changed files with 593 additions and 148 deletions.
31 changes: 24 additions & 7 deletions impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
Expand Up @@ -540,12 +540,6 @@ public void addAccessibleBeanManager(BeanManagerImpl accessibleBeanManager)
accessibleManagers.add(accessibleBeanManager);
beanResolver.clear();
}

protected Set<BeanManagerImpl> getAccessibleManagers()
{

return accessibleManagers;
}

public void addBean(Bean<?> bean)
{
Expand Down Expand Up @@ -899,7 +893,6 @@ public Object getReference(Bean<?> bean, CreationalContext<?> creationalContext)

public Object getReference(Bean<?> bean, Type beanType, CreationalContext<?> creationalContext)
{

if (!Reflections.isAssignableFrom(bean.getTypes(), beanType))
{
throw new IllegalArgumentException("The given beanType is not a type " + beanType +" of the bean " + bean );
Expand Down Expand Up @@ -977,6 +970,10 @@ public <T> T getInstanceByType(Class<T> beanType, Annotation... bindings)
{
Set<Bean<?>> beans = getBeans(beanType, bindings);
Bean<?> bean = resolve(beans);
if (bean == null)
{
throw new UnsatisfiedResolutionException("Unable to resolve any beans. Class: " + beanType + "; Qualifiers: " + Arrays.toString(bindings));
}
Object reference = getReference(bean, beanType, createCreationalContext(bean));

@SuppressWarnings("unchecked")
Expand Down Expand Up @@ -1092,6 +1089,26 @@ public String toString()
buffer.append("Specialized beans: " + specializedBeans.size() + "\n");
return buffer.toString();
}

@Override
public boolean equals(Object obj)
{
if (obj instanceof BeanManagerImpl)
{
BeanManagerImpl that = (BeanManagerImpl) obj;
return this.getId().equals(that.getId());
}
else
{
return false;
}
}

@Override
public int hashCode()
{
return getId().hashCode();
}

public BeanManagerImpl createActivity()
{
Expand Down
Expand Up @@ -150,7 +150,6 @@ else if (bean instanceof ProducerMethod<?, ?>)
ProcessObserverMethodImpl.fire(manager, observer);
manager.addObserver(observer);
}

return this;
}

Expand Down
6 changes: 2 additions & 4 deletions impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
Expand Up @@ -39,26 +39,24 @@
public class BeanDeployer extends AbstractBeanDeployer<BeanDeployerEnvironment>
{

private final BeanManagerImpl deploymentManager;
private final Set<WeldClass<?>> classes;

/**
* @param manager
* @param ejbDescriptors
*/
public BeanDeployer(BeanManagerImpl manager, BeanManagerImpl deploymentManager, EjbDescriptors ejbDescriptors)
public BeanDeployer(BeanManagerImpl manager, EjbDescriptors ejbDescriptors)
{
super(manager, new BeanDeployerEnvironment(ejbDescriptors, manager));
this.classes = new HashSet<WeldClass<?>>();
this.deploymentManager = deploymentManager;
}

public BeanDeployer addClass(Class<?> clazz)
{
ClassTransformer classTransformer = Container.instance().deploymentServices().get(ClassTransformer.class);
if (!clazz.isAnnotation() && !clazz.isEnum())
{
ProcessAnnotatedTypeImpl<?> event = ProcessAnnotatedTypeImpl.fire(deploymentManager, classTransformer.loadClass(clazz));
ProcessAnnotatedTypeImpl<?> event = ProcessAnnotatedTypeImpl.fire(getManager(), classTransformer.loadClass(clazz));
if (!event.isVeto())
{
if (event.getAnnotatedType() instanceof WeldClass<?>)
Expand Down
30 changes: 2 additions & 28 deletions impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java
Expand Up @@ -25,7 +25,6 @@
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.bean.builtin.DefaultValidatorBean;
import org.jboss.weld.bean.builtin.DefaultValidatorFactoryBean;
import org.jboss.weld.bean.builtin.ExtensionBean;
import org.jboss.weld.bean.builtin.InjectionPointBean;
import org.jboss.weld.bean.builtin.ManagerBean;
import org.jboss.weld.bean.builtin.PrincipalBean;
Expand All @@ -37,14 +36,12 @@
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.bootstrap.spi.Deployment;
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.event.ObserverMethodImpl;
import org.jboss.weld.resources.spi.ResourceLoader;
import org.jboss.weld.security.spi.SecurityServices;
import org.jboss.weld.servlet.HttpSessionManager;
Expand All @@ -64,14 +61,10 @@ public class BeanDeployment

private final BeanDeploymentArchive beanDeploymentArchive;
private final BeanManagerImpl beanManager;
private final ExtensionBeanDeployerEnvironment extensionBeanDeployerEnvironment;
private final BeanDeployer beanDeployer;
private final Deployment deployment;

public BeanDeployment(BeanDeploymentArchive beanDeploymentArchive, BeanManagerImpl deploymentManager, Deployment deployment, ExtensionBeanDeployerEnvironment extensionBeanDeployerEnvironment, ServiceRegistry deploymentServices)
public BeanDeployment(BeanDeploymentArchive beanDeploymentArchive, BeanManagerImpl deploymentManager, ServiceRegistry deploymentServices)
{
this.extensionBeanDeployerEnvironment = extensionBeanDeployerEnvironment;
this.deployment = deployment;
this.beanDeploymentArchive = beanDeploymentArchive;
EjbDescriptors ejbDescriptors = new EjbDescriptors();
beanDeploymentArchive.getServices().add(EjbDescriptors.class, ejbDescriptors);
Expand All @@ -86,7 +79,7 @@ public BeanDeployment(BeanDeploymentArchive beanDeploymentArchive, BeanManagerIm
ejbDescriptors.addAll(beanDeploymentArchive.getEjbs());
}

beanDeployer = new BeanDeployer(beanManager, deploymentManager, ejbDescriptors);
beanDeployer = new BeanDeployer(beanManager, ejbDescriptors);

parseBeansXml();
}
Expand Down Expand Up @@ -137,25 +130,6 @@ private void parseBeansXml()
// TODO read EJB descriptors after reading classes
public void deployBeans(Environment environment)
{
for (ExtensionBean bean : extensionBeanDeployerEnvironment.getBeans())
{
BeanDeploymentArchive classBeanDeploymentArchive = deployment.loadBeanDeploymentArchive(bean.getBeanClass());
if (classBeanDeploymentArchive == null)
{
throw new IllegalStateException("deployment.loadBeanDeploymentArchive() returned null for " + bean.getBeanClass());
}
if (classBeanDeploymentArchive.equals(beanDeploymentArchive))
{
beanDeployer.getManager().addBean(bean);
}
}
for (ObserverMethodImpl<?, ?> observerMethod : extensionBeanDeployerEnvironment.getObservers())
{
if (deployment.loadBeanDeploymentArchive(observerMethod.getBeanClass()).equals(beanDeploymentArchive))
{
beanDeployer.getManager().addObserver(observerMethod);
}
}
beanDeployer.addClasses(beanDeploymentArchive.getBeanClasses());
beanDeployer.getEnvironment().addBuiltInBean(new ManagerBean(beanManager));
beanDeployer.getEnvironment().addBuiltInBean(new InjectionPointBean(beanManager));
Expand Down
Expand Up @@ -17,48 +17,71 @@
package org.jboss.weld.bootstrap;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.Extension;

import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.Container;
import org.jboss.weld.bean.RIBean;
import org.jboss.weld.bean.builtin.ExtensionBean;
import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
import org.jboss.weld.bootstrap.spi.Deployment;
import org.jboss.weld.event.ObserverFactory;
import org.jboss.weld.event.ObserverMethodImpl;
import org.jboss.weld.introspector.WeldClass;
import org.jboss.weld.introspector.WeldMethod;
import org.jboss.weld.resources.ClassTransformer;
import org.jboss.weld.util.DeploymentStructures;

/**
* @author pmuir
*
*/
public class ExtensionBeanDeployer extends AbstractBeanDeployer<ExtensionBeanDeployerEnvironment>
public class ExtensionBeanDeployer
{


private final BeanManagerImpl beanManager;
private final Set<ObserverMethodImpl<?, ?>> observerMethods;
private final Set<Extension> extensions;
private final Deployment deployment;
private final Map<BeanDeploymentArchive, BeanDeployment> beanDeployments;

public ExtensionBeanDeployer(BeanManagerImpl manager, ExtensionBeanDeployerEnvironment environment)
public ExtensionBeanDeployer(BeanManagerImpl manager, Deployment deployment, Map<BeanDeploymentArchive, BeanDeployment> beanDeployments)
{
super(manager, environment);
this.beanManager = manager;
this.extensions = new HashSet<Extension>();
this.observerMethods = new HashSet<ObserverMethodImpl<?,?>>();
this.deployment = deployment;
this.beanDeployments = beanDeployments;
}

public ExtensionBeanDeployer createBeans()
public ExtensionBeanDeployer deployBeans()
{
ClassTransformer classTransformer = Container.instance().deploymentServices().get(ClassTransformer.class);
for (Extension extension : extensions)
{
@SuppressWarnings("unchecked")
WeldClass<Extension> clazz = (WeldClass<Extension>) classTransformer.loadClass(extension.getClass());

ExtensionBean bean = new ExtensionBean(getManager(), clazz, extension);
this.
getEnvironment().addExtension(bean);
createObserverMethods(bean, clazz);
// Locate the BeanDeployment for this extension
BeanDeployment beanDeployment = DeploymentStructures.getOrCreateBeanDeployment(deployment, beanManager, beanDeployments, clazz.getJavaClass());

ExtensionBean bean = new ExtensionBean(beanDeployment.getBeanManager(), clazz, extension);
createObserverMethods(bean, beanDeployment.getBeanManager(), clazz);
beanDeployment.getBeanManager().addBean(bean);
for (ObserverMethodImpl<?, ?> observerMethod : observerMethods)
{
observerMethod.initialize();
beanDeployment.getBeanManager().addObserver(observerMethod);
}
}
return this;
}


public void addExtensions(Iterable<Extension> extensions)
{
for (Extension extension : extensions)
Expand All @@ -71,5 +94,19 @@ public void addExtension(Extension extension)
{
this.extensions.add(extension);
}

protected <X> void createObserverMethods(RIBean<X> declaringBean, BeanManagerImpl beanManager, WeldClass<X> annotatedClass)
{
for (WeldMethod<?, X> method : annotatedClass.getDeclaredWeldMethodsWithAnnotatedParameters(Observes.class))
{
createObserverMethod(declaringBean, beanManager, method);
}
}

protected <T, X> void createObserverMethod(RIBean<X> declaringBean, BeanManagerImpl beanManager, WeldMethod<T, X> method)
{
ObserverMethodImpl<T, X> observer = ObserverFactory.create(method, declaringBean, beanManager);
this.observerMethods.add(observer);
}

}

0 comments on commit 6f99ed2

Please sign in to comment.