You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/03/21 18:03:28 UTC

svn commit: r925827 - in /openwebbeans/trunk: webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-impl/s...

Author: gerdogdu
Date: Sun Mar 21 17:03:28 2010
New Revision: 925827

URL: http://svn.apache.org/viewvc?rev=925827&view=rev
Log:
[OWB-333] InjectionTarget and Producer Handling

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java   (with props)
Modified:
    openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InjectedTargetBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/DependentContext.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessProducerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
    openwebbeans/trunk/webbeans-tck/webprofile-suite.xml

Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java Sun Mar 21 17:03:28 2010
@@ -28,8 +28,8 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.ObserverMethod;
-import javax.enterprise.inject.spi.Producer;
 
+import org.apache.webbeans.component.InjectionTargetWrapper;
 import org.apache.webbeans.component.ProducerFieldBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.component.creation.BeanCreator.MetaDataProvider;
@@ -58,6 +58,7 @@ public final class EjbUtility
         
     public static <T> void fireEvents(Class<T> clazz, BaseEjbBean<T> ejbBean)
     {
+        BeanManagerImpl manager = BeanManagerImpl.getManager();
         AnnotatedType<T> annotatedType = AnnotatedElementFactory.newAnnotatedType(clazz);
         
         //Fires ProcessAnnotatedType
@@ -92,10 +93,8 @@ public final class EjbUtility
         //Fires ProcessInjectionTarget
         ProcessInjectionTargetImpl<T> processInjectionTargetEvent = WebBeansUtil.fireProcessInjectionTargetEvent(ejbBean);     
         WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessInjectionTarget event observers. Look at logs for further details");
-        if(processInjectionTargetEvent.isSet())
-        {
-            ejbBeanCreator.setInjectedTarget(processInjectionTargetEvent.getInjectionTarget());
-        }
+        //Put final InjectionTarget instance
+        manager.putInjectionTargetWrapper(ejbBean, new InjectionTargetWrapper(processInjectionTargetEvent.getInjectionTarget()));
         
         Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods = new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>(); 
         for(ProducerMethodBean<?> producerMethod : producerMethodBeans)
@@ -105,11 +104,7 @@ public final class EjbUtility
             WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessProducer event observers for ProducerMethods. Look at logs for further details");
 
             annotatedMethods.put(producerMethod, method);
-            
-            if(producerEvent.isProducerSet())
-            {
-                producerMethod.setProducer((Producer) ejbBeanCreator);
-            }
+            manager.putInjectionTargetWrapper(producerMethod, new InjectionTargetWrapper(producerEvent.getProducer()));
             
             producerEvent.setProducerSet(false);
         }
@@ -122,11 +117,8 @@ public final class EjbUtility
             WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessProducer event observers for ProducerFields. Look at logs for further details");
             
             annotatedFields.put(producerField, field);
-            
-            if(producerEvent.isProducerSet())
-            {
-                producerField.setProducer((Producer) ejbBeanCreator);
-            }
+            manager.putInjectionTargetWrapper(producerField, new InjectionTargetWrapper(producerEvent.getProducer()));
+
             
             producerEvent.setProducerSet(false);
         }
@@ -158,18 +150,12 @@ public final class EjbUtility
         WebBeansUtil.fireProcessObservableMethodBeanEvent(observerMethodsMap);
         WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessObserverMethod event observers for observer methods. Look at logs for further details");
 
-                
-        //Set InjectionTarget that is used by the container to inject dependencies!
-        if(ejbBeanCreator.isInjectionTargetSet())
-        {
-            ejbBean.setInjectionTarget(ejbBeanCreator);   
-        }
         
-        BeanManagerImpl.getManager().addBean(WebBeansUtil.createNewBean(ejbBean));                
-        BeanManagerImpl.getManager().addBean(ejbBean);
-        BeanManagerImpl.getManager().getBeans().addAll(producerMethodBeans);
+        manager.addBean(WebBeansUtil.createNewBean(ejbBean));                
+        manager.addBean(ejbBean);
+        manager.getBeans().addAll(producerMethodBeans);
         ejbBeanCreator.defineDisposalMethods();
-        BeanManagerImpl.getManager().getBeans().addAll(producerFieldBeans);
+        manager.getBeans().addAll(producerFieldBeans);
     }
     
     private static void checkProducerMethods(Set<ProducerMethodBean<?>> producerMethodBeans, BaseEjbBean<?> bean)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java Sun Mar 21 17:03:28 2010
@@ -28,7 +28,6 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.Decorator;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.InjectionTarget;
 
 import org.apache.webbeans.annotation.DefaultLiteral;
 import org.apache.webbeans.config.OWBLogConst;
@@ -81,9 +80,6 @@ public abstract class AbstractInjectionT
     /**Annotated type for bean*/
     private AnnotatedType<T> annotatedType;
     
-    /**Fully initialize, true as default*/
-    private boolean fullyInitialize = true;
-    
     /**
      * Holds the all of the interceptor related data, contains around-invoke,
      * post-construct and pre-destroy
@@ -96,15 +92,6 @@ public abstract class AbstractInjectionT
     /**Bean inherited meta data*/
     protected IBeanInheritedMetaData inheritedMetaData;    
     
