[webbeans-commits] Webbeans SVN: r3676 - in ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans: bean/builder/spi and 3 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Wed Sep 16 11:30:35 EDT 2009
Author: kabir.khan at jboss.com
Date: 2009-09-16 11:30:35 -0400 (Wed, 16 Sep 2009)
New Revision: 3676
Added:
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java
Removed:
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java
Modified:
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java
ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java
Log:
Start plugging in the new sorter, most tests are passing
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderFactoryImpl.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -27,12 +27,14 @@
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import org.jboss.webbeans.bean.builder.spi.DecoratorBeanBuilder;
import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
/**
*
@@ -72,43 +74,42 @@
}
}
- public SimpleBeanBuilder getSimpleBeanBuilder(BeanManager beanManager)
+ public <T> SimpleBeanBuilder<T> getSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
{
- return getBeanBuilderImpl(beanManager, false);
+ return getBeanBuilderImpl(beanManager, false, annotatedType, null, false);
}
- public EnterpriseBeanBuilder getEnterpriseBeanBuilder(BeanManager beanManager)
+ public <T> EnterpriseBeanBuilder<T> getEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor)
{
- return getBeanBuilderImpl(beanManager, false);
+ return getBeanBuilderImpl(beanManager, false, null, ejbDescriptor, false);
}
- public DecoratorBeanBuilder getDecoratorBeanBuilder(BeanManager beanManager)
+ public <T> DecoratorBeanBuilder<T> getDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
{
- return getBeanBuilderImpl(beanManager, false);
+ return getBeanBuilderImpl(beanManager, false, annotatedType, null, true);
}
- public SimpleBeanBuilder getInternalSimpleBeanBuilder(BeanManager beanManager)
+ public <T> SimpleBeanBuilder<T> getInternalSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
{
- return getBeanBuilderImpl(beanManager, true);
+ return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
}
- public EnterpriseBeanBuilder getInternalEnterpriseBeanBuilder(BeanManager beanManager)
+ public <T> EnterpriseBeanBuilder<T> getInternalEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor)
{
- return getBeanBuilderImpl(beanManager, true);
+ return getBeanBuilderImpl(beanManager, true, null, ejbDescriptor, false);
}
- public DecoratorBeanBuilder getInternalDecoratorBeanBuilder(BeanManager beanManager)
+ public <T> DecoratorBeanBuilder<T> getInternalDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
{
- return getBeanBuilderImpl(beanManager, true);
+ return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
}
- @Override
- public InternalObserverMethodBuilder getInternalObserverMethodBuilder(BeanManager beanManager)
+ public <T> InternalObserverMethodBuilder<T> getInternalObserverMethodBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType)
{
- return getBeanBuilderImpl(beanManager, true);
+ return getBeanBuilderImpl(beanManager, true, annotatedType, null, false);
}
- private BeanBuilderImpl getBeanBuilderImpl(BeanManager beanManager, boolean delayInitialization)
+ private <T> BeanBuilderImpl<T> getBeanBuilderImpl(BeanManager beanManager, boolean delayInitialization, AnnotatedType<T> annotatedType, EjbDescriptor<T> ejbDescriptor, boolean decorator)
{
lock.readLock().lock();
try
@@ -122,11 +123,11 @@
if (environment == null)
throw new IllegalStateException("BeanManager registered but no longer valid " + beanManager);
- return new BeanBuilderImpl(beanManager, environment, delayInitialization);
+ return BeanBuilderImpl.initialiseBuilder(beanManager, environment, annotatedType, ejbDescriptor, decorator, delayInitialization);
}
finally
{
lock.readLock().unlock();
}
- }
+ }
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/BeanBuilderImpl.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -66,8 +66,20 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class BeanBuilderImpl implements SimpleBeanBuilder, EnterpriseBeanBuilder, DecoratorBeanBuilder, InternalObserverMethodBuilder
+public class BeanBuilderImpl<T> implements SimpleBeanBuilder<T>, EnterpriseBeanBuilder<T>, DecoratorBeanBuilder<T>, InternalObserverMethodBuilder<T>
{
+ private final AnnotatedType<T> type;
+
+ private final EjbDescriptor<T> ejbDescriptor;
+
+ private final boolean decorator;
+
+ private Bean<T> mainBean;
+
+ private Set<Bean<?>> beans;
+
+ private Set<ObserverMethod<T, ?>> observerMethods;
+
private final BeanManagerImpl beanManager;
private final BeanDeployerEnvironment beanDeployerEnvironment;
@@ -76,7 +88,7 @@
private final boolean delayInitialization;
- public BeanBuilderImpl(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, boolean delayInitialization)
+ private BeanBuilderImpl(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, AnnotatedType<T> type, EjbDescriptor<T> ejbDescriptor, boolean decorator, boolean delayInitialization)
{
if (beanManager != beanManager)
throw new IllegalStateException("beanManager is not an instance of " + BeanManagerImpl.class.getName());
@@ -84,27 +96,75 @@
this.beanDeployerEnvironment = beanDeployerEnvironment;
this.delayInitialization = delayInitialization;
+ this.decorator = decorator;
+ this.type = type;
+ this.ejbDescriptor = ejbDescriptor;
}
- public <T> Set<Bean<?>> createSimpleBeans(AnnotatedType<T> type)
+ static <T> BeanBuilderImpl<T> initialiseBuilder(BeanManager beanManager, BeanDeployerEnvironment beanDeployerEnvironment, AnnotatedType<T> type, EjbDescriptor<T> ejbDescriptor, boolean decorator, boolean delayInitialization)
{
+ if (type == null && ejbDescriptor == null)
+ throw new IllegalArgumentException("Need a type or an ejbDescriptor");
+ if (type != null && ejbDescriptor != null)
+ throw new IllegalArgumentException("Cannot pass in both type and ejbDescriptor");
+ if (beanManager == null)
+ throw new IllegalArgumentException("Null bean manager");
+ if (beanDeployerEnvironment == null)
+ throw new IllegalArgumentException("Null bean deployer environment");
+ if (ejbDescriptor != null && decorator)
+ throw new IllegalArgumentException("Cannot create a decorator from an ejb");
+
+ BeanBuilderImpl<T> builder = new BeanBuilderImpl<T>(beanManager, beanDeployerEnvironment, type, ejbDescriptor, decorator, delayInitialization);
+ builder.createBeans();
+
+ return builder;
+ }
+
+ public Set<ObserverMethod<T, ?>> getObserverMethods()
+ {
+ return observerMethods;
+ }
+
+ public Bean<T> getBean()
+ {
+ return mainBean;
+ }
+
+ public Set<Bean<?>> getBeans()
+ {
+ return beans;
+ }
+
+ private void createBeans()
+ {
+ if (decorator)
+ createDecorator(type);
+ else if (ejbDescriptor != null)
+ createBeans(ejbDescriptor);
+ else if (type != null)
+ createBeans(type);
+ }
+
+ private Set<Bean<?>> createBeans(AnnotatedType<T> type)
+ {
return createSimpleBeans(getWBClass(type));
}
- public <T> Set<Bean<?>> createEnterpriseBeans(EjbDescriptor<T> descriptor)
+ private Set<Bean<?>> createBeans(EjbDescriptor<T> descriptor)
{
return createEnterpriseBeans(getEjbDescriptor(descriptor));
}
- public <T> Set<Bean<?>> createDecorator(AnnotatedType<T> type)
+ private Bean<T> createDecorator(AnnotatedType<T> type)
{
return createDecorator(getWBClass(type));
}
- private <T> Set<Bean<?>> createSimpleBeans(WBClass<T> clazz)
+ private Set<Bean<?>> createSimpleBeans(WBClass<T> clazz)
{
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ beans = new HashSet<Bean<?>>();
ManagedBean<T> bean = ManagedBean.of(clazz, beanManager);
+ mainBean = bean;
beanDeployerEnvironment.addBean(bean);
beans.add(bean);
@@ -123,10 +183,12 @@
return beans;
}
- private <T> Set<Bean<?>> createEnterpriseBeans(InternalEjbDescriptor<T> ejbDescriptor)
+ private Set<Bean<?>> createEnterpriseBeans(InternalEjbDescriptor<T> ejbDescriptor)
{
- Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ beans = new HashSet<Bean<?>>();
SessionBean<T> bean = SessionBean.of(ejbDescriptor, beanManager);
+ mainBean = bean;
+
beanDeployerEnvironment.addBean(bean);
beans.add(bean);
if (!delayInitialization)
@@ -143,16 +205,16 @@
return beans;
}
- private <T> Set<Bean<?>> createDecorator(WBClass<T> annotatedClass)
+ private Bean<T> createDecorator(WBClass<T> annotatedClass)
{
- DecoratorImpl<?> bean = DecoratorImpl.of(annotatedClass, beanManager);
+ DecoratorImpl<T> bean = DecoratorImpl.of(annotatedClass, beanManager);
+ mainBean = bean;
+
beanDeployerEnvironment.addBean(bean);
if (!delayInitialization)
bean.initialize(beanDeployerEnvironment);
- HashSet<Bean<?>> beans = new HashSet<Bean<?>>();
- beans.add(bean);
- return beans;
+ return bean;
}
/**
@@ -162,14 +224,15 @@
* The class bean
*
*/
- protected <T> void createSubBeans(Set<Bean<?>> beans, AbstractClassBean<T> bean)
+ protected void createSubBeans(Set<Bean<?>> beans, AbstractClassBean<T> bean)
{
createProducerMethods(beans, bean, bean.getAnnotatedItem());
- createProducerFields(beans, bean, bean.getAnnotatedItem());
if (beanManager.isBeanEnabled(bean))
{
- createObserverMethods(bean, bean.getAnnotatedItem());
+ observerMethods = createObserverMethods(bean, bean.getAnnotatedItem());
}
+
+ createProducerFields(beans, bean, bean.getAnnotatedItem());
createDisposalMethods(beans, bean, bean.getAnnotatedItem());
}
@@ -219,15 +282,17 @@
bean.initialize(beanDeployerEnvironment);
}
- public <X> void createObserverMethods(RIBean<X> declaringBean, WBClass<X> annotatedClass)
+ public Set<ObserverMethod<T, ?>> createObserverMethods(RIBean<T> declaringBean, WBClass<T> annotatedClass)
{
- for (WBMethod<?, X> method : annotatedClass.getWBDeclaredMethodsWithAnnotatedParameters(Observes.class))
+ Set<ObserverMethod<T, ?>> methods = new HashSet<ObserverMethod<T, ?>>();
+ for (WBMethod<?, T> method : annotatedClass.getWBDeclaredMethodsWithAnnotatedParameters(Observes.class))
{
- createObserverMethod(declaringBean, method);
+ methods.add(createObserverMethod(declaringBean, method));
}
+ return methods;
}
- protected <X, T> void createObserverMethod(RIBean<X> declaringBean, WBMethod<T, X> method)
+ protected <X, T> ObserverMethodImpl<X, T> createObserverMethod(RIBean<X> declaringBean, WBMethod<T, X> method)
{
ObserverMethodImpl<X, T> observer = ObserverFactory.create(method, declaringBean, beanManager);
ProcessObserverMethod<?, ?> event = createProcessObserverMethodEvent(observer, method);
@@ -235,6 +300,7 @@
beanDeployerEnvironment.addObserver(observer);
if (!delayInitialization)
observer.initialize();
+ return observer;
}
private <X, T> ProcessObserverMethod<X, T> createProcessObserverMethodEvent(ObserverMethod<X, T> observer, AnnotatedMethod<X> method)
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalBeanBuilderFactory.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,6 +21,7 @@
*/
package org.jboss.webbeans.bean.builder;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
@@ -28,6 +29,7 @@
import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
/**
*
@@ -42,13 +44,13 @@
return (InternalBeanBuilderFactory)BeanBuilderFactory.getInstance();
}
- public abstract SimpleBeanBuilder getInternalSimpleBeanBuilder(BeanManager beanManager);
+ public abstract <T> SimpleBeanBuilder<T> getInternalSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
- public abstract EnterpriseBeanBuilder getInternalEnterpriseBeanBuilder(BeanManager beanManager);
+ public abstract <T> EnterpriseBeanBuilder<T> getInternalEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> ejbDescriptor);
- public abstract DecoratorBeanBuilder getInternalDecoratorBeanBuilder(BeanManager beanManager);
+ public abstract <T> DecoratorBeanBuilder<T> getInternalDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
- public abstract InternalObserverMethodBuilder getInternalObserverMethodBuilder(BeanManager beanManager);
+ public abstract <T> InternalObserverMethodBuilder<T> getInternalObserverMethodBuilder(BeanManager beanManager, AnnotatedType<T> annotatedType);
public abstract void registerBeanManager(BeanManager manager, BeanDeployerEnvironment environment);
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/InternalObserverMethodBuilder.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,6 +21,10 @@
*/
package org.jboss.webbeans.bean.builder;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.ObserverMethod;
+
import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.introspector.WBClass;
@@ -29,7 +33,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public interface InternalObserverMethodBuilder
+public interface InternalObserverMethodBuilder<T>
{
- <X> void createObserverMethods(RIBean<X> declaringBean, WBClass<X> annotatedClass);
+ Set<ObserverMethod<T, ?>> createObserverMethods(RIBean<T> declaringBean, WBClass<T> annotatedClass);
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/BeanBuilderFactory.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,12 @@
*/
package org.jboss.webbeans.bean.builder.spi;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
+import org.jboss.webbeans.ejb.spi.EjbDescriptor;
+
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -51,9 +54,9 @@
return INSTANCE;
}
- public abstract SimpleBeanBuilder getSimpleBeanBuilder(BeanManager beanManager);
+ public abstract <T> SimpleBeanBuilder<T> getSimpleBeanBuilder(BeanManager beanManager, AnnotatedType<T> type);
- public abstract EnterpriseBeanBuilder getEnterpriseBeanBuilder(BeanManager beanManager);
+ public abstract <T> EnterpriseBeanBuilder<T> getEnterpriseBeanBuilder(BeanManager beanManager, EjbDescriptor<T> type);
- public abstract DecoratorBeanBuilder getDecoratorBeanBuilder(BeanManager beanManager);
+ public abstract <T> DecoratorBeanBuilder<T> getDecoratorBeanBuilder(BeanManager beanManager, AnnotatedType<T> type);
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/DecoratorBeanBuilder.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,6 @@
*/
package org.jboss.webbeans.bean.builder.spi;
-import java.util.Set;
-
-import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
/**
@@ -31,7 +28,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public interface DecoratorBeanBuilder
+public interface DecoratorBeanBuilder<T>
{
- <T> Set<Bean<?>> createDecorator(AnnotatedType<T> type);
+ Bean<T> getBean();
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/EnterpriseBeanBuilder.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,18 +21,12 @@
*/
package org.jboss.webbeans.bean.builder.spi;
-import java.util.Set;
-import javax.enterprise.inject.spi.Bean;
-
-import org.jboss.webbeans.ejb.spi.EjbDescriptor;
-
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public interface EnterpriseBeanBuilder
+public interface EnterpriseBeanBuilder<T> extends ManagedBeanBuilder<T>
{
- <T> Set<Bean<?>> createEnterpriseBeans(EjbDescriptor<T> descriptor);
}
Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/ManagedBeanBuilder.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.webbeans.bean.builder.spi;
+
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ManagedBeanBuilder<T>
+{
+ Set<Bean<?>> getBeans();
+ Set<ObserverMethod<T, ?>> getObserverMethods();
+}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bean/builder/spi/SimpleBeanBuilder.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,17 +21,12 @@
*/
package org.jboss.webbeans.bean.builder.spi;
-import java.util.Set;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public interface SimpleBeanBuilder
+public interface SimpleBeanBuilder<T> extends ManagedBeanBuilder<T>
{
- <T> Set<Bean<?>> createSimpleBeans(AnnotatedType<T> type);
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/AbstractBeanDeployer.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -100,21 +100,18 @@
protected <T> void createSimpleBean(WBClass<T> annotatedClass)
{
- SimpleBeanBuilder builder = beanBuilderFactory.getInternalSimpleBeanBuilder(manager);
- builder.createSimpleBeans(annotatedClass);
+ SimpleBeanBuilder<T> builder = beanBuilderFactory.getInternalSimpleBeanBuilder(manager, annotatedClass);
}
protected <T> void createDecorator(WBClass<T> annotatedClass)
{
- DecoratorBeanBuilder builder = beanBuilderFactory.getInternalDecoratorBeanBuilder(manager);
- builder.createDecorator(annotatedClass);
+ DecoratorBeanBuilder<T> builder = beanBuilderFactory.getInternalDecoratorBeanBuilder(manager, annotatedClass);
}
protected <T> void createEnterpriseBean(InternalEjbDescriptor<T> ejbDescriptor)
{
// TODO Don't create enterprise bean if it has no local interfaces!
- EnterpriseBeanBuilder builder = beanBuilderFactory.getInternalEnterpriseBeanBuilder(manager);
- builder.createEnterpriseBeans(ejbDescriptor);
+ EnterpriseBeanBuilder<T> builder = beanBuilderFactory.getInternalEnterpriseBeanBuilder(manager, ejbDescriptor);
}
/**
@@ -165,5 +162,4 @@
{
return environment;
}
-
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -17,18 +17,45 @@
package org.jboss.webbeans.bootstrap;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
-import javax.decorator.Decorator;
import javax.enterprise.inject.spi.AnnotatedType;
-import javax.interceptor.Interceptor;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.Container;
+import org.jboss.webbeans.bean.builtin.AbstractBuiltInBean;
+import org.jboss.webbeans.bean.builtin.DefaultValidatorBean;
+import org.jboss.webbeans.bean.builtin.DefaultValidatorFactoryBean;
+import org.jboss.webbeans.bean.builtin.InjectionPointBean;
+import org.jboss.webbeans.bean.builtin.ManagerBean;
+import org.jboss.webbeans.bean.builtin.PrincipalBean;
+import org.jboss.webbeans.bean.builtin.UserTransactionBean;
+import org.jboss.webbeans.bean.builtin.facade.EventBean;
+import org.jboss.webbeans.bean.builtin.facade.InstanceBean;
+import org.jboss.webbeans.bootstrap.api.Environments;
+import org.jboss.webbeans.builder.sorter.DecoratorDeploymentItem;
+import org.jboss.webbeans.builder.sorter.DeploymentItem;
+import org.jboss.webbeans.builder.sorter.DeploymentSorterAction;
+import org.jboss.webbeans.builder.sorter.EjbDeploymentItem;
+import org.jboss.webbeans.builder.sorter.SimpleDeploymentItem;
+import org.jboss.webbeans.builder.sorter.Sorter;
+import org.jboss.webbeans.conversation.ConversationImpl;
+import org.jboss.webbeans.conversation.JavaSEConversationTerminator;
+import org.jboss.webbeans.conversation.NumericConversationIdGenerator;
+import org.jboss.webbeans.conversation.ServletConversationManager;
import org.jboss.webbeans.ejb.EjbDescriptors;
-import org.jboss.webbeans.ejb.InternalEjbDescriptor;
+import org.jboss.webbeans.event.ObserverMethodImpl;
import org.jboss.webbeans.introspector.WBClass;
+import org.jboss.webbeans.log.LogProvider;
+import org.jboss.webbeans.log.Logging;
import org.jboss.webbeans.resources.ClassTransformer;
+import org.jboss.webbeans.security.spi.SecurityServices;
+import org.jboss.webbeans.servlet.HttpSessionManager;
+import org.jboss.webbeans.transaction.spi.TransactionServices;
+import org.jboss.webbeans.validation.spi.ValidationServices;
/**
* @author pmuir
@@ -36,6 +63,7 @@
*/
public class BeanDeployer extends AbstractBeanDeployer
{
+ private static final LogProvider log = Logging.getLogProvider(BeanDeployer.class);
private final BeanManagerImpl deploymentManager;
@@ -99,27 +127,117 @@
public AbstractBeanDeployer createBeans()
{
- for (WBClass<?> clazz : classes)
+// for (WBClass<?> clazz : classes)
+// {
+// boolean managedBeanOrDecorator = !getEnvironment().getEjbDescriptors().contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
+// if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+// {
+// createDecorator(clazz);
+// }
+// else if (managedBeanOrDecorator && clazz.isAnnotationPresent(Interceptor.class))
+// {
+// //createInterceptor(clazz);
+// }
+// else if (managedBeanOrDecorator && !clazz.isAbstract())
+// {
+// createSimpleBean(clazz);
+// }
+// }
+// for (InternalEjbDescriptor<?> ejbDescriptor : getEnvironment().getEjbDescriptors())
+// {
+// createEnterpriseBean(ejbDescriptor);
+// }
+ return this;
+ }
+
+ @Override
+ public AbstractBeanDeployer deploy()
+ {
+ Sorter sorter = Sorter.createSorter(getManager(), classes, getEnvironment().getEjbDescriptors());
+ List<DeploymentItem<?>> sortedItems = sorter.sort();
+
+ addBuiltInBeans();
+
+ DeploymentItemDeployerAction deployerAction = new DeploymentItemDeployerAction();
+ Set<ObserverMethod<?, ?>> observers = new HashSet<ObserverMethod<?, ?>>();
+ for (DeploymentItem<?> item : sortedItems)
{
- boolean managedBeanOrDecorator = !getEnvironment().getEjbDescriptors().contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
- if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+ item.executeAction(deployerAction);
+ observers.addAll(item.getObserverMethods(getManager(), getEnvironment()));
+ }
+
+ for (ObserverMethod<?, ?> observer : observers)
+ {
+ log.debug("Observer : " + observer);
+ if (observer instanceof ObserverMethodImpl<?, ?>)
{
- createDecorator(clazz);
+ ((ObserverMethodImpl<?, ?>)observer).initialize();
}
- else if (managedBeanOrDecorator && clazz.isAnnotationPresent(Interceptor.class))
- {
- //createInterceptor(clazz);
- }
- else if (managedBeanOrDecorator && !clazz.isAbstract())
- {
- createSimpleBean(clazz);
- }
+ getManager().addObserver(observer);
}
- for (InternalEjbDescriptor<?> ejbDescriptor : getEnvironment().getEjbDescriptors())
+ return this;
+ }
+
+ private void addBuiltInBeans()
+ {
+ addBuiltinBean(new ManagerBean(getManager()));
+ addBuiltinBean(new InjectionPointBean(getManager()));
+ addBuiltinBean(new EventBean(getManager()));
+ addBuiltinBean(new InstanceBean(getManager()));
+ if (getManager().getServices().contains(TransactionServices.class))
{
- createEnterpriseBean(ejbDescriptor);
+ addBuiltinBean(new UserTransactionBean(getManager()));
}
- return this;
+ if (getManager().getServices().contains(SecurityServices.class))
+ {
+ addBuiltinBean(new PrincipalBean(getManager()));
+ }
+ if (getManager().getServices().contains(ValidationServices.class))
+ {
+ addBuiltinBean(new DefaultValidatorBean(getManager()));
+ addBuiltinBean(new DefaultValidatorFactoryBean(getManager()));
+ }
}
+
+ private void addBuiltinBean(AbstractBuiltInBean<?> bean)
+ {
+ getEnvironment().addBean(bean);
+ getManager().addBean(bean);
+ }
+
+ private class DeploymentItemDeployerAction implements DeploymentSorterAction
+ {
+ public Object execute(EjbDeploymentItem<?> deploymentItem)
+ {
+ return deployBean(deploymentItem);
+ }
+ public Object execute(SimpleDeploymentItem<?> deploymentItem)
+ {
+ return deployBean(deploymentItem);
+ }
+
+ public Object execute(DecoratorDeploymentItem<?> deploymentItem)
+ {
+ Set<Bean<?>> beans = deploymentItem.getBeans(getManager(), getEnvironment());
+ if (beans.size() != 1)
+ throw new IllegalStateException("Expected exactly one bean: " + beans);
+
+ Bean<?> bean = beans.iterator().next();
+ getManager().addBean(bean);
+ log.debug("Decorator: " + bean);
+ return null;
+ }
+
+ private Object deployBean(DeploymentItem<?> deploymentItem)
+ {
+ Set<Bean<?>> beans = deploymentItem.getBeans(getManager(), getEnvironment());
+ for (Bean<?> bean : beans)
+ {
+ getManager().addBean(bean);
+ log.debug("Bean: " + bean);
+ }
+ return null;
+ }
+ }
}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/bootstrap/ExtensionBeanDeployer.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -56,7 +56,7 @@
bean.initialize(getEnvironment());
getEnvironment().addBean(bean);
- InternalObserverMethodBuilder observerMethodBuilder = getBeanBuilderFactory().getInternalObserverMethodBuilder(getManager());
+ InternalObserverMethodBuilder<Extension> observerMethodBuilder = getBeanBuilderFactory().getInternalObserverMethodBuilder(getManager(), clazz);
observerMethodBuilder.createObserverMethods(bean, clazz);
}
return this;
Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DecoratorDeploymentItem.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,75 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.webbeans.builder.sorter;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.DecoratorBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.introspector.WBClass;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DecoratorDeploymentItem<T> extends DeploymentItem<T>
+{
+ DecoratorDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
+ {
+ super(allItems, clazz);
+ }
+
+ @Override
+ DeploymentItem<T> getSuperClassDependency()
+ {
+ return null;
+ }
+
+ @Override
+ public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+ {
+ DecoratorBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getDecoratorBeanBuilder(manager, getWBClass());
+ setValues(createSet(builder.getBean()), (Set<ObserverMethod<T, ?>>)null);
+ }
+
+ private Set<Bean<?>> createSet(Bean<T> bean)
+ {
+ @SuppressWarnings("unchecked")
+ Set<Bean<?>> beans = new HashSet();
+ beans.add(bean);
+ return beans;
+ }
+
+ @Override
+ public void executeAction(DeploymentSorterAction action)
+ {
+ action.execute(this);
+ }
+}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentItem.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -27,7 +27,11 @@
import java.util.Set;
import javax.enterprise.inject.Specializes;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
import org.jboss.webbeans.introspector.WBClass;
/**
@@ -43,15 +47,18 @@
private List<DeploymentItem<?>> dependencies = Collections.emptyList();
- private WBClass<?> clazz;
+ private WBClass<T> clazz;
private volatile int hashCode;
// Cached string representation
private String toString;
-
- DeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<?> clazz)
+ Set<Bean<?>> beans;
+
+ Set<ObserverMethod<T, ?>> observers;
+
+ DeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
{
this.allItems = allItems;
this.clazz = clazz;
@@ -77,21 +84,20 @@
dependencies.add(dependency);
}
- public abstract T getUnderlyingItem();
- DeploymentItem<T> findDeploymentItem(DeploymentItem<T> item)
+ <X> DeploymentItem<X> findDeploymentItem(DeploymentItem<X> item)
{
for (DeploymentItem<?> candidate : allItems)
{
if (candidate.equals(item))
- return (DeploymentItem<T>)candidate;
+ return (DeploymentItem<X>)candidate;
}
return null;
}
- abstract DeploymentItem<T> getSuperClassDependency();
+ abstract DeploymentItem<? super T> getSuperClassDependency();
- public WBClass<?> getWBClass()
+ public WBClass<T> getWBClass()
{
return clazz;
}
@@ -138,4 +144,37 @@
toString = "WBClassDeploymentItem{" + clazz.toString() + "}";
return toString;
}
+
+ abstract void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment);
+
+ public abstract void executeAction(DeploymentSorterAction action);
+
+ void setValues(Set<Bean<?>> beans, Set<ObserverMethod<T, ?>> observers)
+ {
+ if (beans == null)
+ throw new IllegalArgumentException("Null beans");
+
+ this.beans = beans;
+ if (observers == null)
+ this.observers = Collections.emptySet();
+ else
+ this.observers = observers;
+ }
+
+ public Set<Bean<?>> getBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+ {
+ if (beans == null)
+ initialiseBeans(manager, environment);
+
+ return beans;
+ }
+
+ public Set<ObserverMethod<T, ?>> getObserverMethods(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+ {
+ if (beans == null)
+ initialiseBeans(manager, environment);
+
+ return observers;
+ }
}
+
Added: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/DeploymentSorterAction.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,36 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.webbeans.builder.sorter;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface DeploymentSorterAction
+{
+ Object execute(EjbDeploymentItem<?> deploymentItem);
+
+ Object execute(SimpleDeploymentItem<?> deploymentItem);
+
+ Object execute(DecoratorDeploymentItem<?> deploymentItem);
+}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/EjbDeploymentItem.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -21,9 +21,17 @@
*/
package org.jboss.webbeans.builder.sorter;
+import java.util.Collections;
import java.util.Set;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.DefinitionException;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.EnterpriseBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
import org.jboss.webbeans.ejb.EjbDescriptors;
import org.jboss.webbeans.ejb.InternalEjbDescriptor;
import org.jboss.webbeans.introspector.WBClass;
@@ -33,41 +41,53 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-class EjbDeploymentItem extends DeploymentItem<InternalEjbDescriptor<?>>
+public class EjbDeploymentItem<T> extends DeploymentItem<T>
{
- private InternalEjbDescriptor<?> ejbDescriptor;
+ private InternalEjbDescriptor<T> ejbDescriptor;
private EjbDescriptors allDescriptors;
- EjbDeploymentItem(Set<DeploymentItem<?>> allItems, EjbDescriptors allDescriptors, WBClass<?> clazz, InternalEjbDescriptor<?> ejbDescriptor)
+ private Set<Bean<?>> beans;
+ private ObserverMethod<T, ?> observerMethods;
+
+ EjbDeploymentItem(Set<DeploymentItem<?>> allItems, EjbDescriptors allDescriptors, WBClass<T> clazz, InternalEjbDescriptor<T> ejbDescriptor)
{
super(allItems, clazz);
this.ejbDescriptor = ejbDescriptor;
this.allDescriptors = allDescriptors;
}
- public InternalEjbDescriptor<?> getUnderlyingItem()
+ DeploymentItem<? super T> getSuperClassDependency()
{
- return ejbDescriptor;
- }
-
- DeploymentItem<InternalEjbDescriptor<?>> getSuperClassDependency()
- {
//This needs revisiting
Class<?> superClass = getWBClass().getWBSuperclass().getJavaClass();
for (InternalEjbDescriptor<?> ejb : allDescriptors)
{
if (ejb.getBeanClass().equals(superClass))
{
- DeploymentItem<InternalEjbDescriptor<?>> item = new EjbDeploymentItem(null, null, getWBClass().getWBSuperclass(), ejb);
- DeploymentItem<?> found = findDeploymentItem(item);
+ @SuppressWarnings("unchecked")
+ DeploymentItem<? super T> item = new EjbDeploymentItem(null, null, getWBClass().getWBSuperclass(), ejb);
+ DeploymentItem<? super T> found = findDeploymentItem(item);
if (found == null || found instanceof EjbDeploymentItem == false)
{
throw new DefinitionException(toString() + " annotation defined specializing EJB must have EJB superclass " + ejbDescriptor.getEjbName() + "(" + ejbDescriptor.getBeanClass() + ")");
}
- return (EjbDeploymentItem)found;
+ return found;
}
}
throw new DefinitionException(toString() + " does not specialize an EJB " + ejbDescriptor.getEjbName() + "(" + ejbDescriptor.getBeanClass() + ")");
}
+
+ @Override
+ public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+ {
+ EnterpriseBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getEnterpriseBeanBuilder(manager, ejbDescriptor);
+ setValues(builder.getBeans(), builder.getObserverMethods());
+ }
+
+ @Override
+ public void executeAction(DeploymentSorterAction action)
+ {
+ action.execute(this);
+ }
}
Copied: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java (from rev 3670, ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java)
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java (rev 0)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/SimpleDeploymentItem.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -0,0 +1,69 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.webbeans.builder.sorter;
+
+import java.util.Set;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.DefinitionException;
+import org.jboss.webbeans.bean.builder.spi.BeanBuilderFactory;
+import org.jboss.webbeans.bean.builder.spi.SimpleBeanBuilder;
+import org.jboss.webbeans.bootstrap.BeanDeployerEnvironment;
+import org.jboss.webbeans.introspector.WBClass;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SimpleDeploymentItem<T> extends DeploymentItem<T>
+{
+ SimpleDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<T> clazz)
+ {
+ super(allItems, clazz);
+ }
+
+ DeploymentItem<? super T> getSuperClassDependency()
+ {
+ DeploymentItem<? super T> item = new SimpleDeploymentItem(null, getWBClass().getWBSuperclass());
+ DeploymentItem<? super T> found = findDeploymentItem(item);
+ if (found == null || found instanceof SimpleDeploymentItem == false)
+ {
+ throw new DefinitionException("Simple bean must specialize a simple bean " + getWBClass());
+ }
+
+ return found;
+ }
+
+ @Override
+ public void initialiseBeans(BeanManagerImpl manager, BeanDeployerEnvironment environment)
+ {
+ SimpleBeanBuilder<T> builder = BeanBuilderFactory.getInstance().getSimpleBeanBuilder(manager, getWBClass());
+ setValues(builder.getBeans(), builder.getObserverMethods());
+ }
+
+ @Override
+ public void executeAction(DeploymentSorterAction action)
+ {
+ action.execute(this);
+ }
+}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/Sorter.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -96,16 +96,18 @@
{
for (WBClass<?> clazz : classes)
{
- WBClassDeploymentItem item = new WBClassDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz);
boolean managedBeanOrDecorator = !ejbDescriptors.contains(clazz.getJavaClass()) && isTypeManagedBeanOrDecorator(clazz);
- if (managedBeanOrDecorator && clazz.isAnnotationPresent(Decorator.class))
+ if (managedBeanOrDecorator)
{
- decoratorItems.add(item);
+ if (clazz.isAnnotationPresent(Decorator.class))
+ {
+ decoratorItems.add(new DecoratorDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz));
+ }
+ else if (!clazz.isAbstract())
+ {
+ unsortedItems.add(new SimpleDeploymentItem(Collections.unmodifiableSet(unsortedItems), clazz));
+ }
}
- else
- {
- unsortedItems.add(item);
- }
}
for (InternalEjbDescriptor<?> ejb : ejbDescriptors)
{
Deleted: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/builder/sorter/WBClassDeploymentItem.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -1,57 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.webbeans.builder.sorter;
-
-import java.util.Set;
-
-import org.jboss.webbeans.DefinitionException;
-import org.jboss.webbeans.introspector.WBClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class WBClassDeploymentItem extends DeploymentItem<WBClass<?>>
-{
- WBClassDeploymentItem(Set<DeploymentItem<?>> allItems, WBClass<?> clazz)
- {
- super(allItems, clazz);
- }
-
- public WBClass<?> getUnderlyingItem()
- {
- return getWBClass();
- }
-
- DeploymentItem<WBClass<?>> getSuperClassDependency()
- {
- DeploymentItem<WBClass<?>> item = new WBClassDeploymentItem(null, getWBClass().getWBSuperclass());
- DeploymentItem<WBClass<?>> found = findDeploymentItem(item);
- if (found == null || found instanceof WBClassDeploymentItem == false)
- {
- throw new DefinitionException("Simple bean must specialize a simple bean " + getWBClass());
- }
-
- return found;
- }
-}
Modified: ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java
===================================================================
--- ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java 2009-09-16 11:47:21 UTC (rev 3675)
+++ ri/branches/kabir-builder/impl/src/main/java/org/jboss/webbeans/util/Beans.java 2009-09-16 15:30:35 UTC (rev 3676)
@@ -477,7 +477,7 @@
constructor = ConstructorInjectionPoint.of(declaringBean, type.getNoArgsWBConstructor());
log.trace("Exactly one constructor (" + constructor + ") defined, using it as the bean constructor for " + type);
}
-
+
if (constructor == null)
{
throw new DefinitionException("Cannot determine constructor to use for " + type);
More information about the weld-commits
mailing list