[jboss-cvs] JBossAS SVN: r96178 - in projects/kernel/trunk/weld-int/src: main/java/org/jboss/kernel/weld/plugins/annotated and 13 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 9 11:05:05 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-11-09 11:05:02 -0500 (Mon, 09 Nov 2009)
New Revision: 96178

Added:
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContextActions.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/PlainBean.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernel.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernelMetaDataRepository.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldDescribeAction.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldKernelControllerContext.java
Removed:
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerContextActions.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldRegisterWebBeanAction.java
Modified:
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/WeldEnabled.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedTypeFactoryImpl.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerInitializer.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldDescribeAction.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldInjector.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContext.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/AnnotatedTypeWrapper.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceFieldProducer.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceMethodProducer.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceHolder.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceInjectionTarget.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceProducer.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/McBeanRegistryObserver.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/WeldFromMcRegistry.java
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/spi/annotated/MDRAnnotatedTypeFactory.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/AbstractWeldMcTest.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/bidirectional/test/BidirectionalWeldAndMcTestCase.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/BeanWithSimpleWeldDependency.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/LifecycleBean.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingBean.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingFieldProducer.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingMethodProducer.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/validateobserver/TestObserver.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/test/InjectMcBeansInWeldTestCase.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/test/InjectWeldInMcBeansTestCase.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/weldschema/test/WeldElementTestCase.java
Log:
[JBKERNEL-51] Add support for MC beans that are not installed as WeldKernelControllerContexts (i.e. part of weld deployment) to be used for injection into weld. These must have the @WeldEnabled annotation at bean level.

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/WeldEnabled.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/WeldEnabled.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/WeldEnabled.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -34,7 +34,7 @@
  * @version $Revision: 1.1 $
  */
 @Retention(RetentionPolicy.RUNTIME)
- at Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+ at Target({ElementType.TYPE})
 public @interface WeldEnabled {
 
 }

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedTypeFactoryImpl.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedTypeFactoryImpl.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedTypeFactoryImpl.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,6 +23,10 @@
 
 import javax.enterprise.inject.spi.AnnotatedType;
 
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
 import org.jboss.kernel.weld.spi.annotated.MDRAnnotatedTypeFactory;
 import org.jboss.metadata.spi.MetaData;
 
@@ -34,8 +38,19 @@
  */
 public class MDRAnnotatedTypeFactoryImpl extends MDRAnnotatedTypeFactory
 {
-   public <T> AnnotatedType<T> getAnnotatedType(AnnotatedType<T> delegate, MetaData metaData)
+   public <T> AnnotatedType<T> decorateAnnotatedType(AnnotatedType<T> delegate, MetaData metaData)
    {
       return new MDRAnnotatedType<T>(delegate, metaData);
    }
+
+   @Override
+   public <T> AnnotatedType<T> decorateAnnotatedType(AnnotatedType<T> delegate, KernelControllerContext context)
+   {
+      KernelController controller = (KernelController)context.getController();
+      Kernel kernel = controller.getKernel();
+      KernelMetaDataRepository repository = kernel.getMetaDataRepository();
+      MetaData metaData = repository.getMetaData(context);
+      
+      return decorateAnnotatedType(delegate, metaData);
+  }
 }