-    
-    /**
-     * InjectionTargt instance. If this is not null, it is used for creating
-     * instance.
-     * 
-     * @see InjectionTarget
-     */
-    protected InjectionTarget<T> injectionTarget;
-    
     /**
      * Creates a new observer owner component.
      * 
@@ -123,24 +110,8 @@ public abstract class AbstractInjectionT
     {
         T instance = null;
 
-        //If injection target is set by Exntesion Observer, use it
-        if (isInjectionTargetSet())
-        {
-            //Create instance
-            instance = getInjectionTarget().produce(creationalContext);
-            
-            //Injection Operation
-            getInjectionTarget().inject(instance, creationalContext);
-            
-            //Call @PostConstrcut
-            postConstruct(instance, creationalContext);
-        }
-        //Default operations
-        else
-        {
-            //Default creation phases
-            instance = createDefaultInstance(creationalContext);
-        }
+        //Default creation phases
+        instance = createDefaultInstance(creationalContext);
 
         return instance;
     }
@@ -167,22 +138,12 @@ public abstract class AbstractInjectionT
             //Means that Dependent Bean has interceptor/decorator
             if(JavassistProxyFactory.isProxyInstance(result))
             {
+                afterConstructor(instance, creationalContext);
                 dependentProxy = result;
                 isDependentProxy = true;
             }
         }
-        
-        //If not fully initialize instance
-        if(!isFullyInitialize())
-        {
-            if(isDependentProxy)
-            {
-                return dependentProxy;                
-            }
-            
-            return instance;
-        }
-                
+                        
         //Push instance into creational context, this is necessary because
         //Context objects look for instance in the interceptors. If we do not
         //push instance into cretional context, circular exception occurs.
@@ -194,18 +155,6 @@ public abstract class AbstractInjectionT
             cc.push(instance);
         }
         
-        //After constructor
-        afterConstructor(instance, creationalContext);
-        
-        //Clear instance from creational context
-        if(creationalContext instanceof CreationalContextImpl)
-        {
-            CreationalContextImpl<?> cc = (CreationalContextImpl<?>)creationalContext;
-            cc.remove();
-            
-            cc.setProxyInstance(null);
-        }
-        
         //If dependent proxy
         if(isDependentProxy)
         {
@@ -281,14 +230,7 @@ public abstract class AbstractInjectionT
      */
     public void postConstruct(T instance, CreationalContext<T> cretionalContext)
     {
-        if (isInjectionTargetSet())
-        {
-            getInjectionTarget().postConstruct(instance);
-        }
-        else
-        {
-            postConstructDefault(instance, cretionalContext);
-        }
+        postConstructDefault(instance, cretionalContext);
     }
 
     /**
@@ -324,14 +266,7 @@ public abstract class AbstractInjectionT
      */
     public void preDestroy(T instance, CreationalContext<T> creationalContext)
     {
-        if (isInjectionTargetSet())
-        {
-            getInjectionTarget().preDestroy(instance);
-        }
-        else
-        {
-            preDestroyDefault(instance, creationalContext);
-        }
+        preDestroyDefault(instance, creationalContext);
     }
 
     /**
@@ -572,16 +507,6 @@ public abstract class AbstractInjectionT
     }
     
     /**
-     * Sets injection target instance.
-     * 
-     * @param injectionTarget injection target instance
-     */
-    public void setInjectionTarget(InjectionTarget<T> injectionTarget)
-    {
-        this.injectionTarget = injectionTarget;
-    }
-        
-    /**
      * {@inheritDoc}
      */
     public List<InterceptorData> getInterceptorStack()
@@ -612,26 +537,6 @@ public abstract class AbstractInjectionT
     
     
     /**
-     * Returns injection target.
-     * 
-     * @return injection target
-     */
-    public InjectionTarget<T> getInjectionTarget()
-    {
-        return this.injectionTarget;
-    }
-
-    /**
-     * Returns true if injection target instance set, false otherwise.
-     * 
-     * @return true if injection target instance set, false otherwise
-     */
-    protected boolean isInjectionTargetSet()
-    {
-        return this.injectionTarget != null ? true : false;
-    }
-
-    /**
      * Returns bean logger instance.
      * 
      * @return logger
@@ -647,11 +552,6 @@ public abstract class AbstractInjectionT
     @Override
     public Set<InjectionPoint> getInjectionPoints()
     {
-        if (isInjectionTargetSet())
-        {
-            return getInjectionTarget().getInjectionPoints();
-        }
-
         return super.getInjectionPoints();
     }
     
@@ -673,24 +573,6 @@ public abstract class AbstractInjectionT
         this.annotatedType = annotatedType;
     }
     
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setFullyInitialize(boolean initialize)
-    {
-        this.fullyInitialize = initialize;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean isFullyInitialize()
-    {
-        return this.fullyInitialize;
-    }
-
     /* (non-Javadoc)
      * @see org.apache.webbeans.component.AbstractOwbBean#validatePassivationDependencies()
      */

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Sun Mar 21 17:03:28 2010
@@ -27,7 +27,6 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.config.OWBLogConst;
@@ -97,7 +96,7 @@ public abstract class AbstractOwbBean<T>
     private String passivatingId = null;
     
     /**Bean Manager*/
-    private final BeanManager manager;
+    private final BeanManagerImpl manager;
 
     
             
@@ -130,7 +129,7 @@ public abstract class AbstractOwbBean<T>
      * 
      * @return manager instance
      */
-    protected BeanManager getManager()
+    protected BeanManagerImpl getManager()
     {
         return manager;
     }
@@ -149,8 +148,24 @@ public abstract class AbstractOwbBean<T>
             {                
                 creationalContext = CreationalContextFactory.getInstance().wrappedCreationalContext(creationalContext, this); 
             }
+           
+            InjectionTargetWrapper<T> wrapper = getManager().getInjectionTargetWrapper(this);
+            //If wrapper not null
+            if(wrapper != null)
+            {
+                instance = wrapper.produce(creationalContext);
+                wrapper.inject(instance, creationalContext);
+                wrapper.postConstruct(instance);
+            }
+            else
+            {
+                instance = createInstance(creationalContext); 
+                if(this instanceof AbstractInjectionTargetBean)
+                {
+                    ((AbstractInjectionTargetBean<T>)this).afterConstructor(instance, creationalContext);
+                }
+            }
             
-            instance = createInstance(creationalContext);
         }
         catch (Exception re)
         {
@@ -174,6 +189,15 @@ public abstract class AbstractOwbBean<T>
      * @return instance of the bean
      */
     protected abstract T createInstance(CreationalContext<T> creationalContext);
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public T createNewInstance(CreationalContext<T> creationalContext)
+    {
+        return createInstance(creationalContext);
+    }
 
     /*
      * (non-Javadoc)
@@ -183,13 +207,22 @@ public abstract class AbstractOwbBean<T>
     public void destroy(T instance, CreationalContext<T> creationalContext)
     {
         try
-        {            
-            //Destroy instance, call @PreDestroy
-            destroyInstance(instance,creationalContext);
+        {  
+            InjectionTargetWrapper<T> wrapper = getManager().getInjectionTargetWrapper(this);
+            if(wrapper != null)
+            {
+                wrapper.preDestroy(instance);
+                wrapper.dispose(instance);
+            }
+            else
+            {
+                //Destroy instance, call @PreDestroy
+                destroyInstance(instance,creationalContext);
+            }
             
             //Destory dependent instances
-            creationalContext.release();
-                        
+            creationalContext.release();                
+                                    
         }catch(Exception e)
         {
             logger.fatal(OWBLogConst.FATAL_0001, new Object[]{toString()});
@@ -210,6 +243,15 @@ public abstract class AbstractOwbBean<T>
     }
     
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void destroyCreatedInstance(T instance, CreationalContext<T> creationalContext)
+    {
+        destroyInstance(instance, creationalContext);
+    }
+    
+    /**
      * TODO there are probably other infos which must get added to make the id unique!
      * If not, it will crash in {@link BeanManagerImpl#addPassivationInfo(javax.enterprise.inject.spi.Bean)}
      * anyway. 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java Sun Mar 21 17:03:28 2010
@@ -20,7 +20,6 @@ import java.util.Set;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.Producer;
 
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.WebBeansUtil;
@@ -36,9 +35,6 @@ public abstract class AbstractProducerBe
     /** Owner of the producer field component */
     protected InjectionTargetBean<?> ownerComponent;
 
-    /** Producer instance responsible for produce and dispose */
-    protected Producer<T> producer;
-
     /**
      * Create a new instance.
      * 
@@ -69,36 +65,6 @@ public abstract class AbstractProducerBe
     }
 
     /**
-     * Sets producer instance.
-     * 
-     * @param producer producer instance
-     */
-    public void setProducer(Producer<T> producer)
-    {
-        this.producer = producer;
-    }
-
-    /**
-     * Gets producer instance.
-     * 
-     * @return producer instance
-     */
-    public Producer<T> getProducer()
-    {
-        return this.producer;
-    }
-
-    /**
-     * Returns true if producer is set.
-     * 
-     * @return true if producer instance is set
-     */
-    protected boolean isProducerSet()
-    {
-        return producer != null ? true : false;
-    }
-
-    /**
      * {@inheritDoc}
      */
     @Override
@@ -195,11 +161,6 @@ public abstract class AbstractProducerBe
     @Override
     public Set<InjectionPoint> getInjectionPoints()
     {
-        if (isProducerSet())
-        {
-            return getProducer().getInjectionPoints();
-        }
-
         return super.getInjectionPoints();
     }
     

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Sun Mar 21 17:03:28 2010
@@ -21,8 +21,6 @@ import java.util.Set;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Decorator;
-import javax.enterprise.inject.spi.InjectionTarget;
-import javax.enterprise.inject.spi.ProcessInjectionTarget;
 
 import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
 import org.apache.webbeans.intercept.InterceptorData;
@@ -91,21 +89,6 @@ public interface InjectionTargetBean<T> 
     public void injectSuperMethods(T instance, CreationalContext<T> creationalContext);
         
     /**
-     * Sets injection target for this bean. This
-     * is generally set by {@link ProcessInjectionTarget}
-     * event.
-     * @param injectionTarget injection target
-     */
-    public void setInjectionTarget(InjectionTarget<T> injectionTarget);
-    
-    /**
-     * Gets injection target or null if not
-     * set.
-     * @return injection target
-     */
-    public InjectionTarget<T> getInjectionTarget();
-    
-    /**
      * Gets all injected fields of bean.
      * @return all injected fields
      */
@@ -195,18 +178,5 @@ public interface InjectionTargetBean<T> 
      * Gets annotated type.
      * @return annotated type
      */
-    public AnnotatedType<T> getAnnotatedType();    
-    
-    /**
-     * If fully initialize then fully initialize instance
-     * otherwise just create instance.
-     * @param initialize fully initialize
-     */
-    public void setFullyInitialize(boolean initialize);
-    
-    /**
-     * Gets fully initialize.
-     * @return fully initialize
-     */
-    public boolean isFullyInitialize();
+    public AnnotatedType<T> getAnnotatedType();        
 }

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java?rev=925827&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java Sun Mar 21 17:03:28 2010
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.component;
+
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.enterprise.inject.spi.Producer;
+
+import org.apache.webbeans.portable.creation.InjectionTargetProducer;
+import org.apache.webbeans.portable.creation.ProducerBeansProducer;
+
+/**
+ * Reponsible for producing, injection etc.
+ * of beans. Delegate operations to the wrapped
+ * instance.
+ * <p>
+ * Container uses final InjectionTarget or Producer instance
+ * to use while doing operations on beans.
+ * </p> 
+ * @version $Rev$ $Date$
+ *
+ * @param <T>
+ */
+public class InjectionTargetWrapper<T> implements InjectionTarget<T>
+{
+    /**Wrapped injection target*/
+    //This defaults to InjectionTargetProducer
+    private InjectionTarget<T> wrapped = null;
+    
+    /**Wrapped producer*/
+    //This default to ProducerBeansProducer
+    private Producer<T> wrappedProducer = null;
+    
+    /**
+     * New instance.
+     * @param wrapped wrapped injection target
+     */
+    public InjectionTargetWrapper(InjectionTarget<T> wrapped)
+    {
+        this.wrapped = wrapped;
+    }
+
+    
+    /**
+     * New instance.
+     * @param wrappedProducer wrapped producer.
+     */
+    public InjectionTargetWrapper(Producer<T> wrappedProducer)
+    {
+        this.wrappedProducer = wrappedProducer;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void inject(T instance, CreationalContext<T> ctx)
+    {
+        if(this.wrapped != null)
+        {
+            wrapped.inject(instance, ctx);   
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void postConstruct(T instance)
+    {
+        if(this.wrapped != null)
+        {
+            wrapped.postConstruct(instance);   
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */    
+    @Override
+    public void preDestroy(T instance)
+    {
+        if(this.wrapped != null)
+        {
+            wrapped.preDestroy(instance);   
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */    
+    @Override
+    public void dispose(T instance)
+    {
+        if(this.wrappedProducer != null)
+        {
+            wrappedProducer.dispose(instance);   
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */    
+    @Override
+    public Set<InjectionPoint> getInjectionPoints()
+    {
+        if(this.wrappedProducer != null)
+        {
+            return this.wrappedProducer.getInjectionPoints();
+        }
+        
+        return wrapped.getInjectionPoints();
+    }
+
+    /**
+     * {@inheritDoc}
+     */    
+    @Override
+    public T produce(CreationalContext<T> creationalContext)
+    {
+        if(this.wrappedProducer != null)
+        {
+            return this.wrappedProducer.produce(creationalContext);
+        }
+        
+        return wrapped.produce(creationalContext);
+    }
+    
+    public boolean isOwbProvided()
+    {
+        if(this.wrapped != null)
+        {
+            if(InjectionTargetProducer.class.isAssignableFrom(this.wrapped.getClass()))
+            {
+                return true;
+            }
+        }
+        
+        else if(this.wrappedProducer != null)
+        {
+            if(ProducerBeansProducer.class.isAssignableFrom(this.wrappedProducer.getClass()))
+            {
+                return true;
+            }
+        }
+     
+        return false;
+    }
+
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java Sun Mar 21 17:03:28 2010
@@ -18,6 +18,7 @@ import java.lang.reflect.Member;
 import java.util.List;
 import java.util.Set;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.*;
 
 import org.apache.webbeans.exception.WebBeansConfigurationException;
@@ -53,8 +54,22 @@ public interface OwbBean<T> extends Bean
      * @see WebBeansType
      */
     public WebBeansType getWebBeansType();
+    
+    /**
+     * Create an instance.
+     * @param creationalContext creaitonal context
+     * @return instance
+     */
+    public T createNewInstance(CreationalContext<T> creationalContext);
 
     /**
+     * Destroys instance.
+     * @param instance instance
+     * @param creationalContext creational
+     */
+    public void destroyCreatedInstance(T instance, CreationalContext<T> creationalContext);
+    
+    /**
      * Adds qualifier.
      * 
      * @param qualifier bean qualifier

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java Sun Mar 21 17:03:28 2010
@@ -51,16 +51,8 @@ public class ProducerFieldBean<T> extend
     protected T createInstance(CreationalContext<T> creationalContext)
     {
         T instance = null;
-
-        if (isProducerSet())
-        {
-            instance = producer.produce(creationalContext);
-        }
-        else
-        {
-            instance = createDefaultInstance(creationalContext);
-        }
-
+        
+        instance = createDefaultInstance(creationalContext);
         checkNullInstance(instance);
         checkScopeType();
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java Sun Mar 21 17:03:28 2010
@@ -141,16 +141,7 @@ public class ProducerMethodBean<T> exten
     protected T createInstance(CreationalContext<T> creationalContext)
     {
         T instance = null;
-
-        if (isProducerSet())
-        {
-            instance = getProducer().produce(creationalContext);
-        }
-        else
-        {
-            instance = createDefaultInstance(creationalContext);
-        }
-
+        instance = createDefaultInstance(creationalContext);
         // Check null instance
         checkNullInstance(instance);
 
@@ -214,14 +205,7 @@ public class ProducerMethodBean<T> exten
      */
     public void dispose(T instance, CreationalContext<T> creationalContext)
     {
-        if (isProducerSet())
-        {
-            getProducer().dispose(instance);
-        }
-        else
-        {
-            disposeDefault(instance, creationalContext);
-        }
+        disposeDefault(instance, creationalContext);
     }
 
     /**

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java Sun Mar 21 17:03:28 2010
@@ -17,10 +17,7 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.Set;
 
-import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.Producer;
 
 import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.config.DefinitionUtil;
@@ -42,9 +39,6 @@ public class AbstractBeanCreator<T> impl
     /**Default metadata provider*/
     private MetaDataProvider metadataProvider = MetaDataProvider.DEFAULT;
     
-    /**Third party producer or null if not set*/
-    private Producer<T> producer;
-    
     /**Bean annotations*/
     private final Annotation[] beanAnnotations;
     
@@ -53,9 +47,6 @@ public class AbstractBeanCreator<T> impl
      */
     private AnnotatedType<T> annotatedType;
     
-    /**Producer set or not*/
-    private boolean producerSet = false;
-    
     /**
      * Creates a bean instance.
      * 
@@ -72,15 +63,6 @@ public class AbstractBeanCreator<T> impl
      * {@inheritDoc}
      */
     @Override
-    public boolean isProducerSet()
-    {
-        return this.producerSet;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    @Override
     public void checkCreateConditions()
     {
         //Sub-class can override this
@@ -215,60 +197,12 @@ public class AbstractBeanCreator<T> impl
     /**
      * {@inheritDoc}
      */
-    @Override
-    public Producer<T> getProducer()
-    {
-        return this.producer;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setProducer(Producer<T> producer)
-    {
-        this.producer = producer;
-        this.producerSet = true;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
     public AbstractOwbBean<T> getBean()
     {
         return this.bean;
     }
 
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void dispose(T instance)
-    {
-        producer.dispose(instance);
-        
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Set<InjectionPoint> getInjectionPoints()
-    {
-        return producer.getInjectionPoints();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public T produce(CreationalContext<T> creationalContext)
-    {
-        return producer.produce(creationalContext);
-    }
-    
-    protected AnnotatedType<T> getAnnotatedType()
+   protected AnnotatedType<T> getAnnotatedType()
     {
         return this.annotatedType;
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectedTargetBeanCreator.java Sun Mar 21 17:03:28 2010
@@ -15,8 +15,6 @@ package org.apache.webbeans.component.cr
 
 import java.util.Set;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.ObserverMethod;
 
 import org.apache.webbeans.component.AbstractInjectionTargetBean;
@@ -34,12 +32,6 @@ import org.apache.webbeans.util.WebBeans
  */
 public abstract class AbstractInjectedTargetBeanCreator<T> extends AbstractBeanCreator<T> implements InjectedTargetBeanCreator<T>
 {    
-    /**Injection target instance. Null if not set by the ProcessInjectionTarget event*/
-    private InjectionTarget<T> injectionTarget; 
-
-    /**Set or not*/
-    private boolean injectionTargetSet = false;
-    
     /**
      * Creates a new instance.
      * 
@@ -50,15 +42,7 @@ public abstract class AbstractInjectedTa
         super(bean, bean.getReturnType().getDeclaredAnnotations());
     }
     
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean isInjectionTargetSet()
-    {
-        return this.injectionTargetSet;
-    }
-    
+ 
     /**
      * {@inheritDoc}
      */
@@ -165,52 +149,4 @@ public abstract class AbstractInjectedTa
     {
         return (AbstractInjectionTargetBean<T>)super.getBean();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public InjectionTarget<T> getInjectedTarget()
-    {
-        return this.injectionTarget;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setInjectedTarget(InjectionTarget<T> injectionTarget)
-    {
-        this.injectionTarget = injectionTarget;
-        this.injectionTargetSet = true;
-        //super.setProducer(injectionTarget);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void inject(T instance, CreationalContext<T> ctx)
-    {
-        this.injectionTarget.inject(instance, ctx);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void postConstruct(T instance)
-    {
-        this.injectionTarget.postConstruct(instance);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void preDestroy(T instance)
-    {
-        this.injectionTarget.preDestroy(instance);
-    }
-
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/BeanCreator.java Sun Mar 21 17:03:28 2010
@@ -14,7 +14,6 @@
 package org.apache.webbeans.component.creation;
 
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.Producer;
 
 import org.apache.webbeans.component.AbstractOwbBean;
 
@@ -28,7 +27,7 @@ import org.apache.webbeans.component.Abs
  * @version $Rev$ $Date$
  *
  */
-public interface BeanCreator<T> extends Producer<T>
+public interface BeanCreator<T>
 {
     /**
      * MetaDataProvider. 
@@ -75,22 +74,7 @@ public interface BeanCreator<T> extends 
      * @param metadataProvider metadata provider
      */
     public void setMetaDataProvider(MetaDataProvider metadataProvider);
-    
-    /**
-     * Returns producer instance.
-     * 
-     * @return producer instance
-     */
-    public Producer<T> getProducer();
-    
-    /**
-     * Sets producer. If set, it is responsible
-     * for creating bean instance.
-     * 
-     * @param producer set producer
-     */
-    public void setProducer(Producer<T> producer);
-    
+        
     /**
      * Define scope type of the bean.
      * 
@@ -117,12 +101,5 @@ public interface BeanCreator<T> extends 
      * 
      * @return bean instance
      */
-    public AbstractOwbBean<T> getBean();
-    
-    /**
-     * Returns producer instance is set or not.
-     * 
-     * @return producer instance is set or not
-     */
-    public boolean isProducerSet();
+    public AbstractOwbBean<T> getBean();    
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InjectedTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InjectedTargetBeanCreator.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InjectedTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/InjectedTargetBeanCreator.java Sun Mar 21 17:03:28 2010
@@ -15,7 +15,6 @@ package org.apache.webbeans.component.cr
 
 import java.util.Set;
 
-import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.ObserverMethod;
 
 import org.apache.webbeans.component.InjectionTargetBean;
@@ -33,7 +32,7 @@ import org.apache.webbeans.component.Pro
  *
  * @param <T> bean class info
  */
-public interface InjectedTargetBeanCreator<T> extends InjectionTarget<T>
+public interface InjectedTargetBeanCreator<T>
 {
     /**
      * Defines bean's producer methods.
@@ -67,32 +66,5 @@ public interface InjectedTargetBeanCreat
     /**
      * Define observer methods, a.k.a method parameter with <code>@Observes</code>
      */
-    public Set<ObserverMethod<?>> defineObserverMethods();    
-    
-    /**
-     * Gets injection target.
-     * 
-     * @return injection target
-     */
-    public InjectionTarget<T> getInjectedTarget();
-    
-    /**
-     * Sets injection target.
-     * 
-     * @param injectionTarget injection target
-     */
-    public void setInjectedTarget(InjectionTarget<T> injectionTarget);
-    
-    /**
-     * Returns whether injection target set or not.
-     * 
-     * <p>
-     * If {@link InjectionTarget} instance is set, it is used
-     * for creating bean instance, calling post construct and pre-destroy
-     * methods.
-     * </p>
-     * 
-     * @return injection target set or not
-     */
-    public boolean isInjectionTargetSet();
+    public Set<ObserverMethod<?>> defineObserverMethods();        
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/ManagedBeanConfigurator.java Sun Mar 21 17:03:28 2010
@@ -17,6 +17,7 @@ import java.util.Set;
 import javax.decorator.Decorator;
 import javax.interceptor.Interceptor;
 
+import org.apache.webbeans.component.InjectionTargetWrapper;
 import org.apache.webbeans.component.ManagedBean;
 import org.apache.webbeans.component.ProducerFieldBean;
 import org.apache.webbeans.component.ProducerMethodBean;
@@ -24,6 +25,8 @@ import org.apache.webbeans.component.Web
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.intercept.InterceptorUtil;
+import org.apache.webbeans.portable.creation.InjectionTargetProducer;
+import org.apache.webbeans.portable.creation.ProducerBeansProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.WebBeansUtil;
@@ -102,6 +105,7 @@ public final class ManagedBeanConfigurat
      * @throws WebBeansConfigurationException if any configuration exception occurs
      * @deprecated
      */
+    @SuppressWarnings("unchecked")
     public static <T> ManagedBean<T> define(Class<T> clazz, WebBeansType type) throws WebBeansConfigurationException
     {
         BeanManagerImpl manager = BeanManagerImpl.getManager();
@@ -109,6 +113,7 @@ public final class ManagedBeanConfigurat
         checkManagedBeanCondition(clazz);
 
         ManagedBean<T> component = new ManagedBean<T>(clazz, type);
+        manager.putInjectionTargetWrapper(component, new InjectionTargetWrapper(new InjectionTargetProducer(component)));
         
         WebBeansUtil.setInjectionTargetBeanEnableFlag(component);   
         
@@ -136,6 +141,7 @@ public final class ManagedBeanConfigurat
         {
             // add them one after the other to enable serialization handling et al
             manager.addBean(producerMethod);
+            manager.putInjectionTargetWrapper(producerMethod, new InjectionTargetWrapper(new ProducerBeansProducer(producerMethod)));
         }
         
         Set<ProducerFieldBean<?>> producerFields = DefinitionUtil.defineProduerFields(component);
@@ -143,6 +149,7 @@ public final class ManagedBeanConfigurat
         {
             // add them one after the other to enable serialization handling et al
             manager.addBean(producerField);
+            manager.putInjectionTargetWrapper(producerField, new InjectionTargetWrapper(new ProducerBeansProducer(producerField)));
         }
         
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java Sun Mar 21 17:03:28 2010
@@ -26,6 +26,7 @@ import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -57,6 +58,7 @@ import javax.naming.StringRefAddr;
 import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.component.EnterpriseBeanMarker;
 import org.apache.webbeans.component.InjectionTargetBean;
+import org.apache.webbeans.component.InjectionTargetWrapper;
 import org.apache.webbeans.component.JmsBeanMarker;
 import org.apache.webbeans.component.NewBean;
 import org.apache.webbeans.component.OwbBean;
@@ -153,6 +155,9 @@ public class BeanManagerImpl implements 
      * This is used as a reference for serialization.
      */
     private ConcurrentHashMap<String, Bean<?>> passivationBeans = new ConcurrentHashMap<String, Bean<?>>(); 
+    
+    private Map<Contextual<?>, InjectionTargetWrapper<?>> injectionTargetWrappers = 
+        Collections.synchronizedMap(new IdentityHashMap<Contextual<?>, InjectionTargetWrapper<?>>());
 
     /**
      * The parent Manager this child is depending from.
@@ -170,6 +175,20 @@ public class BeanManagerImpl implements 
         notificationManager = new NotificationManager();
     }    
     
+    public <T> void putInjectionTargetWrapper(Contextual<T> contextual, InjectionTargetWrapper<T> wrapper)
+    {
+        Asserts.assertNotNull(contextual);
+        Asserts.assertNotNull(wrapper);
+        
+        this.injectionTargetWrappers.put(contextual, wrapper);
+    }
+    
+    public <T> InjectionTargetWrapper<T> getInjectionTargetWrapper(Contextual<T> contextual)
+    {
+        Asserts.assertNotNull(contextual);
+        return (InjectionTargetWrapper<T>)this.injectionTargetWrappers.get(contextual);
+    }
+    
     public ErrorStack getErrorStack()
     {
         return this.errorStack;
@@ -1014,8 +1033,7 @@ public class BeanManagerImpl implements 
     public <T> InjectionTarget<T> createInjectionTarget(AnnotatedType<T> type)
     {
         InjectionTargetBean<T> bean = WebBeansAnnotatedTypeUtil.defineManagedBean(type);
-        bean.setFullyInitialize(false);
-        
+
         return new InjectionTargetProducer<T>(bean);
     }
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/DependentContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/DependentContext.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/DependentContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/DependentContext.java Sun Mar 21 17:03:28 2010
@@ -62,7 +62,7 @@ public class DependentContext extends Ab
         }
         else
         {
-            object = component.create(creationalContext);
+            object = component.create(creationalContext);   
         }
         
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java Sun Mar 21 17:03:28 2010
@@ -20,6 +20,8 @@ import javax.enterprise.inject.spi.Injec
 import javax.enterprise.inject.spi.Producer;
 
 import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.context.creational.CreationalContextFactory;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 
 /**
  * Abstract implementation of {@link Producer} contract.
@@ -31,8 +33,11 @@ import org.apache.webbeans.component.Owb
 public abstract class AbstractProducer<T> implements Producer<T> 
 {
     /**Bean instance*/
-    private OwbBean<T> bean;
+    protected OwbBean<T> bean;
 
+    /**Passing creational context*/
+    protected CreationalContext<T> creationalContext = null;
+    
     /**
      * Create a new producer with given bean.
      * 
@@ -56,9 +61,22 @@ public abstract class AbstractProducer<T
      * {@inheritDoc}
      */
     @Override
+    @SuppressWarnings("unchecked")
     public T produce(CreationalContext<T> creationalContext)
     {
-        return bean.create(creationalContext);
+        T instance = null;
+        if(!(creationalContext instanceof CreationalContextImpl))
+        {
+            creationalContext = CreationalContextFactory.getInstance().wrappedCreationalContext(creationalContext, this.bean);
+        }
+        
+        //Save it
+        this.creationalContext = creationalContext;
+        
+        //Create an instance of the bean
+        instance = bean.createNewInstance(this.creationalContext);
+                
+        return instance; 
     }
     
     /**
@@ -66,7 +84,7 @@ public abstract class AbstractProducer<T
      */
     public void dispose(T instance)
     {
-        //Do nothing as default
+        this.bean.destroyCreatedInstance(instance, this.creationalContext);
     }
 
     /**

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java Sun Mar 21 17:03:28 2010
@@ -17,6 +17,8 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.spi.InjectionTarget;
 
 import org.apache.webbeans.component.InjectionTargetBean;
+import org.apache.webbeans.context.creational.CreationalContextFactory;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 
 /**
  * InjectionTargetProducer implementation.
@@ -25,42 +27,56 @@ import org.apache.webbeans.component.Inj
  *
  * @param <T> bean type info
  */
+@SuppressWarnings("unchecked")
 public class InjectionTargetProducer<T> extends AbstractProducer<T> implements InjectionTarget<T>
 {
+    /**
+     * Creates a new injection target producer.
+     * @param bean injection target bean
+     */
     public InjectionTargetProducer(InjectionTargetBean<T> bean)
     {
         super(bean);
     }
-    
-    
-    
+        
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void inject(T instance, CreationalContext<T> ctx)
     {
-        @SuppressWarnings("unchecked")
+        if(!(ctx instanceof CreationalContextImpl))
+        {
+            ctx = CreationalContextFactory.getInstance().wrappedCreationalContext(ctx, this.bean);
+        }
+        
         InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
         
         bean.injectResources(instance, ctx);
+        bean.injectSuperFields(instance, ctx);
+        bean.injectSuperMethods(instance, ctx);
         bean.injectFields(instance, ctx);
         bean.injectMethods(instance, ctx);
     }
-
+    
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void postConstruct(T instance)
     {
-        @SuppressWarnings("unchecked")
-        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
-        
-        bean.postConstruct(instance,null);
+        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);        
+        bean.postConstruct(instance,this.creationalContext);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void preDestroy(T instance)
     {
-        @SuppressWarnings("unchecked")
-        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
-        
-        bean.preDestroy(instance,null);
+        InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);        
+        bean.preDestroy(instance,this.creationalContext);
     }
 
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducer.java Sun Mar 21 17:03:28 2010
@@ -32,17 +32,5 @@ public class ProducerBeansProducer<T> ex
     public ProducerBeansProducer(AbstractProducerBean<T> bean)
     {
         super(bean);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    @SuppressWarnings("unchecked")
-    public void dispose(T instance)
-    {
-        AbstractProducer<T> producer = getBean(AbstractProducer.class);
-        producer.dispose(instance);
-    }
-    
+    }    
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessProducerImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessProducerImpl.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessProducerImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/ProcessProducerImpl.java Sun Mar 21 17:03:28 2010
@@ -38,9 +38,10 @@ public class ProcessProducerImpl<X,T> im
     /**Set or not*/
     private boolean set;
 
-    public ProcessProducerImpl(AnnotatedMember<X> annotateMember)
+    public ProcessProducerImpl(Producer<T> producer,AnnotatedMember<X> annotateMember)
     {
         this.annotateMember = annotateMember;
+        this.producer = producer;
     }
     
     /**

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessProducer.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessProducer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/generics/GProcessProducer.java Sun Mar 21 17:03:28 2010
@@ -14,6 +14,7 @@
 package org.apache.webbeans.portable.events.generics;
 
 import javax.enterprise.inject.spi.AnnotatedMember;
+import javax.enterprise.inject.spi.Producer;
 
 import org.apache.webbeans.portable.events.ProcessProducerImpl;
 import org.apache.webbeans.util.ClassUtil;
@@ -21,9 +22,9 @@ import org.apache.webbeans.util.ClassUti
 @SuppressWarnings("unchecked")
 public class GProcessProducer extends ProcessProducerImpl implements GenericProducerObserverEvent
 {
-    public GProcessProducer(AnnotatedMember<?> annotateMember)
+    public GProcessProducer(Producer<?> producer, AnnotatedMember<?> annotateMember)
     {
-        super(annotateMember);
+        super(producer,annotateMember);
     }
 
     @Override

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Sun Mar 21 17:03:28 2010
@@ -85,7 +85,6 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.inject.spi.ProcessProducerField;
 import javax.enterprise.inject.spi.ProcessProducerMethod;
 import javax.enterprise.inject.spi.ProcessSessionBean;
-import javax.enterprise.inject.spi.Producer;
 import javax.enterprise.util.TypeLiteral;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -104,6 +103,7 @@ import org.apache.webbeans.annotation.Re
 import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.component.AbstractInjectionTargetBean;
 import org.apache.webbeans.component.AbstractProducerBean;
+import org.apache.webbeans.component.InjectionTargetWrapper;
 import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.component.BeanManagerBean;
 import org.apache.webbeans.component.ConversationBean;
@@ -150,6 +150,7 @@ import org.apache.webbeans.plugins.OpenW
 import org.apache.webbeans.plugins.PluginLoader;
 import org.apache.webbeans.portable.AnnotatedElementFactory;
 import org.apache.webbeans.portable.creation.InjectionTargetProducer;
+import org.apache.webbeans.portable.creation.ProducerBeansProducer;
 import org.apache.webbeans.portable.events.ProcessBeanImpl;
 import org.apache.webbeans.portable.events.ProcessInjectionTargetImpl;
 import org.apache.webbeans.portable.events.ProcessProducerImpl;
@@ -2425,7 +2426,7 @@ public final class WebBeansUtil
     
     public static GProcessProducer fireProcessProducerEventForMethod(ProducerMethodBean<?> producerMethod,AnnotatedMethod<?> method)
     {         
-        GProcessProducer producerEvent = new GProcessProducer(method);
+        GProcessProducer producerEvent = new GProcessProducer(new ProducerBeansProducer(producerMethod),method);
         
         //Fires ProcessProducer for methods
         BeanManagerImpl.getManager().fireEvent(producerEvent, AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
@@ -2435,7 +2436,7 @@ public final class WebBeansUtil
     
     public static GProcessProducer fireProcessProducerEventForField(ProducerFieldBean<?> producerField,AnnotatedField<?> field)
     {         
-        GProcessProducer producerEvent = new GProcessProducer(field);
+        GProcessProducer producerEvent = new GProcessProducer(new ProducerBeansProducer(producerField),field);
         
         //Fires ProcessProducer for fields
         BeanManagerImpl.getManager().fireEvent(producerEvent, AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
@@ -2810,6 +2811,7 @@ public final class WebBeansUtil
  
     public static <T> ManagedBean<T> defineManagedBean(ManagedBeanCreatorImpl<T> managedBeanCreator,AnnotatedType<T> annotatedType)
     {
+        BeanManagerImpl manager = BeanManagerImpl.getManager();        
         ManagedBean<T> managedBean = managedBeanCreator.getBean();
         
         Class<T> clazz = annotatedType.getJavaClass();
@@ -2843,10 +2845,8 @@ public final class WebBeansUtil
         ProcessInjectionTargetImpl<T> processInjectionTargetEvent = WebBeansUtil.fireProcessInjectionTargetEvent(managedBean);    
         WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessInjectionTarget event observers. Look at logs for further details");
         
-        if(processInjectionTargetEvent.isSet())
-        {
-            managedBeanCreator.setInjectedTarget(processInjectionTargetEvent.getInjectionTarget());
-        }
+        //Put final InjectionTarget instance
+        manager.putInjectionTargetWrapper(managedBean, new InjectionTargetWrapper(processInjectionTargetEvent.getInjectionTarget()));
         
         Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods = new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>(); 
         for(ProducerMethodBean<?> producerMethod : producerMethods)
@@ -2856,12 +2856,8 @@ public final class WebBeansUtil
             WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessProducer event observers for ProducerMethods. Look at logs for further details");
 
             annotatedMethods.put(producerMethod, method);
-            
-            if(producerEvent.isProducerSet())
-            {
-                producerMethod.setProducer((Producer)managedBeanCreator);
-            }
-            
+            manager.putInjectionTargetWrapper(producerMethod, new InjectionTargetWrapper(producerEvent.getProducer()));
+                        
             producerEvent.setProducerSet(false);
         }
         
@@ -2873,11 +2869,7 @@ public final class WebBeansUtil
             WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessProducer event observers for ProducerFields. Look at logs for further details");
             
             annotatedFields.put(producerField, field);
-            
-            if(producerEvent.isProducerSet())
-            {
-                producerField.setProducer((Producer) managedBeanCreator);
-            }
+            manager.putInjectionTargetWrapper(producerField, new InjectionTargetWrapper(producerEvent.getProducer()));
             
             producerEvent.setProducerSet(false);
         }
@@ -2910,12 +2902,6 @@ public final class WebBeansUtil
         WebBeansUtil.fireProcessObservableMethodBeanEvent(observerMethodsMap);
         WebBeansUtil.inspectErrorStack("There are errors that are added by ProcessObserverMethod event observers for observer methods. Look at logs for further details");
         
-        //Set InjectionTarget that is used by the container to inject dependencies!
-        if(managedBeanCreator.isInjectionTargetSet())
-        {
-            managedBean.setInjectionTarget(managedBeanCreator);   
-        }
-
         if(!WebBeansAnnotatedTypeUtil.isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
         {
             beanManager.addBean(WebBeansUtil.createNewBean(managedBean));                
@@ -2992,6 +2978,5 @@ public final class WebBeansUtil
         }
         
         throw new RuntimeException(e);
-    }
-    
+    }    
 }
\ No newline at end of file

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java Sun Mar 21 17:03:28 2010
@@ -33,6 +33,7 @@ import junit.framework.Assert;
 
 import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.component.AbstractInjectionTargetBean;
+import org.apache.webbeans.component.InjectionTargetWrapper;
 import org.apache.webbeans.component.ManagedBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.component.xml.XMLManagedBean;
@@ -52,6 +53,7 @@ import org.apache.webbeans.logger.WebBea
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.plugins.PluginLoader;
 import org.apache.webbeans.portable.AnnotatedElementFactory;
+import org.apache.webbeans.portable.creation.InjectionTargetProducer;
 import org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;
 import org.apache.webbeans.test.component.decorator.broken.DelegateAttributeIsnotInterface;
 import org.apache.webbeans.test.component.decorator.broken.DelegateAttributeMustImplementAllDecoratedTypes;
@@ -319,7 +321,7 @@ public abstract class TestContext implem
             manager.addBean(bean);
             
             GProcessAnnotatedType type = new GProcessAnnotatedType(AnnotatedElementFactory.newAnnotatedType(clazz));
-            manager.fireEvent(type, new Annotation[0]);
+            manager.fireEvent(type, new Annotation[0]);            
         }
 
         return bean;

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java Sun Mar 21 17:03:28 2010
@@ -84,7 +84,7 @@ public class MockManager implements Bean
         manager.addBean(bean);
         return this;
     }
-
+    
     public BeanManager addContext(Context context)
     {
         return manager.addContext(context);

Modified: openwebbeans/trunk/webbeans-tck/webprofile-suite.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-tck/webprofile-suite.xml?rev=925827&r1=925826&r2=925827&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-tck/webprofile-suite.xml (original)
+++ openwebbeans/trunk/webbeans-tck/webprofile-suite.xml Sun Mar 21 17:03:28 2010
@@ -41,6 +41,64 @@
             <exclude name="integration"></exclude>
          </run>
       </groups>
+      
+      <classes>
+     	<!-- ERROR IN CDI-TCK-134 -->
+     	<class name="org.jboss.jsr299.tck.tests.context.passivating.broken.decoratorWithNonPassivatingBeanConstructor.DecoratorWithNonPassivatingBeanConstructorTest">
+     		<methods>
+     			<exclude name="testPassivationCapableBeanWithNonPassivatingDecoratorBeanConstructorFails"></exclude>
+     		</methods>
+     	</class>     	
+     	
+     	<!-- ERROR IN CDI-TCK-134 -->
+     	<class name="org.jboss.jsr299.tck.tests.context.passivating.broken.decoratorWithNonPassivatingInitializerMethod.DecoratorWithNonPassivatingInitializerMethodTest">
+     		<methods>
+     			<exclude name="testPassivationCapableBeanWithNonPassivatingInitializerInDecoratorFails"></exclude>
+     		</methods>
+     	</class>     	
+
+     	<!-- ERROR IN CDI-TCK-134 -->
+     	<class name="org.jboss.jsr299.tck.tests.context.passivating.broken.decoratorWithNonPassivatingInjectedField.DecoratorWithNonPassivatingInjectedFieldTest">
+     		<methods>
+     			<exclude name="testPassivationCapableBeanWithNonPassivatingDecoratorInjectedFieldFails"></exclude>
+     		</methods>
+     	</class>     	
+     	
+     	<!-- ERROR IN CDI-TCK-137 -->
+     	<class name="org.jboss.jsr299.tck.tests.decorators.invocation.DecoratorInvocationTest">
+     		<methods>
+     			<exclude name="testChainedDecoratorInvocation"></exclude>
+     		</methods>
+     	</class>     	
+
+     	<!-- ERROR IN CDI-TCK-121 -->
+     	<class name="org.jboss.jsr299.tck.tests.extensions.beanManager.BeanManagerTest">
+     		<methods>
+     			<exclude name="testGetPassivationCapableBeanById"></exclude>
+     		</methods>
+     	</class>     
+     	
+     	<!-- ERROR IN CDITCK-138 -->
+     	<class name="org.jboss.jsr299.tck.tests.lookup.injectionpoint.InjectionPointTest">
+     		<methods>
+     			<exclude name="testIsDelegate"></exclude>
+     		</methods>
+     	</class>     
+
+     	<!-- ERROR IN CDITCK-139 -->
+     	<class name="org.jboss.jsr299.tck.tests.decorators.resolution.DecoratorResolutionTest">
+     		<methods>
+     			<exclude name="testDelegateTypeVariableBeanTypeVariable"></exclude>
+     		</methods>
+     	</class>     
+
+     	<!-- TODO EL-RESOLVER PROBLEM -->
+     	<class name="org.jboss.jsr299.tck.tests.context.dependent.DependentContextTest">
+     		<methods>
+     			<exclude name="testDependentsDestroyedWhenElEvaluationCompletes"></exclude>
+     		</methods>
+     	</class>     
+      </classes>
    
       <packages>         
          <package name="org.jboss.jsr299.tck.tests.*"></package>