Deleted: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerContextActions.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerContextActions.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerContextActions.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -1,69 +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.kernel.weld.plugins.dependency;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.jboss.dependency.plugins.action.ControllerContextAction;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.kernel.plugins.dependency.CreateDestroyLifecycleAction;
-import org.jboss.kernel.plugins.dependency.KernelControllerContextActions;
-import org.jboss.kernel.plugins.dependency.PreInstallAction;
-import org.jboss.kernel.plugins.dependency.StartStopLifecycleAction;
-
-/**
- * ControllerContextActions for contexts that need to interact with web beans
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class WeldControllerContextActions extends KernelControllerContextActions
-{
-   private static final WeldControllerContextActions INSTANCE;
-   static
-   {
-      Map<ControllerState, ControllerContextAction> actions = new HashMap<ControllerState, ControllerContextAction>();
-      
-      actions.put(ControllerState.PRE_INSTALL, new PreInstallAction());
-      actions.put(ControllerState.DESCRIBED, new WeldDescribeAction());
-      actions.put(WeldRegisterWebBeanAction.STATE, new WeldRegisterWebBeanAction());
-      actions.put(ControllerState.INSTANTIATED, new WeldInstantiateAction());
-      actions.put(WeldPostConstructAction.STATE, new WeldPostConstructAction());
-      actions.put(ControllerState.CONFIGURED, new WeldConfigureAction());
-      actions.put(ControllerState.CREATE, new CreateDestroyLifecycleAction());
-      actions.put(WeldPreDestroyAction.STATE, new WeldPreDestroyAction());
-      actions.put(ControllerState.START, new StartStopLifecycleAction());
-      actions.put(ControllerState.INSTALLED, new WeldInstallAction());
-      INSTANCE = new WeldControllerContextActions(actions);
-   }
-   
-   protected WeldControllerContextActions(Map<ControllerState, ControllerContextAction> actions)
-   {
-      super(actions);
-   }
-   
-   public static WeldControllerContextActions getInstance()
-   {
-      return INSTANCE;
-   }
-}

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerInitializer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerInitializer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldControllerInitializer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -34,7 +34,6 @@
 {
    static void initializeController(Controller controller)
    {
-      controller.addState(WeldRegisterWebBeanAction.STATE, ControllerState.INSTANTIATED);
       controller.addState(WeldPostConstructAction.STATE, ControllerState.CONFIGURED);
       controller.addState(WeldPreDestroyAction.STATE, ControllerState.START);
    }

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldDescribeAction.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldDescribeAction.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldDescribeAction.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -40,12 +40,21 @@
          throw new IllegalArgumentException("context is not a WabBeansKernelControllerContext");
       
       super.applyAnnotations(context);
-      
+      applyWeldAnnotations((WeldKernelControllerContext)context);
+   }
+   
+   protected void applyWeldAnnotations(WeldKernelControllerContext context)
+   {
       @SuppressWarnings("unchecked")
-      WeldInjector<?> weldInjector = new WeldInjector((WeldKernelControllerContext)context, context.getBeanInfo().getClassInfo().getType());
-      ((WeldKernelControllerContext)context).setWeldInjector(weldInjector);
+      WeldInjector<?> weldInjector = new WeldInjector(context, getClazz(context));
+      context.setWeldInjector(weldInjector);
       weldInjector.describe();
    }
+   
+   protected Class<?> getClazz(WeldKernelControllerContext context)
+   {
+      return context.getBeanInfo().getClassInfo().getType();
+   }
 
    @Override
    protected void cleanAnnotations(KernelControllerContext context)

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldInjector.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldInjector.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldInjector.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -25,15 +25,11 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
-import java.util.Set;
 
 import javax.enterprise.context.NormalScope;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.Stereotype;
-import javax.enterprise.inject.spi.Annotated;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
@@ -43,15 +39,11 @@
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.DependencyMetaData;
 import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
-import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.dependency.AbstractMetaDataVisitor;
-import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
 import org.jboss.kernel.weld.plugins.metadata.WeldDependencyMetaData;
 import org.jboss.kernel.weld.spi.annotated.MDRAnnotatedTypeFactory;
 import org.jboss.logging.Logger;
-import org.jboss.metadata.spi.MetaData;
 
 /**
  * 
@@ -124,41 +116,6 @@
    }
    
    /**
-    * Check if the bean has web beans annotations
-    * @return true if bean has web beans annotations
-    */
-   boolean hasWebBeanAnnotations()
-   {
-      if (hasWebBeanAnnotations(type, AnnotationChecker.BINDING))
-         return true;
-      
-      for (AnnotatedMethod<?> method : type.getMethods())
-      {
-         if (hasWebBeanAnnotations(method, AnnotationChecker.PRODUCER))
-            return true;
-      }
-      
-      for (AnnotatedField<?> method : type.getFields())
-      {
-         if (hasWebBeanAnnotations(method, AnnotationChecker.PRODUCER))
-            return true;
-      }
-      
-      return false;
-   }
-   
-   boolean hasWebBeanAnnotations(Annotated annotated, AnnotationChecker checker)
-   {
-      Set<Annotation> annotations = annotated.getAnnotations();
-      for (Annotation annotation : annotations)
-      {
-         if (checker.matches(annotation))
-            return true;
-      }
-      return false;
-   }
-   
-   /**
     * Check if the bean should be constructed by web beans
     * 
     * @return true if the bean should be constructed by web beans
@@ -176,11 +133,6 @@
     */
    void describe()
    {
-      if (hasWebBeanAnnotations())
-      {
-         context.setAnnotatedType(type);
-      }
-
       AnnotationMetaDataVisitor annotationsVisitor = new AnnotationMetaDataVisitor(context);
       annotationsVisitor.before();
       try
@@ -326,15 +278,20 @@
    private AnnotatedType<T> createMdrDecoratedAnnotatedType(Class<T> clazz)
    {
       AnnotatedType<T> type = context.getManager().createAnnotatedType(clazz);
-
-      KernelController controller = (KernelController)context.getController();
-      Kernel kernel = controller.getKernel();
-      KernelMetaDataRepository repository = kernel.getMetaDataRepository();
-      MetaData metaData = repository.getMetaData(context);
-      
-      return MDRAnnotatedTypeFactory.getInstance().getAnnotatedType(type, metaData);
+      return MDRAnnotatedTypeFactory.getInstance().decorateAnnotatedType(type, context);
    }
    
+   /**
+    * Get the annotated type
+    * @return the annotated type
+    */
+   public AnnotatedType<T> getType()
+   {
+      return type;
+   }
+
+
+
    class AnnotationMetaDataVisitor extends AbstractMetaDataVisitor
    {
       public AnnotationMetaDataVisitor(KernelControllerContext context)

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContext.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContext.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContext.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -52,7 +52,7 @@
     */
    public WeldKernelControllerContext(BeanInfo info, BeanMetaData metaData, Object target, BeanManager manager)
    {
-      super(info, metaData, WeldControllerContextActions.getInstance(), target);
+      super(info, metaData, WeldKernelControllerContextActions.getInstance(), target);
       if (manager == null)
          throw new IllegalArgumentException("Null manager");
       this.manager = manager;
@@ -80,7 +80,7 @@
     * 
     * @param webBeansInjector the web beans injector 
     */
-   void setWeldInjector(WeldInjector<?> webBeansInjector)
+   public void setWeldInjector(WeldInjector<?> webBeansInjector)
    {
       this.webBeansInjector = webBeansInjector;
    }
@@ -90,28 +90,8 @@
     * 
     * @return the web beans injector 
     */
-   WeldInjector<?> getWeldInjector()
+   public WeldInjector<?> getWeldInjector()
    {
       return webBeansInjector;
    }
-
-   /**
-    * Gets the annotated type. This is only set if the bean is a candidate for lookup from web beans
-    * 
-    * @return the type, or null if not a candidate for lookup from web beans
-    */
-   public AnnotatedType<?> getAnnotatedType()
-   {
-      return type;
-   }
-
-   /**
-    * Sets the annotated type. This should only be set if the bean is a candidate for lookup from web beans
-    * 
-    * @param type the type 
-    */
-   public void setAnnotatedType(AnnotatedType<?> type)
-   {
-      this.type = type;
-   }
 }

Added: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContextActions.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContextActions.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldKernelControllerContextActions.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,68 @@
+/*
+* 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.kernel.weld.plugins.dependency;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.dependency.plugins.action.ControllerContextAction;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.plugins.dependency.CreateDestroyLifecycleAction;
+import org.jboss.kernel.plugins.dependency.KernelControllerContextActions;
+import org.jboss.kernel.plugins.dependency.PreInstallAction;
+import org.jboss.kernel.plugins.dependency.StartStopLifecycleAction;
+
+/**
+ * ControllerContextActions for contexts that need to interact with web beans
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class WeldKernelControllerContextActions extends KernelControllerContextActions
+{
+   private static final WeldKernelControllerContextActions INSTANCE;
+   static
+   {
+      Map<ControllerState, ControllerContextAction> actions = new HashMap<ControllerState, ControllerContextAction>();
+      
+      actions.put(ControllerState.PRE_INSTALL, new PreInstallAction());
+      actions.put(ControllerState.DESCRIBED, new WeldDescribeAction());
+      actions.put(ControllerState.INSTANTIATED, new WeldInstantiateAction());
+      actions.put(WeldPostConstructAction.STATE, new WeldPostConstructAction());
+      actions.put(ControllerState.CONFIGURED, new WeldConfigureAction());
+      actions.put(ControllerState.CREATE, new CreateDestroyLifecycleAction());
+      actions.put(WeldPreDestroyAction.STATE, new WeldPreDestroyAction());
+      actions.put(ControllerState.START, new StartStopLifecycleAction());
+      actions.put(ControllerState.INSTALLED, new WeldInstallAction());
+      INSTANCE = new WeldKernelControllerContextActions(actions);
+   }
+   
+   protected WeldKernelControllerContextActions(Map<ControllerState, ControllerContextAction> actions)
+   {
+      super(actions);
+   }
+   
+   public static WeldKernelControllerContextActions getInstance()
+   {
+      return INSTANCE;
+   }
+}

Deleted: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldRegisterWebBeanAction.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldRegisterWebBeanAction.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/dependency/WeldRegisterWebBeanAction.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -1,64 +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.kernel.weld.plugins.dependency;
-
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.kernel.plugins.dependency.KernelControllerContextAction;
-import org.jboss.kernel.spi.dependency.InstantiateKernelControllerContextAware;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
-import org.jboss.kernel.weld.plugins.weld.WeldFromMcRegistry;
-
-/**
- * ControllerContextAction to register an MC bean as a candidate for lookup from web beans.
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class WeldRegisterWebBeanAction extends KernelControllerContextAction
-{
-   final static ControllerState STATE = new ControllerState("REGISTER_WEB_BEAN");
-   
-   @Override
-   protected void installActionInternal(KernelControllerContext context) throws Throwable
-   {
-      if (context instanceof WeldKernelControllerContext == false)
-         throw new IllegalArgumentException("context is not a WabBeansKernelControllerContext");
-
-      WeldFromMcRegistry.registerBean((WeldKernelControllerContext)context);
-   }
-
-   @Override
-   protected void uninstallActionInternal(KernelControllerContext context)
-   {
-      if (context instanceof WeldKernelControllerContext == false)
-         throw new IllegalArgumentException("context is not a WabBeansKernelControllerContext");
-
-      WeldFromMcRegistry.unregisterBean((WeldKernelControllerContext)context);
-   }
-
-   protected Class<? extends KernelControllerContextAware> getActionAwareInterface()
-   {
-      return InstantiateKernelControllerContextAware.class;
-   }
-   
-}

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/AnnotatedTypeWrapper.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/AnnotatedTypeWrapper.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/AnnotatedTypeWrapper.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -24,7 +24,8 @@
 import javax.enterprise.inject.spi.AnnotatedType;
 
 /**
- * The annotated type implementations in Weld do not i
+ * The annotated type implementations in Weld do not implement equals and hashCode,
+ * so wrap them so they can be used as keys in a map
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceFieldProducer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceFieldProducer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceFieldProducer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -27,7 +27,7 @@
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.spi.Producer;
 
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * 
@@ -38,7 +38,7 @@
 {
    private final Field field;
    
-   ExisitingInstanceFieldProducer(Field field, Producer<T> delegate, WeldKernelControllerContext context)
+   ExisitingInstanceFieldProducer(Field field, Producer<T> delegate, KernelControllerContext context)
    {
       super(delegate, context);
       this.field = field;

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceMethodProducer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceMethodProducer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExisitingInstanceMethodProducer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -27,7 +27,7 @@
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.spi.Producer;
 
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * 
@@ -38,7 +38,7 @@
 {
    private final Method method;
    
-   ExisitingInstanceMethodProducer(Method method, Producer<T> delegate, WeldKernelControllerContext context)
+   ExisitingInstanceMethodProducer(Method method, Producer<T> delegate, KernelControllerContext context)
    {
       super(delegate, context);
       this.method = method;

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceHolder.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceHolder.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceHolder.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -25,7 +25,7 @@
 
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.ControllerStateModel;
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * 
@@ -34,9 +34,9 @@
  */
 public abstract class ExistingInstanceHolder<T>
 {
-   final WeldKernelControllerContext context;
+   final KernelControllerContext context;
 
-   public ExistingInstanceHolder(WeldKernelControllerContext context)
+   public ExistingInstanceHolder(KernelControllerContext context)
    {
       if (context == null)
          throw new IllegalArgumentException("Null context");
@@ -54,13 +54,15 @@
          ControllerStateModel states = context.getController().getStates();
          if (states.isBeforeState(context.getState(), ControllerState.INSTALLED))
          {
-            throw new ResolutionException(context + " for " + context.getAnnotatedType() + " has not reached the INSTALLED state");
+            throw new ResolutionException(context + " has not reached the INSTALLED state");
          }
       }
       
       T target = (T)context.getTarget();
       if (target == null)
-         throw new ResolutionException("Context for " + context.getAnnotatedType() + " has an empty instance");
+      {
+         throw new ResolutionException(context + " has an empty instance");
+      }
       
       return target;
    }

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceInjectionTarget.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceInjectionTarget.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceInjectionTarget.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -27,7 +27,7 @@
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
 
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * 
@@ -38,7 +38,7 @@
 {
    final InjectionTarget<T> injectionTarget;
    
-   ExistingInstanceInjectionTarget(InjectionTarget<T> injectionTarget, WeldKernelControllerContext context)
+   ExistingInstanceInjectionTarget(InjectionTarget<T> injectionTarget, KernelControllerContext context)
    {
       super(context);
       

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceProducer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceProducer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/ExistingInstanceProducer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -26,7 +26,7 @@
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.Producer;
 
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * 
@@ -37,7 +37,7 @@
 {
    private final Producer<T> delegate;
    
-   ExistingInstanceProducer(Producer<T> delegate, WeldKernelControllerContext context)
+   ExistingInstanceProducer(Producer<T> delegate, KernelControllerContext context)
    {
       super(context);
       this.delegate = delegate;

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/McBeanRegistryObserver.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/McBeanRegistryObserver.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/McBeanRegistryObserver.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -29,6 +29,7 @@
 import javax.enterprise.inject.InjectionException;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.InjectionTarget;
@@ -36,7 +37,7 @@
 import javax.enterprise.inject.spi.ProcessProducer;
 import javax.enterprise.inject.spi.Producer;
 
-import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.weld.plugins.dependency.UnsatisfiedDependencyRegistry;
 
 /**
@@ -47,9 +48,10 @@
  */
 public class McBeanRegistryObserver implements Extension
 {
-   public void addType(@Observes BeforeBeanDiscovery event)
+   public void addType(@Observes BeforeBeanDiscovery event, BeanManager beanManager)
    {
-      for (AnnotatedTypeWrapper typeWrapper : WeldFromMcRegistry.getTypes())
+      WeldFromMcRegistry.getInstance().initializeTypes(beanManager);
+      for (AnnotatedTypeWrapper typeWrapper : WeldFromMcRegistry.getInstance().getTypes())
       {   
          event.addAnnotatedType(typeWrapper.getAnnotatedType());
       }
@@ -58,7 +60,7 @@
    public void processInjectionTarget(@Observes ProcessInjectionTarget<?> event)
    {
       AnnotatedType<?> type = event.getAnnotatedType();
-      WeldKernelControllerContext context = WeldFromMcRegistry.getContext(type);
+      KernelControllerContext context = WeldFromMcRegistry.getInstance().getContext(type);
       if (context != null)
       {
          InjectionTarget<?> target = event.getInjectionTarget();
@@ -71,7 +73,7 @@
    public void processProducer(@Observes ProcessProducer<?, ?> event)
    {
       AnnotatedType<?> type = event.getAnnotatedMember().getDeclaringType();
-      WeldKernelControllerContext context = WeldFromMcRegistry.getContext(type);
+      KernelControllerContext context = WeldFromMcRegistry.getInstance().getContext(type);
       if (context != null)
       {
          Producer<?> producer = event.getProducer();

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/WeldFromMcRegistry.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/WeldFromMcRegistry.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/weld/WeldFromMcRegistry.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,70 +23,146 @@
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
 
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
 import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.weld.spi.annotated.MDRAnnotatedTypeFactory;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.util.collection.ConcurrentSet;
 
 /**
- * Registry of MC beans that should be accessible from web beans
+ * Singleton registry of MC beans that should be accessible from web beans
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
 public class WeldFromMcRegistry
 {
-   //TODO need some way to register by controller and to determine which controller a beanmanager should look in
+   private final static WeldFromMcRegistry INSTANCE = new WeldFromMcRegistry();
    
    /** 
     * Map of context and annotated type wrapper
     */
-   private static final Map<WeldKernelControllerContext, AnnotatedTypeWrapper> typesByContext = new ConcurrentHashMap<WeldKernelControllerContext, AnnotatedTypeWrapper>();
+   private final Map<KernelControllerContext, AnnotatedTypeWrapper> typesByContext = new ConcurrentHashMap<KernelControllerContext, AnnotatedTypeWrapper>();
    
+   /**
+    * Map of contexts that have not yet been initialized with a type
+    */
+   private final Set<KernelControllerContext> contextsWithNoType = new ConcurrentSet<KernelControllerContext>();
+   
    /** 
     * Map of annotated type wrapper and context
     */
-   private static final Map<AnnotatedTypeWrapper, WeldKernelControllerContext> contextsByType = new ConcurrentHashMap<AnnotatedTypeWrapper, WeldKernelControllerContext>();  
+   private final Map<AnnotatedTypeWrapper, KernelControllerContext> contextsByType = new ConcurrentHashMap<AnnotatedTypeWrapper, KernelControllerContext>();  
    
    /**
-    * Check if a context should be accessible from web beans, and if so register it as a web bean.
+    * Get the singleton
+    * @return the singleton instance
+    */
+   public static WeldFromMcRegistry getInstance()
+   {
+      return INSTANCE;
+   }
+   
+   /**
+    * Check if a context has the @WeldEnabled annotation, and if so register it as a web bean.
     * 
     * @param context the context to register in web beans
     */
-   public static void registerBean(WeldKernelControllerContext context)
+   public void registerBean(KernelControllerContext context)
    {
-      AnnotatedType<?> type = context.getAnnotatedType();
+      if (context instanceof WeldKernelControllerContext)
+         registerBean(context, ((WeldKernelControllerContext)context).getWeldInjector().getType());
+      else
+         registerBean(context, null);
+   }
+   
+   /**
+    * Check if a context has the @WeldEnabled annotation, and if so register it as a web bean.
+    * 
+    * @param context the context to register in web beans
+    * @param type the annotated type of the context's bean
+    */
+   private void registerBean(KernelControllerContext context, AnnotatedType<?> type)
+   {
+      if (!hasWeldEnabledAnnotation(context, type))
+         return;
+
       if (type != null)
       {
          AnnotatedTypeWrapper typeWrapper = new AnnotatedTypeWrapper(type);
          typesByContext.put(context, typeWrapper);
          contextsByType.put(typeWrapper, context);
       }
+      else
+      {
+         contextsWithNoType.add(context);
+      }
    }
    
    /**
+    * Check if the bean has the WeldEnabled annotation
+    * 
+    * @param context the kernel controller context
+    * @param type the annotated type
+    * @return true if bean has web beans annotations
+    */
+   private boolean hasWeldEnabledAnnotation(KernelControllerContext context, AnnotatedType<?> type)
+   {
+      if (type != null)
+         return type.getAnnotation(WeldEnabled.class) != null;
+      
+      KernelController controller = (KernelController)context.getController();
+      Kernel kernel = controller.getKernel();
+      KernelMetaDataRepository repository = kernel.getMetaDataRepository();
+      MetaData metaData = repository.getMetaData(context);
+      return metaData.isAnnotationPresent(WeldEnabled.class);
+   }
+   
+   /**
     * Unregister an mc context as a web bean
     * 
     * @param context the context to register in web beans
     */
-   public static void unregisterBean(WeldKernelControllerContext context)
+   public void unregisterBean(KernelControllerContext context)
    {
       AnnotatedTypeWrapper typeWrapper = typesByContext.remove(context);
       if (typeWrapper != null)
          contextsByType.remove(typeWrapper);
    }
    
+   public void initializeTypes(BeanManager beanManager)
+   {
+      for (Iterator<KernelControllerContext> it = contextsWithNoType.iterator() ; it.hasNext() ; )
+      {
+         KernelControllerContext ctx = it.next();
+         it.remove();
+         AnnotatedType<?> type = beanManager.createAnnotatedType(ctx.getBeanInfo().getClassInfo().getType());
+         type = MDRAnnotatedTypeFactory.getInstance().decorateAnnotatedType(type, ctx);
+         registerBean(ctx, type);
+      }
+   }
+   
    /**
     * Get a copy of all the MC beans that should be registered as web beans
     */
-   public static Collection<AnnotatedTypeWrapper> getTypes()
+   public Collection<AnnotatedTypeWrapper> getTypes()
    {
       return Collections.unmodifiableCollection(typesByContext.values());
    }
    
-   public static WeldKernelControllerContext getContext(AnnotatedType<?> type)
+   public KernelControllerContext getContext(AnnotatedType<?> type)
    {
       return contextsByType.get(new AnnotatedTypeWrapper(type));
    }

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/spi/annotated/MDRAnnotatedTypeFactory.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/spi/annotated/MDRAnnotatedTypeFactory.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/spi/annotated/MDRAnnotatedTypeFactory.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,6 +23,7 @@
 
 import javax.enterprise.inject.spi.AnnotatedType;
 
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.weld.plugins.annotated.MDRAnnotatedTypeFactoryImpl;
 import org.jboss.metadata.spi.MetaData;
 
@@ -50,8 +51,17 @@
     * Decorate an annotated type to understand MDR metadata
     * 
     * @param delegate the type to decorate
-    * @param metaData the MDR metadata for the bean
+    * @param metaData the MDR metadata for the bean for which we want to decorate the type
     * @return the type decorated with MDR metadata
     */
-   public abstract <T> AnnotatedType<T> getAnnotatedType(AnnotatedType<T> delegate, MetaData metaData);
+   public abstract <T> AnnotatedType<T> decorateAnnotatedType(AnnotatedType<T> delegate, MetaData metaData);
+
+   /**
+    * Decorate an annotated type to understand MDR metadata
+    * 
+    * @param delegate the type to decorate
+    * @param context the Kernel controller context which contains the metadata
+    * @return the type decorated with MDR metadata
+    */
+   public abstract <T> AnnotatedType<T> decorateAnnotatedType(AnnotatedType<T> delegate, KernelControllerContext context);
 }

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/AbstractWeldMcTest.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/AbstractWeldMcTest.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/AbstractWeldMcTest.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -33,7 +33,10 @@
 import org.jboss.beans.info.spi.BeanAccessMode;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
 import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+import org.jboss.kernel.weld.plugins.weld.WeldFromMcRegistry;
 import org.jboss.test.AbstractTestDelegate;
 import org.jboss.test.kernel.junit.MicrocontainerTest;
 
@@ -154,18 +157,35 @@
    }
    
    /**
-    * Create a WeldKernelControllerContext and deploy it into the microcontainer
+    * Create a WeldKernelControllerContext and deploy it into the microcontainer.
+    * This will also update the WeldFromMcRegistry as required, something that
+    * will be done by the deployers when running in AS
     * 
     * @param beanMetaData the bean metadata to deploy
     * @return the WeldKernelControllerContext
     * @throws Exception if an error happened during deployment
     */
-   protected WeldKernelControllerContext deploy(BeanMetaData beanMetaData) throws Exception
+   protected WeldKernelControllerContext deployContextAndRegister(BeanMetaData beanMetaData) throws Exception
    {
-      return getDelegate().deploy(beanMetaData);
+      WeldKernelControllerContext context = getDelegate().deploy(beanMetaData);
+      WeldFromMcRegistry.getInstance().registerBean(context);
+      WeldFromMcRegistry.getInstance().initializeTypes(getCurrentManager());
+      return context;
    }
    
    /**
+    * Undeploy a bean and remove it from the WeldFromMcRegistry. This will
+    * be done by the deployers when running in AS
+    *
+    * @param context the context
+    */
+   protected void undeployAndUnregister(KernelControllerContext context)
+   {
+      WeldFromMcRegistry.getInstance().unregisterBean(context);
+      super.undeploy(context);
+   }
+
+   /**
     * Check that a collection has the expected size
     * 
     * @param expected the expected size
@@ -199,6 +219,24 @@
       return builder.getBeanMetaData();
    }
 
+   /**
+    * Creates a bean metadata with the @WeldEnabled annotation
+    * 
+    * @param name the name of the bean
+    * @param clazz the class of the bean
+    */
+   protected BeanMetaData createWeldEnabledBeanMetaData(String name, Class<?> clazz)
+   {
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(createBeanMetaData(name, clazz));
+      builder.addAnnotation("@" + WeldEnabled.class.getName());
+      return builder.getBeanMetaData();
+   }
+   
+   /**
+    * Gets a weld instance that has been
+    * @param clazz the class we want to get an instance of
+    * @return the instance 
+    */
    protected <T> T getWeldBean(Class<T> clazz) throws Exception
    {
       Set<Bean<?>> beans = getCurrentManager().getBeans(clazz);
@@ -208,5 +246,6 @@
       
       return bean.create(createCtx);
    }
-
+   
+   
 }

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -434,7 +434,7 @@
    private <T> AnnotatedType<T> createAnnotatedType(Class<T> clazz, MetaData metadata) throws Exception
    {
       AnnotatedType<T> type = getCurrentManager().createAnnotatedType(clazz);
-      return MDRAnnotatedTypeFactory.getInstance().getAnnotatedType(type, metadata);
+      return MDRAnnotatedTypeFactory.getInstance().decorateAnnotatedType(type, metadata);
    }
    
    private MetaData createMetaDataWithAnnotations(Class<?> clazz) throws Exception
@@ -520,7 +520,7 @@
       component.addAnnotation(createTest2());
       loader.addComponentMetaDataRetrieval(new FieldSignature(parent), component);
       
-      return MDRAnnotatedTypeFactory.getInstance().getAnnotatedType(type, new MetaDataRetrievalToMetaDataBridge(loader));
+      return MDRAnnotatedTypeFactory.getInstance().decorateAnnotatedType(type, new MetaDataRetrievalToMetaDataBridge(loader));
    }
    
    

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/bidirectional/test/BidirectionalWeldAndMcTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/bidirectional/test/BidirectionalWeldAndMcTestCase.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/bidirectional/test/BidirectionalWeldAndMcTestCase.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -52,8 +52,8 @@
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, Middle.class);
       
-      WeldKernelControllerContext firstContext = deploy(createBeanMetaData("First", First.class));
-      WeldKernelControllerContext lastContext = deploy(createBeanMetaData("Last", Last.class));
+      WeldKernelControllerContext firstContext = deployContextAndRegister(createWeldEnabledBeanMetaData("First", First.class));
+      WeldKernelControllerContext lastContext = deployContextAndRegister(createWeldEnabledBeanMetaData("Last", Last.class));
       try
       {
          deployInitializedWeld();
@@ -70,8 +70,9 @@
       finally
       {
          undeployWeld();
-         undeploy(firstContext);
-         undeploy(lastContext);
+         undeployAndUnregister(firstContext);
+         undeployAndUnregister(lastContext);
+         
       }
    }
    
@@ -79,7 +80,7 @@
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, First.class, Last.class);
       
-      WeldKernelControllerContext middleContext = deploy(createBeanMetaData("Middle", Middle.class));
+      WeldKernelControllerContext middleContext = deployContextAndRegister(createWeldEnabledBeanMetaData("Middle", Middle.class));
       try
       {
          deployInitializedWeld();
@@ -94,7 +95,7 @@
       finally
       {
          undeployWeld();
-         undeploy(middleContext);
+         undeployAndUnregister(middleContext);
       }
    }
 }

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/BeanWithSimpleWeldDependency.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/BeanWithSimpleWeldDependency.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/BeanWithSimpleWeldDependency.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,6 +23,7 @@
 
 import javax.inject.Inject;
 
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
 import org.jboss.test.kernel.weld.mctowb.support.wb.Simple;
 
 /**
@@ -30,6 +31,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
+ at WeldEnabled
 public class BeanWithSimpleWeldDependency
 {
    @Inject

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/LifecycleBean.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/LifecycleBean.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/LifecycleBean.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -25,12 +25,15 @@
 import javax.annotation.PreDestroy;
 import javax.enterprise.inject.Default;
 
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
 @Default
+ at WeldEnabled
 public class LifecycleBean
 {
    public static int postConstruct;

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/PlainBean.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/PlainBean.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/PlainBean.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,32 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mc;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class PlainBean
+{
+
+}

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingBean.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingBean.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingBean.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -21,12 +21,15 @@
 */ 
 package org.jboss.test.kernel.weld.mctowb.support.mc;
 
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
 @Thing
+ at WeldEnabled
 public class ThingBean
 {
 

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingFieldProducer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingFieldProducer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingFieldProducer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,11 +23,14 @@
 
 import javax.enterprise.inject.Produces;
 
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
+ at WeldEnabled
 public class ThingFieldProducer
 {
    @Produces @Thing

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingMethodProducer.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingMethodProducer.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mc/ThingMethodProducer.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -23,11 +23,14 @@
 
 import javax.enterprise.inject.Produces;
 
+import org.jboss.kernel.weld.metadata.api.annotations.WeldEnabled;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
+ at WeldEnabled
 public class ThingMethodProducer
 {
    ThingBean thing = new ThingBean();

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,183 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mock;
+
+import java.util.Set;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.ControllerStateModel;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.event.KernelEvent;
+import org.jboss.kernel.spi.event.KernelEventFilter;
+import org.jboss.kernel.spi.event.KernelEventListener;
+import org.jboss.util.JBossObject;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockController extends JBossObject implements KernelController
+{
+
+   public void addAlias(Object alias, Object original) throws Throwable
+   {
+   }
+
+   public void addState(ControllerState state, ControllerState before)
+   {
+   }
+
+   public void change(ControllerContext context, ControllerState state) throws Throwable
+   {
+   }
+
+   public void enableOnDemand(ControllerContext context) throws Throwable
+   {
+   }
+
+   public ControllerContext getContext(Object name, ControllerState state)
+   {
+      return null;
+   }
+
+   public Set<ControllerContext> getContextsByState(ControllerState state)
+   {
+      return null;
+   }
+
+   public ControllerContext getInstalledContext(Object name)
+   {
+      return null;
+   }
+
+   public Set<ControllerContext> getNotInstalled()
+   {
+      return null;
+   }
+
+   public ControllerStateModel getStates()
+   {
+      return null;
+   }
+
+   public void install(ControllerContext context) throws Throwable
+   {
+   }
+
+   public boolean isShutdown()
+   {
+      return false;
+   }
+
+   public void removeAlias(Object alias)
+   {
+   }
+
+   public void shutdown()
+   {
+   }
+
+   public ControllerContext uninstall(Object name)
+   {
+      return null;
+   }
+
+   public String toShortString()
+   {
+      return null;
+   }
+
+   public void toShortString(JBossStringBuilder buffer)
+   {
+   }
+
+   public void addInstantiatedContext(KernelControllerContext context)
+   {
+   }
+
+   public void addSupplies(KernelControllerContext context)
+   {
+   }
+
+   public KernelControllerContext getContextByClass(Class<?> clazz)
+   {
+      return null;
+   }
+
+   public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
+   {
+      return null;
+   }
+
+   public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
+   {
+      return null;
+   }
+
+   public KernelControllerContext install(BeanMetaData metaData) throws Throwable
+   {
+      return null;
+   }
+
+   public KernelControllerContext install(BeanMetaData metaData, Object target) throws Throwable
+   {
+      return null;
+   }
+
+   public void removeInstantiatedContext(KernelControllerContext context)
+   {
+   }
+
+   public void removeSupplies(KernelControllerContext context)
+   {
+   }
+
+   public Kernel getKernel()
+   {
+      return new MockKernel();
+   }
+
+   public void setKernel(Kernel kernel) throws Throwable
+   {
+   }
+
+   public void fireKernelEvent(KernelEvent event)
+   {
+   }
+
+   public void registerListener(KernelEventListener listener, KernelEventFilter filter, Object handback)
+         throws Throwable
+   {
+   }
+
+   public void unregisterListener(KernelEventListener listener, KernelEventFilter filter, Object handback)
+         throws Throwable
+   {
+   }
+
+}

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernel.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernel.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernel.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,41 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mock;
+
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockKernel extends Kernel
+{
+
+   @Override
+   public KernelMetaDataRepository getMetaDataRepository()
+   {
+      return new MockKernelMetaDataRepository();
+   }
+
+}

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernelMetaDataRepository.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernelMetaDataRepository.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockKernelMetaDataRepository.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,101 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mock;
+
+import java.util.List;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.event.KernelEvent;
+import org.jboss.kernel.spi.event.KernelEventFilter;
+import org.jboss.kernel.spi.event.KernelEventListener;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockKernelMetaDataRepository implements KernelMetaDataRepository
+{
+
+   public void addMetaData(ControllerContext context)
+   {
+   }
+
+   public MetaDataRetrieval createMetaDataRetrieval(ControllerContext context, List<MetaDataRetrieval> retrievals)
+   {
+      return null;
+   }
+
+   public ScopeKey getFullScope(ControllerContext context)
+   {
+      return null;
+   }
+
+   public MetaData getMetaData(ControllerContext context)
+   {
+      return null;
+   }
+
+   public MutableMetaDataRepository getMetaDataRepository()
+   {
+      return null;
+   }
+
+   public ScopeKey getMutableScope(ControllerContext context)
+   {
+      return null;
+   }
+
+   public void removeMetaData(ControllerContext context)
+   {
+   }
+
+   public Kernel getKernel()
+   {
+      return null;
+   }
+
+   public void setKernel(Kernel kernel) throws Throwable
+   {
+   }
+
+   public void fireKernelEvent(KernelEvent event)
+   {
+   }
+
+   public void registerListener(KernelEventListener listener, KernelEventFilter filter, Object handback)
+         throws Throwable
+   {
+   }
+
+   public void unregisterListener(KernelEventListener listener, KernelEventFilter filter, Object handback)
+         throws Throwable
+   {
+   }
+
+}

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldDescribeAction.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldDescribeAction.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldDescribeAction.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,51 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mock;
+
+import org.jboss.kernel.weld.plugins.dependency.WeldDescribeAction;
+import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockWeldDescribeAction extends WeldDescribeAction
+{
+   Class<?> clazz;
+   
+   public MockWeldDescribeAction(Class<?> clazz)
+   {
+      this.clazz = clazz;
+   }
+   
+   @Override
+   public void applyWeldAnnotations(WeldKernelControllerContext context)
+   {
+      super.applyWeldAnnotations(context);
+   }
+
+   protected Class<?> getClazz(WeldKernelControllerContext context)
+   {
+      return clazz;
+   }
+}

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldKernelControllerContext.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldKernelControllerContext.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockWeldKernelControllerContext.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -0,0 +1,49 @@
+/*
+* 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.test.kernel.weld.mctowb.support.mock;
+
+import javax.enterprise.inject.spi.BeanManager;
+
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockWeldKernelControllerContext extends WeldKernelControllerContext
+{
+   public MockWeldKernelControllerContext(BeanInfo info, BeanMetaData metaData, Object target, BeanManager manager)
+   {
+      super(info, metaData, target, manager);
+   }
+
+   @Override
+   public Controller getController()
+   {
+      return new MockController();
+   }
+
+}

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/validateobserver/TestObserver.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/validateobserver/TestObserver.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/validateobserver/TestObserver.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -22,6 +22,7 @@
 package org.jboss.test.kernel.weld.mctowb.support.validateobserver;
 
 import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.ProcessInjectionTarget;
@@ -38,9 +39,9 @@
    public static boolean invoked;
    
    @Override
-   public void addType(@Observes BeforeBeanDiscovery event)
+   public void addType(@Observes BeforeBeanDiscovery event, BeanManager beanManager)
    {
-      super.addType(event);
+      super.addType(event, beanManager);
       invoked = true;
    }
 

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/test/InjectMcBeansInWeldTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/test/InjectMcBeansInWeldTestCase.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/test/InjectMcBeansInWeldTestCase.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -29,6 +29,7 @@
 import junit.framework.TestSuite;
 
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.weld.plugins.dependency.WeldKernelControllerContext;
 import org.jboss.kernel.weld.plugins.weld.AnnotatedTypeWrapper;
 import org.jboss.kernel.weld.plugins.weld.McBeanRegistryObserver;
@@ -36,9 +37,12 @@
 import org.jboss.test.kernel.weld.AbstractWeldMcTest;
 import org.jboss.test.kernel.weld.mctowb.support.mc.BeanWithSimpleWeldDependency;
 import org.jboss.test.kernel.weld.mctowb.support.mc.LifecycleBean;
+import org.jboss.test.kernel.weld.mctowb.support.mc.PlainBean;
 import org.jboss.test.kernel.weld.mctowb.support.mc.ThingBean;
 import org.jboss.test.kernel.weld.mctowb.support.mc.ThingFieldProducer;
 import org.jboss.test.kernel.weld.mctowb.support.mc.ThingMethodProducer;
+import org.jboss.test.kernel.weld.mctowb.support.mock.MockWeldDescribeAction;
+import org.jboss.test.kernel.weld.mctowb.support.mock.MockWeldKernelControllerContext;
 import org.jboss.test.kernel.weld.mctowb.support.validateobserver.TestObserver;
 import org.jboss.test.kernel.weld.mctowb.support.wb.DependsOnBeanWithSimpleWeldDependency;
 import org.jboss.test.kernel.weld.mctowb.support.wb.LifecycleBeanConsumerA;
@@ -100,28 +104,28 @@
    public void testWeldFromMcRegistry() throws Exception
    {
       initializeWeld();
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingBean.class));
       try
       {
-         Collection<AnnotatedTypeWrapper> types = WeldFromMcRegistry.getTypes();
+         Collection<AnnotatedTypeWrapper> types = WeldFromMcRegistry.getInstance().getTypes();
          assertSize(1, types);
          
          AnnotatedType<ThingBean> type = getCurrentManager().createAnnotatedType(ThingBean.class);
-         WeldKernelControllerContext found = WeldFromMcRegistry.getContext(type);
+         KernelControllerContext found = WeldFromMcRegistry.getInstance().getContext(type);
          assertNotNull(found);
          assertSame(context, found);
       }
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testInjectMcBeanIntoField() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingField.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingBean.class));
       try
       {
          ThingBean thing = assertBean("thing", ThingBean.class);
@@ -133,7 +137,7 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
 
@@ -141,7 +145,7 @@
    public void testInjectMcBeanIntoConstructor() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingConstructor.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingBean.class));
       try
       {
          ThingBean thing = assertBean("thing", ThingBean.class);
@@ -153,14 +157,14 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testInjectMcMethodProducedBeanIntoField() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingField.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingMethodProducer.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingMethodProducer.class));
       try
       {
          ThingMethodProducer thing = assertBean("thing", ThingMethodProducer.class);
@@ -172,14 +176,14 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testInjectMcMethodProducedBeanIntoConstructor() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingConstructor.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingMethodProducer.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingMethodProducer.class));
       try
       {
          ThingMethodProducer thing = assertBean("thing", ThingMethodProducer.class);
@@ -191,14 +195,14 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
 
    public void testInjectMcFieldProducedBeanIntoField() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingField.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingFieldProducer.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingFieldProducer.class));
       try
       {
          ThingFieldProducer thing = assertBean("thing", ThingFieldProducer.class);
@@ -210,14 +214,14 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testInjectMcFieldProducedBeanIntoConstructor() throws Exception
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, ThingConstructor.class);
-      WeldKernelControllerContext context = deploy(createBeanMetaData("thing", ThingFieldProducer.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("thing", ThingFieldProducer.class));
       try
       {
          ThingFieldProducer thing = assertBean("thing", ThingFieldProducer.class);
@@ -229,7 +233,7 @@
       finally
       {
          undeployWeld();
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
 
@@ -238,7 +242,7 @@
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, LifecycleBeanConsumerA.class, LifecycleBeanConsumerB.class);
       LifecycleBean.postConstruct = 0;
       LifecycleBean.preDestroy = 0;
-      WeldKernelControllerContext context = deploy(createBeanMetaData("bean", LifecycleBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("bean", LifecycleBean.class));
       try
       {
          LifecycleBean bean = assertBean("bean", LifecycleBean.class);
@@ -260,22 +264,24 @@
          undeployWeld();
          assertEquals(0, LifecycleBean.preDestroy);
          assertEquals(1, LifecycleBean.postConstruct);
-         undeploy(context);
+         undeployAndUnregister(context);
          assertEquals(1, LifecycleBean.preDestroy);
          assertEquals(1, LifecycleBean.postConstruct);
       }
    }
    
-   public void testInjectionOnlyHappensOnceForExistingInstance() throws Exception
+   public void testInjectionOnlyHappensOnceForExistingInstance() throws Throwable
    {
       initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class, DependsOnBeanWithSimpleWeldDependency.class, Simple.class);
       //Add a context manually so that it seems that it is installed as far as weld is concerned
       BeanWithSimpleWeldDependency bean = new BeanWithSimpleWeldDependency();
       Simple simple = bean.getSimple();
-      WeldKernelControllerContext context = new WeldKernelControllerContext(null, createBeanMetaData("NotReallyDeployed :-)", BeanWithSimpleWeldDependency.class), bean, getCurrentManager());
+      MockWeldKernelControllerContext context = new MockWeldKernelControllerContext(null, createBeanMetaData("NotReallyDeployed :-)", BeanWithSimpleWeldDependency.class), bean, getCurrentManager());
+      new MockWeldDescribeAction(BeanWithSimpleWeldDependency.class).applyWeldAnnotations(context);
+
       context.setState(ControllerState.INSTALLED);
-      context.setAnnotatedType(getCurrentManager().createAnnotatedType(BeanWithSimpleWeldDependency.class));
-      WeldFromMcRegistry.registerBean(context);
+      
+      WeldFromMcRegistry.getInstance().registerBean(context);
       try
       {
          deployInitializedWeld();
@@ -289,8 +295,44 @@
       finally
       {
          undeployWeld();
-         WeldFromMcRegistry.unregisterBean(context);
+         WeldFromMcRegistry.getInstance().unregisterBean(context);
       }
    }
    
+   public void testMcEnabledViaMetaData() throws Exception
+   {
+      initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class);
+      WeldKernelControllerContext context = deployContextAndRegister(createWeldEnabledBeanMetaData("bean", PlainBean.class));
+      try
+      {
+         PlainBean plain = assertBean("bean", PlainBean.class);
+         deployInitializedWeld();
+         
+         PlainBean weldBean = getWeldBean(PlainBean.class);
+         assertEquals(plain, weldBean);
+      }
+      finally
+      {
+         undeployWeld();
+         undeployAndUnregister(context);
+      }
+   }
+   
+   
+   public void testNotMcEnabled() throws Exception
+   {
+      initializeWeld(this.getClass().getPackage(), McBeanRegistryObserver.class);
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("bean", PlainBean.class));
+      try
+      {
+         assertBean("bean", PlainBean.class);
+         deployInitializedWeld();
+         assertEmpty(getCurrentManager().getBeans(PlainBean.class));
+      }
+      finally
+      {
+         undeployWeld();
+         undeployAndUnregister(context);
+      }
+   }
 }

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/test/InjectWeldInMcBeansTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/test/InjectWeldInMcBeansTestCase.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/test/InjectWeldInMcBeansTestCase.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -164,7 +164,7 @@
    
    public void testInjectFromWeldToMcInitializer() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", McBeanInitializerMethod.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", McBeanInitializerMethod.class));
       McBeanInitializerMethod bean = null;
       try
       {
@@ -174,14 +174,14 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
       assertNull(bean.getBean());
    }
    
    public void testInjectFromWeldToMcField() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", McBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", McBean.class));
       McBean bean = null; 
       try
       {
@@ -192,7 +192,7 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
       assertNull(bean.getBean());
    }
@@ -216,7 +216,7 @@
    
    public void testInjectFromWeldToMcMcConstructorNoParams() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", McBeanMcConstructor.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", McBeanMcConstructor.class));
       McBeanMcConstructor bean = null;
       try
       {
@@ -226,18 +226,18 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
       assertNull(bean.getBean());
    }
    
    public void testInjectFromWeldToMcMcConstructorWithParams() throws Exception
    {
-      WeldKernelControllerContext contextSimple = deploy(createBeanMetaData("Simple", Simple.class));
+      WeldKernelControllerContext contextSimple = deployContextAndRegister(createBeanMetaData("Simple", Simple.class));
       
       BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("McBean", McBeanMcConstructor.class.getName());
       builder.addConstructorParameter(Simple.class.getName(), builder.createInject("Simple"));
-      WeldKernelControllerContext  context = deploy(builder.getBeanMetaData());
+      WeldKernelControllerContext  context = deployContextAndRegister(builder.getBeanMetaData());
       
       
       try
@@ -251,14 +251,14 @@
       }
       finally
       {
-         undeploy(context);
-         undeploy(contextSimple);
+         undeployAndUnregister(context);
+         undeployAndUnregister(contextSimple);
       }
    }
    
    public void testConstructorMissingDependencies() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", MissingDependenciesConstructorBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", MissingDependenciesConstructorBean.class));
       
       try
       {
@@ -268,13 +268,13 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testFieldMissingDependencies() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", MissingDependenciesFieldBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", MissingDependenciesFieldBean.class));
       
       try
       {
@@ -284,13 +284,13 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testDependenciesNotDuplicated() throws Throwable
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", McBean.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", McBean.class));
       try
       {
          assertNotNull(context.getBeanMetaData().getDepends());
@@ -315,13 +315,13 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
    
    public void testPostConstructAndPreDestroy() throws Exception
    {
-      WeldKernelControllerContext context = deploy(createBeanMetaData("McBean", McBeanWithPostConstructAndPreDestroy.class));
+      WeldKernelControllerContext context = deployContextAndRegister(createBeanMetaData("McBean", McBeanWithPostConstructAndPreDestroy.class));
       McBeanWithPostConstructAndPreDestroy bean = null;
       try
       {
@@ -332,7 +332,7 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
       assertNull(bean.getBean());
       assertTrue(bean.isPreDestroyCalled());
@@ -360,7 +360,7 @@
       property.setAnnotations(propertyAnns);
       metaData.addProperty(property);
       
-      WeldKernelControllerContext context = deploy(metaData);
+      WeldKernelControllerContext context = deployContextAndRegister(metaData);
       McBeanAnnotationsFromMetaData bean = null;
       try
       {
@@ -371,7 +371,7 @@
       }
       finally
       {
-         undeploy(context);
+         undeployAndUnregister(context);
       }
    }
 

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/weldschema/test/WeldElementTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/weldschema/test/WeldElementTestCase.java	2009-11-09 15:29:20 UTC (rev 96177)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/weldschema/test/WeldElementTestCase.java	2009-11-09 16:05:02 UTC (rev 96178)
@@ -22,7 +22,6 @@
 package org.jboss.test.kernel.weld.weldschema.test;
 
 import java.net.URL;
-import java.util.List;
 import java.util.Set;
 
 import junit.framework.Test;




More information about the jboss-cvs-commits mailing list