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 2009/07/01 22:27:50 UTC

svn commit: r790362 [1/2] - in /incubator/openwebbeans/trunk/webbeans-impl: ./ src/main/java/org/apache/webbeans/component/ src/main/java/org/apache/webbeans/component/third/ src/main/java/org/apache/webbeans/config/ src/main/java/org/apache/webbeans/c...

Author: gerdogdu
Date: Wed Jul  1 20:27:48 2009
New Revision: 790362

URL: http://svn.apache.org/viewvc?rev=790362&view=rev
Log:
Updating for reflecting API changes.

Modified:
    incubator/openwebbeans/trunk/webbeans-impl/pom.xml
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractComponent.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/Component.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ComponentImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerComponentImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldComponent.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContainerDeployer.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ResolutionUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/WebBeansContext.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java   (contents, props changed)
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/xml/XMLDefinitionUtil.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/containertests/ComponentResolutionByTypeTest.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/dependent/DependentComponentTest.java
    incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/typedliteral/TypedLiteralComponentTest.java

Modified: incubator/openwebbeans/trunk/webbeans-impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/pom.xml?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/pom.xml (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/pom.xml Wed Jul  1 20:27:48 2009
@@ -52,7 +52,6 @@
 		<dependency>
 		    <groupId>org.apache.geronimo.specs</groupId>
 		    <artifactId>geronimo-el_1.0_spec</artifactId>
-            <scope>provided</scope>
 		</dependency>
 		<dependency>
 			<groupId>javassist</groupId>

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractComponent.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractComponent.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractComponent.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractComponent.java Wed Jul  1 20:27:48 2009
@@ -19,11 +19,8 @@
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.CreationException;
@@ -33,8 +30,10 @@
 import org.apache.webbeans.config.inheritance.BeanInheritedMetaData;
 import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData;
 import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.deployment.DeploymentTypeManager;
 import org.apache.webbeans.intercept.InterceptorData;
+import org.apache.webbeans.logger.WebBeansLogger;
 import org.apache.webbeans.util.ClassUtil;
 
 /**
@@ -47,6 +46,9 @@
  */
 public abstract class AbstractComponent<T> extends Component<T>
 {
+    /**Logger instance*/
+    private final WebBeansLogger logger = WebBeansLogger.getLogger(getClass());
+    
     /** Name of the component */
     protected String name;
 
@@ -68,9 +70,6 @@
     /** Return type of the component */
     protected Class<T> returnType;
 
-    /** Dependent object map of the component */
-    protected Map<Object, Bean<?>> dependentObjects = new WeakHashMap<Object, Bean<?>>();
-
     /** Stereotypes of the component */
     protected Set<Annotation> stereoTypes = new HashSet<Annotation>();
     
@@ -100,6 +99,9 @@
     
     /**Tracks dependent injection point owner, can be null*/
     protected InjectionPoint dependentOwnerInjectionPoint;
+    
+    /**Creational context*/
+    protected CreationalContext<T> creationalContext = null;
 
     /**
      * Constructor definiton. Each subclass redefines its own constructor with
@@ -149,8 +151,8 @@
         T instance = null;
         try
         {
-
-            instance = createInstance(creationalContext);
+            this.creationalContext = creationalContext;
+            instance = createInstance(this.creationalContext);
 
         }
         catch (Exception re)
@@ -185,20 +187,28 @@
      * (non-Javadoc)
      * @see javax.webbeans.component.Component#destroy(java.lang.Object)
      */
-    public void destroy(T instance)
+    public void destroy(T instance, CreationalContext<T> creationalContext)
     {
-        //Destory dependent instances
-        destroyDependents();
-        
-        //Destroy instance, call @PreDestroy
-        destroyInstance(instance);
-                    
-        //Clear Decorator and Interceptor Stack
-        this.decoratorStack.clear();
-        this.interceptorStack.clear();
-        
-        //Reset it
-        this.dependentOwnerInjectionPoint = null;
+        try
+        {
+            //Destory dependent instances
+            this.creationalContext.release();
+            
+            //Destroy instance, call @PreDestroy
+            destroyInstance(instance);
+                        
+            //Clear Decorator and Interceptor Stack
+            this.decoratorStack.clear();
+            this.interceptorStack.clear();
+            
+            //Reset it
+            this.dependentOwnerInjectionPoint = null;  
+            
+        }catch(Exception e)
+        {
+            logger.fatal("Exception is thrown while destroying bean instance : " + toString());
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -330,7 +340,7 @@
      * 
      * @return stereotypes of the component
      */
-    public Set<Annotation> getStereotypes()
+    public Set<Annotation> getOwbStereotypes()
     {
         return this.stereoTypes;
     }
@@ -420,9 +430,11 @@
         
         //Get dependent instance
         object = ManagerImpl.getManager().getInstance(dependentComponent);
-                
+        
+        CreationalContextImpl<T> cc = (CreationalContextImpl<T>)this.creationalContext;
+
         //Put this into the dependent map
-        this.dependentObjects.put(object, dependentComponent);
+        cc.addDependent(dependentComponent, object);
 
         return object;
     }
@@ -483,24 +495,6 @@
     {
         return this.serializable;
     }
-
-    @SuppressWarnings("unchecked")
-    protected <K> void destroyDependents()
-    {
-        Set<Object> keySet = this.dependentObjects.keySet();
-        Iterator<Object> it = keySet.iterator();
-
-        K instance = null;
-
-        while (it.hasNext())
-        {
-            instance = (K) it.next();
-            Bean<K> bean = (Bean<K>) this.dependentObjects.get(instance);
-            bean.destroy(instance);            
-        }
-        
-        this.dependentObjects.clear();
-    }
     
     public void addInjectionPoint(InjectionPoint injectionPoint)
     {
@@ -554,6 +548,24 @@
         return points;
     }
     
+    public Set<Class<? extends Annotation>> getStereotypes()
+    {
+        Set<Class<? extends Annotation>> set = new HashSet<Class<? extends Annotation>>();
+        
+        for(Annotation ann : this.stereoTypes)
+        {
+            set.add(ann.annotationType());
+        }
+        
+        return set;
+    }
+    
+    //TODO Replaces @Deploymeny Types, no starting work for now!
+    public boolean isPolicy()
+    {
+        return false;
+    }
+    
     public String toString()
     {
         StringBuilder builder = new StringBuilder();

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/Component.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/Component.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/Component.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/Component.java Wed Jul  1 20:27:48 2009
@@ -138,7 +138,7 @@
     /**
      * Gets stereotypes annotations.
      */
-    public abstract Set<Annotation> getStereotypes();
+    public abstract Set<Annotation> getOwbStereotypes();
 
     /**
      * Sets name of the bean.

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ComponentImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ComponentImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ComponentImpl.java Wed Jul  1 20:27:48 2009
@@ -18,7 +18,7 @@
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 
-import org.apache.webbeans.context.creational.CreationalContextFactory;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.inject.InjectableConstructor;
 import org.apache.webbeans.intercept.InterceptorType;
@@ -73,7 +73,6 @@
      * {@inheritDoc}
      */
     @Override
-    @SuppressWarnings("unchecked")
     protected void destroyComponentInstance(T instance)
     {
         if (WebBeansUtil.isContainsInterceptorMethod(getInterceptorStack(), InterceptorType.PRE_DESTROY))
@@ -92,7 +91,8 @@
         }
         
         //Remove it from creational context, if any
-        CreationalContextFactory.getInstance().removeCreationalContext(this);
+        CreationalContextImpl<T> cc = (CreationalContextImpl<T>)this.creationalContext;
+        cc.remove();
     }
 
     /**

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerComponentImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerComponentImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerComponentImpl.java Wed Jul  1 20:27:48 2009
@@ -170,7 +170,9 @@
         Bean<K> destroy = (Bean<K>) bean;
         K inst = (K) instance;
 
-        destroy.destroy(inst);
+        CreationalContext<K> cc = (CreationalContext<K>)this.creationalContext;
+        
+        destroy.destroy(inst,cc);
     }
 
     /*
@@ -221,15 +223,15 @@
         Annotation[] anns = new Annotation[this.parent.getBindings().size()];
         anns = this.parent.getBindings().toArray(anns);
         
-        AbstractComponent<T> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractComponent<T>)this.parent);
+        Bean<?> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractComponent<T>)this.parent);
         
         if(specialize != null)
         {
-            parentInstance = getManager().getInstance(specialize);
+            parentInstance = getManager().getReference(specialize, null, null);
         }
         else
         {
-            parentInstance = getManager().getInstance(this.parent);   
+            parentInstance = getManager().getReference(this.parent, null, null);
         }
         
         return parentInstance;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldComponent.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldComponent.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldComponent.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldComponent.java Wed Jul  1 20:27:48 2009
@@ -124,7 +124,8 @@
         Bean<K> destroy = (Bean<K>) bean;
         K inst = (K) instance;
 
-        destroy.destroy(inst);
+        CreationalContext<K> cc = (CreationalContext<K>)this.creationalContext;
+        destroy.destroy(inst,cc);
     }
     
     @SuppressWarnings("unchecked")
@@ -138,15 +139,15 @@
         Annotation[] anns = new Annotation[this.ownerComponent.getBindings().size()];
         anns = this.ownerComponent.getBindings().toArray(anns);
         
-        AbstractComponent<T> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractComponent<T>)this.ownerComponent);
+        Bean<?> specialize = WebBeansUtil.getMostSpecializedBean(getManager(), (AbstractComponent<T>)this.ownerComponent);
         
         if(specialize != null)
         {
-            parentInstance = getManager().getInstance(specialize);
+            parentInstance = getManager().getReference(specialize, null, null);
         }
         else
         {
-            parentInstance = getManager().getInstance(this.ownerComponent);   
+            parentInstance = getManager().getReference(this.ownerComponent,null,null);   
         }
         
         return parentInstance;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java Wed Jul  1 20:27:48 2009
@@ -102,9 +102,9 @@
         return bean.create(context);
     }
 
-    public void destroy(T instance)
+    public void destroy(T instance, CreationalContext<T> context)
     {
-        bean.destroy(instance);
+        bean.destroy(instance,context);
         
     }
 

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Wed Jul  1 20:27:48 2009
@@ -32,7 +32,6 @@
 import javax.enterprise.inject.Current;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Initializer;
-import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.Named;
 import javax.enterprise.inject.NonBinding;
 import javax.enterprise.inject.Produces;
@@ -327,11 +326,11 @@
             Set<Annotation> inheritedTypes = inheritedMetaData.getInheritedStereoTypes();        
             for (Annotation inherited : inheritedTypes)
             {
-                Set<Annotation> bindings = component.getStereotypes();
+                Set<Class<? extends Annotation>> bindings = component.getStereotypes();
                 boolean found = false;
-                for (Annotation existBinding : bindings)
+                for (Class<? extends Annotation> existBinding : bindings)
                 {
-                    if (existBinding.annotationType().equals(inherited.annotationType()))
+                    if (existBinding.equals(inherited.annotationType()))
                     {
                         found = true;
                         break;
@@ -363,7 +362,7 @@
 
         if (!found)
         {
-            Set<Annotation> stereos = component.getStereotypes();
+            Set<Class<? extends Annotation>> stereos = component.getStereotypes();
             if (stereos.size() == 0)
             {
                 component.setImplScopeType(new DependentScopeLiteral());
@@ -371,12 +370,12 @@
             else
             {
                 Annotation defined = null;
-                Set<Annotation> anns = component.getStereotypes();
-                for (Annotation stero : anns)
+                Set<Class<? extends Annotation>> anns = component.getStereotypes();
+                for (Class<? extends Annotation> stero : anns)
                 {
-                    if (AnnotationUtil.isMetaAnnotationExist(stero.annotationType().getDeclaredAnnotations(), ScopeType.class))
+                    if (AnnotationUtil.isMetaAnnotationExist(stero.getDeclaredAnnotations(), ScopeType.class))
                     {
-                        Annotation next = AnnotationUtil.getMetaAnnotations(stero.annotationType().getDeclaredAnnotations(), ScopeType.class)[0];
+                        Annotation next = AnnotationUtil.getMetaAnnotations(stero.getDeclaredAnnotations(), ScopeType.class)[0];
 
                         if (defined == null)
                         {
@@ -783,8 +782,8 @@
                 annot = AnnotationUtil.getRealizesGenericAnnotations(component.getReturnType(), annot);
             }
 
-            Set<Bean<T>> set = InjectionResolver.getInstance().implResolveByType(type, annot);
-            Bean<T> bean = set.iterator().next();
+            Set<Bean<?>> set = InjectionResolver.getInstance().implResolveByType(type, annot);
+            Bean<?> bean = set.iterator().next();
             ProducerComponentImpl<?> pr = null;
 
             if (bean == null || !(bean instanceof ProducerComponentImpl))

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContainerDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContainerDeployer.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContainerDeployer.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansContainerDeployer.java Wed Jul  1 20:27:48 2009
@@ -16,20 +16,14 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
 import java.net.URL;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-import javax.enterprise.context.Dependent;
 import javax.enterprise.context.ScopeType;
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.Current;
 import javax.enterprise.inject.deployment.Specializes;
-import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.Decorator;
 import javax.enterprise.inject.spi.InjectionPoint;
@@ -42,7 +36,6 @@
 import org.apache.webbeans.annotation.BeforeBeanDiscoveryLiteral;
 import org.apache.webbeans.component.ComponentImpl;
 import org.apache.webbeans.component.WebBeansType;
-import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.container.ManagerImpl;
 import org.apache.webbeans.decorator.DecoratorUtil;
 import org.apache.webbeans.decorator.WebBeansDecorator;
@@ -209,7 +202,7 @@
 
     private void validate(Set<Bean<?>> beans)
     {
-        InjectionResolver resolver = ManagerImpl.getManager().getInjectionResolver();
+        ManagerImpl manager = ManagerImpl.getManager();
         
         if (beans != null && beans.size() > 0)
         {
@@ -220,64 +213,13 @@
                                 
                 for (InjectionPoint injectionPoint : injectionPoints)
                 {
-                    //Check for correct injection type
-                    resolver.checkInjectionPointType(injectionPoint);
-                    
-                    Class<?> rawType = getRawTypeForInjectionPoint(injectionPoint);
-                    
-                    //Comment out while testing TCK Events Test --- WBTCK27 jira./////
-                    //Hack for EntityManager --> Solve in M3!!!!
-                    if(rawType.equals(Event.class) || rawType.getSimpleName().equals("EntityManager"))
-                    {
-                        continue;
-                    }
-                    /////////////////////////////////////////////////////////////////
-                    
-                    // check for InjectionPoint injection
-                    if (rawType.equals(InjectionPoint.class))
-                    {
-                        Annotated annotated = injectionPoint.getAnnotated();
-                        if (annotated.getAnnotations().size() == 1 && annotated.isAnnotationPresent(Current.class))
-                        {
-                            if (!bean.getScopeType().equals(Dependent.class))
-                            {
-                                throw new WebBeansConfigurationException("Bean " + bean + "scope can not define other scope except @Dependent to inject InjectionPoint");
-                            }
-                        }
-                    }
-                    else
-                    {
-                        resolver.checkInjectionPoints(injectionPoint);
-                    }
+                    manager.validate(injectionPoint);
                 }
             }
         }
         
     }
     
-    /**
-     * Returns injection point raw type.
-     * 
-     * @param injectionPoint injection point definition
-     * @return injection point raw type
-     */
-    private Class<?> getRawTypeForInjectionPoint(InjectionPoint injectionPoint)
-    {
-        Class<?> rawType = null;
-        Type type = injectionPoint.getType();
-        
-        if(type instanceof Class)
-        {
-            rawType = (Class<?>) type;
-        }
-        else if(type instanceof ParameterizedType)
-        {
-            ParameterizedType pt = (ParameterizedType)type;            
-            rawType = (Class<?>)pt.getRawType();                                                
-        }
-        
-        return rawType;
-    }
 
     protected void deployFromClassPath(MetaDataDiscoveryService scanner) throws ClassNotFoundException
     {

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java Wed Jul  1 20:27:48 2009
@@ -39,8 +39,10 @@
  * A ChildActivityManager tries to handle the beans, contexts, ... itself 
  * and delegates all other requests to it's parent Manager. 
  *
+ *  
  */
 @SuppressWarnings("unchecked")
+@Deprecated/*Activities are removed from specification*/
 public class ChildActivityManager extends ManagerImpl
 {    
     
@@ -298,10 +300,10 @@
     }
 
     /** {@inheritDoc} */
-    public <T> Set<Bean<T>> resolveByType(Class<T> type, Annotation... bindings)
+    public Set<Bean<?>> resolveByType(Class<?> type, Annotation... bindings)
     {
         //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
-        Set<Bean<T>> set = super.resolveByType(type, bindings);
+        Set<Bean<?>> set = super.resolveByType(type, bindings);
        
         if (set == null || set.isEmpty()) 
         {
@@ -311,10 +313,10 @@
     }
 
     /** {@inheritDoc} */
-    public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType, Annotation... bindingTypes)
+    public Set<Bean<?>> resolveByType(TypeLiteral<?> apiType, Annotation... bindingTypes)
     {
         //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
-        Set<Bean<T>> set = super.resolveByType(apiType, bindingTypes);
+        Set<Bean<?>> set = super.resolveByType(apiType, bindingTypes);
        
         if (set == null || set.isEmpty()) 
         {

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionResolver.java Wed Jul  1 20:27:48 2009
@@ -47,7 +47,6 @@
  * @version $Rev$ $Date$
  * @see WebBeansFinder
  */
-@SuppressWarnings("unchecked")
 public class InjectionResolver
 {
     /**Bean Manager*/
@@ -130,11 +129,11 @@
         Annotation[] bindingTypes = new Annotation[injectionPoint.getBindings().size()];
         bindingTypes = injectionPoint.getBindings().toArray(bindingTypes);
         
-        Set<Bean<Object>> beanSet = implResolveByType(type ,bindingTypes);
+        Set<Bean<?>> beanSet = implResolveByType(type ,bindingTypes);
         
         ResolutionUtil.checkResolvedBeans(beanSet, clazz, bindingTypes);
         
-        Bean<Object> bean = beanSet.iterator().next();
+        Bean<?> bean = beanSet.iterator().next();
         
         if(clazz.isPrimitive())
         {
@@ -153,7 +152,7 @@
      * @param injectionPoint injection point declaration
      * @return bean for injection point
      */
-    public Bean<Object> getInjectionPointBean(InjectionPoint injectionPoint)
+    public Bean<?> getInjectionPointBean(InjectionPoint injectionPoint)
     {
         Type type = injectionPoint.getType();
         
@@ -172,7 +171,7 @@
         Annotation[] bindingTypes = new Annotation[injectionPoint.getBindings().size()];
         bindingTypes = injectionPoint.getBindings().toArray(bindingTypes);
         
-        Set<Bean<Object>> beanSet = implResolveByType(type ,bindingTypes);
+        Set<Bean<?>> beanSet = implResolveByType(type ,bindingTypes);
         
         ResolutionUtil.checkResolvedBeans(beanSet, clazz, bindingTypes);
         
@@ -276,12 +275,12 @@
      * @param binding binding type of the injection point
      * @return set of resolved beans
      */
-    public <T> Set<Bean<T>> implResolveByType(Type injectionPointType, Annotation... binding)
+    public Set<Bean<?>> implResolveByType(Type injectionPointType, Annotation... binding)
     {
         Asserts.assertNotNull(injectionPointType, "injectionPointType parameter can not be null");
         Asserts.assertNotNull(binding, "binding parameter can not be null");
         
-        Set<Bean<T>> results = new HashSet<Bean<T>>();
+        Set<Bean<?>> results = new HashSet<Bean<?>>();
         Set<Bean<?>> deployedComponents = this.manager.getBeans();
 
         boolean currentBinding = false;
@@ -307,7 +306,7 @@
 
             if (returnAll)
             {
-                results.add((Bean<T>) component);
+                results.add((Bean<?>) component);
                 continue;
             }
 
@@ -321,7 +320,7 @@
                     
                     if(ClassUtil.isAssignable(componentApiType, injectionPointType))
                     {
-                        results.add((Bean<T>) component);
+                        results.add((Bean<?>) component);
                         break;                                            
                     }                    
                 }
@@ -351,14 +350,14 @@
      * @param result result beans
      * @return specialized beans if exists, otherwise return input result
      */
-    private <T> Set<Bean<T>> findBySpecialization(Set<Bean<T>> result)
+    public Set<Bean<?>> findBySpecialization(Set<Bean<?>> result)
     {
-        Iterator<Bean<T>> it = result.iterator();
-        Set<Bean<T>> res = new HashSet<Bean<T>>();
+        Iterator<Bean<?>> it = result.iterator();
+        Set<Bean<?>> res = new HashSet<Bean<?>>();
         
         while(it.hasNext())
         {
-            AbstractComponent<T> component = (AbstractComponent<T>)it.next();
+            AbstractComponent<?> component = (AbstractComponent<?>)it.next();
             if(component.isSpecializedBean())
             {
                 res.add(component);
@@ -380,15 +379,15 @@
      * @param result resulted beans
      * @return filtered beans according to the deployment type precedence
      */
-    private <T> Set<Bean<T>> findByPrecedence(Set<Bean<T>> result)
+    public Set<Bean<?>> findByPrecedence(Set<Bean<?>> result)
     {
-        Bean<T> resolvedComponent = null;
-        Iterator<Bean<T>> it = result.iterator();
-        Set<Bean<T>> res = new HashSet<Bean<T>>();
+        Bean<?> resolvedComponent = null;
+        Iterator<Bean<?>> it = result.iterator();
+        Set<Bean<?>> res = new HashSet<Bean<?>>();
 
         while (it.hasNext())
         {
-            Bean<T> component = it.next();
+            Bean<?> component = it.next();
 
             if (resolvedComponent == null)
             {
@@ -428,14 +427,14 @@
      * @param annotations binding types on injection point
      * @return filtered bean set according to the binding types
      */
-    private <T> Set<Bean<T>> findByBindingType(Set<Bean<T>> remainingSet, Annotation... annotations)
+    private Set<Bean<?>> findByBindingType(Set<Bean<?>> remainingSet, Annotation... annotations)
     {
-        Iterator<Bean<T>> it = remainingSet.iterator();
-        Set<Bean<T>> result = new HashSet<Bean<T>>();
+        Iterator<Bean<?>> it = remainingSet.iterator();
+        Set<Bean<?>> result = new HashSet<Bean<?>>();
 
         while (it.hasNext())
         {
-            Bean<T> component = it.next();
+            Bean<?> component = it.next();
             Set<Annotation> bTypes = component.getBindings();
 
             int i = 0;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java Wed Jul  1 20:27:48 2009
@@ -19,6 +19,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;
@@ -28,18 +29,27 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import javax.el.ELResolver;
 import javax.enterprise.context.ContextNotActiveException;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.ScopeType;
 import javax.enterprise.context.spi.Context;
+import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Event;
 import javax.enterprise.event.Observer;
 import javax.enterprise.inject.AmbiguousResolutionException;
+import javax.enterprise.inject.Current;
 import javax.enterprise.inject.TypeLiteral;
+import javax.enterprise.inject.spi.Annotated;
+import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.Decorator;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InterceptionType;
 import javax.enterprise.inject.spi.Interceptor;
 import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.stereotype.Stereotype;
 import javax.naming.NamingException;
 import javax.naming.Reference;
 import javax.naming.Referenceable;
@@ -54,11 +64,15 @@
 import org.apache.webbeans.decorator.DecoratorComparator;
 import org.apache.webbeans.decorator.WebBeansDecorator;
 import org.apache.webbeans.decorator.WebBeansDecoratorConfig;
+import org.apache.webbeans.el.WebBeansELResolver;
 import org.apache.webbeans.event.NotificationManager;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.intercept.InterceptorComparator;
 import org.apache.webbeans.intercept.WebBeansInterceptorConfig;
 import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
+import org.apache.webbeans.portable.AnnotatedElementFactory;
 import org.apache.webbeans.proxy.JavassistProxyFactory;
+import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.WebBeansUtil;
@@ -234,6 +248,7 @@
      * @param component new webbeans component
      * @return the this activity
      */
+    
     public BeanManager addBean(Bean<?> component)
     {
         if(component instanceof AbstractComponent)
@@ -250,6 +265,7 @@
         return this;
     }
 
+    
     public BeanManager addContext(Context context)
     {
         addContext(context.getScopeType(), ContextFactory.getCustomContext(context));
@@ -258,7 +274,9 @@
 
     }
     
-    
+    /**
+     * {@inheritDoc}
+     */
     public void fireEvent(Object event, Annotation... bindings)
     {
         if (ClassUtil.isDefinitionConstainsTypeVariables(event.getClass()))
@@ -269,6 +287,7 @@
         this.notificationManager.fireEvent(event, bindings);
     }
 
+    
     public Object getInstanceByName(String name)
     {
         AbstractComponent<?> component = null;
@@ -292,6 +311,7 @@
         return object;
     }
     
+    
     public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<?> context)
     {
         T instance = null;
@@ -328,39 +348,44 @@
         return getInstanceToInject(injectionPoint, null);
     }
 
+    
     public <T> T getInstanceByType(Class<T> type, Annotation... bindingTypes)
     {
         ResolutionUtil.getInstanceByTypeConditions(bindingTypes);
-        Set<Bean<T>> set = resolveByType(type, bindingTypes);
+        Set<Bean<?>> set = resolveByType(type, bindingTypes);
 
         ResolutionUtil.checkResolvedBeans(set, type, bindingTypes);
 
-        return getInstance(set.iterator().next());
+        return (T)getInstance(set.iterator().next());
     }
 
+    
     public <T> T getInstanceByType(TypeLiteral<T> type, Annotation... bindingTypes)
     {
         ResolutionUtil.getInstanceByTypeConditions(bindingTypes);
-        Set<Bean<T>> set = resolveByType(type, bindingTypes);
+        Set<Bean<?>> set = resolveByType(type, bindingTypes);
 
         ResolutionUtil.checkResolvedBeans(set, type.getRawType(),bindingTypes);
 
-        return getInstance(set.iterator().next());
+        return (T)getInstance(set.iterator().next());
     }
 
+    
     public Set<Bean<?>> resolveByName(String name)
     {
         return this.injectionResolver.implResolveByName(name);
     }
 
-    public <T> Set<Bean<T>> resolveByType(Class<T> apiType, Annotation... bindingTypes)
+    
+    public Set<Bean<?>> resolveByType(Class<?> apiType, Annotation... bindingTypes)
     {
         ResolutionUtil.getInstanceByTypeConditions(bindingTypes);
         
         return this.injectionResolver.implResolveByType(apiType, bindingTypes);
     }
 
-    public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType, Annotation... bindingTypes)
+    
+    public Set<Bean<?>> resolveByType(TypeLiteral<?> apiType, Annotation... bindingTypes)
     {
         ParameterizedType ptype = (ParameterizedType) apiType.getType();
         ResolutionUtil.resolveByTypeConditions(ptype);
@@ -370,34 +395,43 @@
         return this.injectionResolver.implResolveByType(apiType.getType(), bindingTypes);
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public <T> Set<Observer<T>> resolveObservers(T event, Annotation... bindings)
     {
         return this.notificationManager.resolveObservers(event, bindings);
     }
 
+    
     public Set<Bean<?>> getComponents()
     {
         return getManager().components;
     }
-
+    
+    
     public BeanManager addDecorator(Decorator decorator)
     {
         getManager().webBeansDecorators.add(decorator);
         return this;
     }
 
+    
     public BeanManager addInterceptor(Interceptor interceptor)
     {
         getManager().webBeansInterceptors.add(interceptor);
         return this;
     }
 
+    
     public <T> BeanManager addObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
     {
         this.notificationManager.addObserver(observer, eventType, bindings);
         return this;
     }
 
+    
     public <T> BeanManager addObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
     {
         this.notificationManager.addObserver(observer, eventType, bindings);
@@ -406,50 +440,27 @@
 
     public <T> T getInstance(Bean<T> bean)
     {
-        Context context = null;
-        T instance = null;
-
-        CreationalContext<T> creationalContext = CreationalContextFactory.getInstance().getCreationalContext(bean);
-        
-        /* @ScopeType is normal */
-        if (WebBeansUtil.isScopeTypeNormal(bean.getScopeType()))
-        {
-            if (this.proxyMap.containsKey(bean))
-            {
-                instance = (T) this.proxyMap.get(bean);
-            }
-            else
-            {
-                instance = (T) JavassistProxyFactory.createNewProxyInstance(bean);
-                this.proxyMap.put(bean, instance);
-            }
-            
-            //Push proxy instance into the creational context,//TODO Seems unnecessary?
-            creationalContext.push(instance);
-            
-        }
-        /* @ScopeType is not normal, like @Dependent */
-        else
-        {
-            context = getContext(bean.getScopeType());
-            instance = (T)context.get(bean, creationalContext);                                
-        }
-
-        return instance;
+        return (T)getReference(bean, null, null);
     }
 
+    
     public <T> BeanManager removeObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
     {
         this.notificationManager.removeObserver(observer, eventType, bindings);
         return this;
     }
 
+    
     public <T> BeanManager removeObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
     {
         this.notificationManager.removeObserver(observer, eventType, bindings);
         return this;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override    
     public List<Decorator<?>> resolveDecorators(Set<Type> types, Annotation... bindingTypes)
     {
         WebBeansUtil.checkDecoratorResolverParams(types, bindingTypes);
@@ -470,6 +481,10 @@
 
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public List<Interceptor<?>> resolveInterceptors(InterceptionType type, Annotation... interceptorBindings)
     {
         WebBeansUtil.checkInterceptorResolverParams(interceptorBindings);
@@ -494,11 +509,12 @@
         return interceptorList;
     }
 
+    
     public Set<Bean<?>> getBeans()
     {
         return this.components;
     }
-
+    
     public Set<Interceptor<?>> getInterceptors()
     {
         return this.webBeansInterceptors;
@@ -509,6 +525,7 @@
         return this.webBeansDecorators;
     }
 
+    
     private void addContext(Class<? extends Annotation> scopeType, javax.enterprise.context.spi.Context context)
     {
         Asserts.assertNotNull(scopeType, "scopeType parameter can not be null");
@@ -525,11 +542,6 @@
         }
         else
         {
-//X TODO Mark , this brokes the TCK tests!!!!
-//            if (context.isActive() && containsActiveContext(contextList))
-//            {
-//                throw new IllegalStateException("There is already an active Context registered for this scope! Context=" + context.getScopeType());
-//            }
             contextList.add(context);
         }
 
@@ -546,6 +558,7 @@
      * @param xmlStream beans xml definitions
      * @return {@link BeanManager} instance 
      */
+    
     public BeanManager parse(InputStream xmlStream)
     {
         this.xmlConfigurator.configure(xmlStream);
@@ -556,6 +569,7 @@
     /**
      * Create a new ChildActivityManager.
      */
+    
     public BeanManager createActivity()
     {
         return new ChildActivityManager(this);
@@ -566,6 +580,7 @@
      * 
      * @param scopeType scope type for the context
      */
+    
     public BeanManager setCurrent(Class<? extends Annotation> scopeType)
     {
         if(!WebBeansUtil.isScopeTypeNormal(scopeType))
@@ -579,5 +594,283 @@
         ActivityManager.getInstance().addCurrentActivity(context, this);
         
         return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <T> AnnotatedType<T> createAnnotatedType(Class<T> type)
+    {
+        AnnotatedType<T> annotatedType = AnnotatedElementFactory.newAnnotatedType(type);
+        
+        return annotatedType;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public <T> CreationalContext<T> createCreationalContext(Contextual<T> contextual)
+    {        
+        return CreationalContextFactory.getInstance().getCreationalContext(contextual);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<Bean<?>> getBeans(Type beanType, Annotation... bindings)
+    {
+        if(ClassUtil.isTypeVariable(beanType))
+        {
+            throw new WebBeansConfigurationException("Exception in getBeans method. Bean type can not be TypeVariable");
+        }
+        
+        AnnotationUtil.checkBindingTypeConditions(bindings);
+        
+        return this.injectionResolver.implResolveByType(beanType, bindings);
+        
+    }
+
+    @Override
+    public Set<Bean<?>> getBeans(String name)
+    {        
+        return this.injectionResolver.implResolveByName(name);
+    }
+
+    @Override
+    public ELResolver getELResolver()
+    {
+        return new WebBeansELResolver();
+    }
+
+    @Override
+    public Object getInjectableReference(InjectionPoint injectionPoint, CreationalContext<?> context)
+    {
+        Object instance = null;
+        
+        if(injectionPoint == null)
+        {
+            return null;
+        }
+                
+        Annotation[] bindings = new Annotation[injectionPoint.getBindings().size()];
+        bindings = injectionPoint.getBindings().toArray(bindings);
+        
+        //Find the injection point Bean
+        Bean<?> bean = injectionResolver.getInjectionPointBean(injectionPoint);
+        
+        if(context != null && (context instanceof CreationalContextImpl))
+        {
+            CreationalContextImpl<?> creationalContext = (CreationalContextImpl<?>)context;
+            
+            instance = creationalContext.get(bean);
+            
+        }
+        
+        if(instance == null)
+        {
+            instance = getInstance(bean);
+        }
+        
+        return instance;
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<Annotation> getInterceptorBindingTypeDefinition(Class<? extends Annotation> bindingType)
+    {
+        Annotation[] annotations = AnnotationUtil.getInterceptorBindingMetaAnnotations(bindingType.getDeclaredAnnotations());
+        Set<Annotation> set = new HashSet<Annotation>();
+        
+        for(Annotation ann : annotations)
+        {
+            set.add(ann);
+        }
+        
+        return set;
+    }
+
+    @Override
+    public <X> Bean<? extends X> getMostSpecializedBean(Bean<X> bean)
+    {
+        Bean<? extends X> specialized = (Bean<? extends X>) WebBeansUtil.getMostSpecializedBean(this, bean);
+        
+        return specialized;
+    }
+
+    @Override
+    public Bean<?> getPassivationCapableBean(String id)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Object getReference(Bean<?> bean, Type beanType, CreationalContext<?> ctx)
+    {
+        Context context = null;
+        Object instance = null;
+
+        CreationalContext<Object> creationalContext = (CreationalContext<Object>)ctx;
+        
+        if(ctx == null)
+        {
+            creationalContext = CreationalContextFactory.getInstance().getCreationalContext(bean);
+        }
+        
+        /* @ScopeType is normal */
+        if (WebBeansUtil.isScopeTypeNormal(bean.getScopeType()))
+        {
+            if (this.proxyMap.containsKey(bean))
+            {
+                instance = this.proxyMap.get(bean);
+            }
+            else
+            {
+                instance = JavassistProxyFactory.createNewProxyInstance(bean);
+                this.proxyMap.put(bean, instance);
+            }
+            
+            //Push proxy instance into the creational context
+            creationalContext.push(instance);
+            
+        }
+        /* @ScopeType is not normal, like @Dependent */
+        else
+        {
+            context = getContext(bean.getScopeType());
+            instance = context.get((Bean<Object>)bean, creationalContext);                                
+        }
+        
+        return instance;
+    }
+
+    @Override
+    public ScopeType getScopeDefinition(Class<? extends Annotation> scopeType)
+    {
+        Annotation annotation = AnnotationUtil.getAnnotation(scopeType.getDeclaredAnnotations(), ScopeType.class);
+        
+        if(annotation != null)
+        {
+            return (ScopeType)annotation;
+        }
+        
+        return null;
+    }
+
+    
+    @Override
+    public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation> stereotype)
+    {
+        Annotation[] annotations = AnnotationUtil.getStereotypeMetaAnnotations(stereotype.getDeclaredAnnotations());
+        Set<Annotation> set = new HashSet<Annotation>();
+        
+        for(Annotation ann : annotations)
+        {
+            set.add(ann);
+        }
+        
+        return set;
+    }
+
+    @Override
+    public boolean isBindingType(Class<? extends Annotation> annotationType)
+    {
+        return AnnotationUtil.isBindingAnnotation(annotationType);
+    }
+
+    @Override
+    public boolean isInterceptorBindingType(Class<? extends Annotation> annotationType)
+    {
+        return AnnotationUtil.isInterceptorBindingAnnotation(annotationType);
+    }
+
+    @Override
+    public boolean isScopeType(Class<? extends Annotation> annotationType)
+    {
+        if(AnnotationUtil.isAnnotationExist(annotationType.getDeclaredAnnotations(), ScopeType.class))
+        {
+            return true;
+        }
+     
+        return false;
+    }
+
+    @Override
+    public boolean isStereotype(Class<? extends Annotation> annotationType)
+    {
+        if(AnnotationUtil.isAnnotationExist(annotationType.getDeclaredAnnotations(), Stereotype.class))
+        {
+            return true;
+        }
+     
+        return false;
+    }
+
+    @Override
+    public <X> Bean<? extends X> resolve(Set<Bean<? extends X>> beans)
+    { 
+        Set set = new HashSet<Bean<Object>>();
+        for(Bean<? extends X> obj : beans)
+        {
+            set.add(obj);
+        }
+        
+        set = this.injectionResolver.findByPrecedence(set);
+        
+        if(set.size() > 1)
+        {
+            set = this.injectionResolver.findBySpecialization(set);
+        }
+        
+        if(set.size() > 0 && set.size() > 1)
+        {
+            throw new AmbiguousResolutionException("Ambigious resolution");
+        }
+        
+        return (Bean<? extends X>)set.iterator().next();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void validate(InjectionPoint injectionPoint)
+    {
+        Bean<?> bean = injectionPoint.getBean();
+        //Check for correct injection type
+        this.injectionResolver.checkInjectionPointType(injectionPoint);
+        
+        Class<?> rawType = ClassUtil.getRawTypeForInjectionPoint(injectionPoint);
+        
+        //Comment out while testing TCK Events Test --- WBTCK27 jira./////
+        //Hack for EntityManager --> Solve in M3!!!!
+        if(rawType.equals(Event.class) || rawType.getSimpleName().equals("EntityManager"))
+        {
+            return;
+        }
+        /////////////////////////////////////////////////////////////////
+        
+        // check for InjectionPoint injection
+        if (rawType.equals(InjectionPoint.class))
+        {
+            Annotated annotated = injectionPoint.getAnnotated();
+            if (annotated.getAnnotations().size() == 1 && annotated.isAnnotationPresent(Current.class))
+            {
+                if (!bean.getScopeType().equals(Dependent.class))
+                {
+                    throw new WebBeansConfigurationException("Bean " + bean + "scope can not define other scope except @Dependent to inject InjectionPoint");
+                }
+            }
+        }
+        else
+        {
+            this.injectionResolver.checkInjectionPoints(injectionPoint);
+        }        
     }    
+        
 }
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ResolutionUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ResolutionUtil.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ResolutionUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ResolutionUtil.java Wed Jul  1 20:27:48 2009
@@ -50,7 +50,7 @@
         AnnotationUtil.checkBindingTypeConditions(bindingTypes);
     }
 
-    public static <T> void checkResolvedBeans(Set<Bean<T>> resolvedSet, Class<?> type, Annotation[] bindingTypes)
+    public static void checkResolvedBeans(Set<Bean<?>> resolvedSet, Class<?> type, Annotation[] bindingTypes)
     {
         if (resolvedSet.isEmpty())
         {
@@ -79,7 +79,7 @@
             throw new AmbiguousResolutionException("There is more than one api type with : " + type.getName());
         }
 
-        Bean<T> bean = resolvedSet.iterator().next();
+        Bean<?> bean = resolvedSet.iterator().next();
         WebBeansUtil.checkUnproxiableApiType(bean, bean.getScopeType().getAnnotation(ScopeType.class));
 
     }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java Wed Jul  1 20:27:48 2009
@@ -18,6 +18,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.ContextNotActiveException;
@@ -25,31 +26,53 @@
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.spi.Context;
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.webbeans.context.type.ContextTypes;
 
 /**
  * Abstract implementation of the {@link WebBeansContext} interfaces.
+ * 
+ * @see Context
+ * @see RequestContext
+ * @see DependentContext
+ * @see SessionContext
+ * @see ApplicationContext
+ * @see ConversationContext
  */
 public abstract class AbstractContext implements WebBeansContext
 {
+    /**Context status, active or not*/
     protected boolean active;
 
+    /**Context type*/
     protected ContextTypes type;
 
+    /**Context contextual instances*/
     protected Map<Contextual<?>, Object> componentInstanceMap = null;
 
+    /**Contextual Scope Type*/
     protected Class<? extends Annotation> scopeType;
+    
+    /**Contextual to CreationalContext Map*/
+    protected Map<Contextual<?>, CreationalContext<?>> creationalContextMap = new ConcurrentHashMap<Contextual<?>, CreationalContext<?>>();
 
+    /**
+     * Creates a new context instance
+     */
     protected AbstractContext()
     {
 
     }
 
+    /**
+     * Creates a new context with given scope type.
+     * 
+     * @param scopeType context scope type
+     */
     protected AbstractContext(Class<? extends Annotation> scopeType)
     {
         this.scopeType = scopeType;
@@ -57,6 +80,11 @@
 
     }
 
+    /**
+     * Creates a new context with given context type.
+     * 
+     * @param type context type
+     */
     protected AbstractContext(ContextTypes type)
     {
         this.type = type;
@@ -64,6 +92,11 @@
         setComponentInstanceMap();
     }
 
+    /**
+     * Configures scope type from context type.
+     * 
+     * @param type context type
+     */
     private void configureScopeType(ContextTypes type)
     {
         if (type.equals(ContextTypes.APPLICATION))
@@ -86,9 +119,16 @@
         {
             this.scopeType = ConversationScoped.class;
         }
+        else
+        {
+            throw new IllegalArgumentException("Not known scope type : " + type.toString());
+        }
 
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @SuppressWarnings("unchecked")
     public <T> T get(Contextual<T> component)
     {
@@ -97,6 +137,9 @@
         return (T) componentInstanceMap.get(component);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public <T> T get(Contextual<T> component, CreationalContext<T> creationalContext)
     {
         checkActive();
@@ -104,6 +147,9 @@
         return getInstance(component, creationalContext);
     }
 
+    /**
+     * {@inheritDoc} 
+     */
     @SuppressWarnings("unchecked")
     protected <T> T getInstance(Contextual<T> component, CreationalContext<T> creationalContext)
     {
@@ -128,7 +174,8 @@
 
                 if (instance != null)
                 {
-                    componentInstanceMap.put(component, instance);
+                    this.componentInstanceMap.put(component, instance);
+                    this.creationalContextMap.put(component, creationalContext);
                 }
                 
             }            
@@ -137,11 +184,6 @@
         return  instance;
     }
 
-    public <T> void remove(Contextual<T> component)
-    {
-        removeInstance(component);
-    }
-
     /**
      * Destroy the given web beans component instance.
      * 
@@ -149,15 +191,14 @@
      * @param component web beans component
      * @param instance component instance
      */
-    private <T> void destroyInstance(Bean<T> component, T instance)
+    private <T> void destroyInstance(Contextual<T> component, T instance,CreationalContext<T> creationalContext)
     {
-        component.destroy(instance);
+        //Destroy component
+        component.destroy(instance,creationalContext);
     }
-
+    
     /**
-     * Destroys the context.
-     * 
-     * @param <T>
+     * {@inheritDoc}
      */
     @SuppressWarnings("unchecked")
     public void destroy()
@@ -171,8 +212,11 @@
             component = it.next().getKey();
             
             Object instance = componentInstanceMap.get(component);
+            //Get creational context
+            CreationalContext<Object> cc = (CreationalContext<Object>)this.creationalContextMap.get(component);
 
-            destroyInstance((Bean<Object>) component, instance);
+            //Destroy instance
+            destroyInstance((Bean<Object>) component, instance, cc);
 
         }
         
@@ -180,14 +224,6 @@
         componentInstanceMap.clear();
     }
 
-    protected <T> void removeInstance(Contextual<T> component)
-    {
-        if (componentInstanceMap.get(component) != null)
-        {
-            componentInstanceMap.remove(component);
-        }
-    }
-
     /**
      * Gets context active flag.
      * 
@@ -209,33 +245,41 @@
     }
 
     /**
-     * Type of the context
+     * Type of the context.
      * 
-     * @return type
+     * @return type of the context
+     * @see ContextTypes
      */
     public ContextTypes getType()
     {
         return type;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public Map<Contextual<?>, Object> getComponentInstanceMap()
     {
         return componentInstanceMap;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public Class<? extends Annotation> getScopeType()
     {
 
         return this.scopeType;
     }
 
-    public <T> void remove(BeanManager container, Bean<T> component)
-    {
-        remove(component);
-    }
-
+    /**
+     * {@inheritDoc}
+     */
     protected abstract void setComponentInstanceMap();
     
+    /**
+     * Check that context is active or throws exception.
+     */
     protected void checkActive()
     {
         if (!active)
@@ -244,4 +288,4 @@
         }        
     }
 
-}
+}
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/WebBeansContext.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/WebBeansContext.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/WebBeansContext.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/WebBeansContext.java Wed Jul  1 20:27:48 2009
@@ -16,8 +16,6 @@
 import java.util.Map;
 
 import javax.enterprise.context.spi.Contextual;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.webbeans.context.type.ContextTypes;
 
@@ -27,22 +25,14 @@
  * @version $Rev$ $Date$
  */
 public interface WebBeansContext extends javax.enterprise.context.spi.Context
-{
-    /**
-     * Removes the given web beans component from the context.
-     * 
-     * @param <T> generic type
-     * @param component web beans component
-     */
-    public <T> void remove(Contextual<T> component);
-        
+{        
     /**
      * Destroys the context.
      */
     public void destroy();
     
     /**
-     * Return context type.
+     * Returns context type.
      * 
      * @return context type
      */
@@ -54,14 +44,5 @@
      * @return instance map
      */
     public Map<Contextual<?>, Object> getComponentInstanceMap();
-    
-    /**
-     * Remove given bean from context.
-     * 
-     * @param <T> type of bean
-     * @param container beans container
-     * @param component bean
-     */
-    public <T> void remove(BeanManager container, Bean<T> component);
-    
+        
 }
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java Wed Jul  1 20:27:48 2009
@@ -16,38 +16,59 @@
  */
 package org.apache.webbeans.context.creational;
 
+import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.Bean;
 
 import org.apache.webbeans.config.WebBeansFinder;
 
-public class CreationalContextFactory<T>
+/**
+ * Factory for {@link CreationalContext} instances.
+ * 
+ * @version $Rev$ $Date$
+ *
+ * @param <T> contextual type info
+ */
+public final class CreationalContextFactory<T>
 {
+    /**Ceational context that is used for generating other creational contexts*/
     private CreationalContextImpl<T> impl;
     
+    /**
+     * Creates a new <code>CreationalContextFactory</code> instance.
+     */
     public CreationalContextFactory()
     {
         impl = new CreationalContextImpl<T>();
     }
     
+    /**
+     * Gets singleton instance.
+     * 
+     * @return singleton factory per class loader per VM
+     */
     @SuppressWarnings("unchecked")
     public static CreationalContextFactory getInstance()
     {
         return (CreationalContextFactory)WebBeansFinder.getSingletonInstance(WebBeansFinder.SINGLETON_CREATIONAL_CONTEXT_FACTORY);
     }
     
-    public CreationalContext<T> getCreationalContext(Bean<T> bean)
+    /**
+     * Returns a new creational context for given contextual.
+     * 
+     * @param contextual contextual instance
+     * @return new creational context for given contextual
+     */
+    public CreationalContext<T> getCreationalContext(Contextual<T> contextual)
     {        
-        return impl.getCreationalContextImpl(bean);   
+        return impl.getCreationalContextImpl(contextual);   
     }
-    
-    public void removeCreationalContext(Bean<?> bean)
-    {
-        impl.remove(bean);
-    }
-    
+        
+    /**
+     * Clear all incomplete instance cache.
+     */
     public void clear()
     {
         impl.clear();
+        impl = null;
     }
-}
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java Wed Jul  1 20:27:48 2009
@@ -16,20 +16,28 @@
  */
 package org.apache.webbeans.context.creational;
 
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.Bean;
+
+import org.apache.webbeans.util.Asserts;
 
 /** {@inheritDoc} */
 public class CreationalContextImpl<T> implements CreationalContext<T>
 {
     /**Map of bean with its incomplete instance*/
-    private Map<Bean<?>,Object> incompleteInstancesMap = new ConcurrentHashMap<Bean<?>, Object>();
+    private Map<Contextual<?>,Object> incompleteInstancesMap = new ConcurrentHashMap<Contextual<?>, Object>();
 
-    /**Bean*/
-    private Bean<T> incompleteBean = null;
+    /**Contextual bean*/
+    private Contextual<T> incompleteBean = null;
+    
+    /**Contextual bean dependent instances*/
+    private Map<Object, Contextual<?>> dependentObjects = new WeakHashMap<Object, Contextual<?>>();
     
     /**
      * Package private
@@ -45,7 +53,7 @@
      * @param incompleteBean incomplete instance owner
      * @return new creational context
      */
-    protected CreationalContextImpl<T> getCreationalContextImpl(Bean<T> incompleteBean)
+    protected CreationalContextImpl<T> getCreationalContextImpl(Contextual<T> incompleteBean)
     {
         CreationalContextImpl<T> impl = new CreationalContextImpl<T>();        
         
@@ -67,13 +75,33 @@
         
     }
     
+    
+    /**
+     * Adds given dependent instance to the map.
+     * 
+     * @param dependent dependent contextual
+     * @param instance dependent instance
+     */
+    public <K> void addDependent(Contextual<K> dependent, Object instance)
+    {
+        Asserts.assertNotNull(dependent,"dependent parameter cannot be null");
+        
+        if(instance != null)
+        {
+            synchronized (this.dependentObjects)
+            {
+                this.dependentObjects.put(instance, dependent);   
+            }            
+        }
+    }
+    
     /**
      * Returns incomplete instance.
      * 
      * @param incompleteBean instance owner
      * @return incomplete instance
      */
-    public Object get(Bean<?> incompleteBean)
+    public Object get(Contextual<?> incompleteBean)
     {
         return incompleteInstancesMap.get(incompleteBean);
     }
@@ -84,12 +112,37 @@
      * 
      * @param bean owner bean
      */
-    public void remove(Bean<?> bean)
+    public void  remove()
     {
-        if(this.incompleteInstancesMap.containsKey(bean))
+        if(this.incompleteInstancesMap.containsKey(this.incompleteBean))
         {
-            this.incompleteInstancesMap.remove(bean);   
+            this.incompleteInstancesMap.remove(this.incompleteBean);
+            this.incompleteInstancesMap = null;
+        }        
+    }
+    
+    /**
+     * Removes dependent objects.
+     */
+    @SuppressWarnings("unchecked")
+    private void  removeDependents()
+    {
+        //Clear its dependence objects
+        synchronized (this.dependentObjects)
+        {
+            Collection<?> values = this.dependentObjects.keySet();
+            Iterator<?> iterator = values.iterator();
+            
+            while(iterator.hasNext())
+            {
+                T instance = (T)iterator.next();
+                Contextual<T> dependent = (Contextual<T>)this.dependentObjects.get(instance);
+                dependent.destroy(instance, (CreationalContext<T>)this);                
+            }
+            
+            this.dependentObjects.clear();
         }
+        
     }
     
     /**
@@ -106,7 +159,7 @@
     @Override
     public void release()
     {
-        remove(this.incompleteBean);
+        removeDependents();        
         
     }
 

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java Wed Jul  1 20:27:48 2009
@@ -112,10 +112,11 @@
 
     }
 
+    @SuppressWarnings("unchecked")
     public Conversation getCurrentConversation()
     {
 
-        Bean<Conversation> bean = ManagerImpl.getManager().resolveByType(Conversation.class, new CurrentLiteral()).iterator().next();
+        Bean<Conversation> bean = (Bean<Conversation>)ManagerImpl.getManager().resolveByType(Conversation.class, new CurrentLiteral()).iterator().next();
         Conversation conversation = ManagerImpl.getManager().getInstance(bean);
 
         return conversation;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecorator.java Wed Jul  1 20:27:48 2009
@@ -244,9 +244,9 @@
         }
     }
 
-    public void destroy(T instance)
+    public void destroy(T instance,CreationalContext<T> context)
     {
-        delegateComponent.destroy(instance);
+        delegateComponent.destroy(instance,context);
     }
 
     @Override
@@ -356,7 +356,7 @@
     }
 
 	@Override
-	public Set<Annotation> getStereotypes() 
+	public Set<Class<? extends Annotation>> getStereotypes() 
 	{
 		return this.delegateComponent.getStereotypes();
 	}
@@ -366,5 +366,12 @@
 		return this.delegateComponent.getTypes();
 	}
 
+    @Override
+    public boolean isPolicy()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
  
-}
+}
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/el/WebBeansELResolver.java Wed Jul  1 20:27:48 2009
@@ -23,7 +23,6 @@
 import javax.el.PropertyNotWritableException;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
 import javax.servlet.jsp.JspApplicationContext;
 
 import org.apache.webbeans.container.ManagerImpl;
@@ -81,7 +80,7 @@
     @Override
     public Object getValue(ELContext context, Object obj, Object property) throws NullPointerException, PropertyNotFoundException, ELException
     {
-        BeanManager manager = ManagerImpl.getManager();
+        ManagerImpl manager = ManagerImpl.getManager();
 
         Object object = null;
         Bean<?> bean = null;
@@ -133,7 +132,8 @@
         {
             T inst = (T) instance;
 
-            bean.destroy(inst);
+            //TODO Creational Context
+            bean.destroy(inst,null);
         }
     }
 

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/BeanObserverImpl.java Wed Jul  1 20:27:48 2009
@@ -24,12 +24,12 @@
 import javax.enterprise.context.spi.Context;
 import javax.enterprise.event.Observer;
 import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.webbeans.annotation.CurrentLiteral;
 import org.apache.webbeans.component.AbstractComponent;
 import org.apache.webbeans.component.ObservesMethodsOwner;
 import org.apache.webbeans.container.InjectionResolver;
+import org.apache.webbeans.container.ManagerImpl;
 import org.apache.webbeans.container.activity.ActivityManager;
 import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.logger.WebBeansLogger;
@@ -103,8 +103,8 @@
 
         try
         {
-            BeanManager manager = ActivityManager.getInstance().getCurrentActivity();
-            specializedComponent = WebBeansUtil.getMostSpecializedBean(manager, baseComponent);        
+            ManagerImpl manager = ActivityManager.getInstance().getCurrentActivity();
+            specializedComponent = (AbstractComponent<Object>)WebBeansUtil.getMostSpecializedBean(manager, baseComponent);        
             Context context = manager.getContext(specializedComponent.getScopeType());
             
             if(this.ifExist)
@@ -160,7 +160,8 @@
         {
             if (baseComponent.getScopeType().equals(Dependent.class))
             {
-                baseComponent.destroy(object);
+                //TODO Creational Context
+                baseComponent.destroy(object,null);
             }
         }
 
@@ -180,7 +181,7 @@
 
         List<Object> list = new ArrayList<Object>();
 
-        BeanManager manager = ActivityManager.getInstance().getCurrentActivity();
+        ManagerImpl manager = ActivityManager.getInstance().getCurrentActivity();
 
         if (types.length > 0)
         {

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/xml/BeanObserverXMLImpl.java Wed Jul  1 20:27:48 2009
@@ -19,8 +19,6 @@
 import java.util.List;
 import java.util.Set;
 
-import javax.enterprise.inject.spi.BeanManager;
-
 import org.apache.webbeans.component.ObservesMethodsOwner;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.container.ManagerImpl;
@@ -47,7 +45,7 @@
     protected List<Object> getMethodArguments(Object event)
     {
         List<Object> params = new ArrayList<Object>();
-        BeanManager manager = ManagerImpl.getManager();
+        ManagerImpl manager = ManagerImpl.getManager();
         for (XMLInjectionPointModel model : observersParameters)
         {
             Set<Annotation> setBindingTypes = model.getBindingTypes();

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Wed Jul  1 20:27:48 2009
@@ -65,6 +65,7 @@
      * @param annotations binding annotations
      * @return bean instance
      */
+    @SuppressWarnings("unchecked")
     public T get()
     {
         T instance = null;
@@ -72,12 +73,12 @@
         Annotation[] anns = new Annotation[this.bindingAnnotations.size()];
         anns = this.bindingAnnotations.toArray(anns);
         
-        Set<Bean<T>> beans = resolveBeans();
+        Set<Bean<?>> beans = resolveBeans();
 
         ResolutionUtil.checkResolvedBeans(beans, ClassUtil.getClazz(this.injectionClazz),anns);
 
-        Bean<T> bean = beans.iterator().next();
-        instance = ManagerImpl.getManager().getInstance(bean);
+        Bean<?> bean = beans.iterator().next();
+        instance = (T)ManagerImpl.getManager().getInstance(bean);
 
         return instance;
     }
@@ -87,13 +88,13 @@
      * 
      * @return set of resolved beans
      */
-    private Set<Bean<T>> resolveBeans()
+    private Set<Bean<?>> resolveBeans()
     {
         Annotation[] anns = new Annotation[this.bindingAnnotations.size()];
         anns = this.bindingAnnotations.toArray(anns);
 
         InjectionResolver resolver = InjectionResolver.getInstance();
-        Set<Bean<T>> beans = resolver.implResolveByType(this.injectionClazz, anns);
+        Set<Bean<?>> beans = resolver.implResolveByType(this.injectionClazz, anns);
         
         return beans;
     }
@@ -104,7 +105,7 @@
     @Override
     public boolean isAmbiguous()
     {
-        Set<Bean<T>> beans = resolveBeans();
+        Set<Bean<?>> beans = resolveBeans();
         
         return beans.size() > 1 ? true : false;
     }
@@ -115,7 +116,7 @@
     @Override
     public boolean isUnsatisfied()
     {
-        Set<Bean<T>> beans = resolveBeans();
+        Set<Bean<?>> beans = resolveBeans();
         
         return beans.size() == 0 ? true : false;
     }
@@ -196,13 +197,14 @@
      * {@inheritDoc}
      */
     @Override
+    @SuppressWarnings("unchecked")
     public Iterator<T> iterator()
     {
-        Set<Bean<T>> beans = resolveBeans();
+        Set<Bean<?>> beans = resolveBeans();
         Set<T> instances = new HashSet<T>();
-        for(Bean<T> bean : beans)
+        for(Bean<?> bean : beans)
         {
-            T instance = ManagerImpl.getManager().getInstance(bean);
+            T instance = (T)ManagerImpl.getManager().getInstance(bean);
             instances.add(instance);
         }
         

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java Wed Jul  1 20:27:48 2009
@@ -281,9 +281,9 @@
 
     }
 
-    public void destroy(T instance)
+    public void destroy(T instance,CreationalContext<T> context)
     {
-        delegateComponent.destroy(instance);
+        delegateComponent.destroy(instance,context);
     }
 
     @Override
@@ -385,7 +385,7 @@
     }
 
 	@Override
-	public Set<Annotation> getStereotypes() 
+	public Set<Class<? extends Annotation>> getStereotypes() 
 	{ 
 		return this.delegateComponent.getStereotypes();
 	}
@@ -414,4 +414,11 @@
 		
 		return method != null ? true : false;
 	}
+
+    @Override
+    public boolean isPolicy()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }
\ No newline at end of file

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java Wed Jul  1 20:27:48 2009
@@ -50,10 +50,12 @@
             for (Type generic : types)
             {
                 Class<?> type = (Class<?>)ClassUtil.getClazz(generic);
+                
                 if (type.isInterface())
                 {
                     interfaceList.add(type);
                 }
+                
                 else if ((superClass == null) || (superClass.isAssignableFrom(type) && type != Object.class))
                 {
                     superClass = type;

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Wed Jul  1 20:27:48 2009
@@ -40,6 +40,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.enterprise.inject.spi.InjectionPoint;
+
 import org.apache.webbeans.exception.WebBeansException;
 
 /**
@@ -1778,5 +1780,28 @@
         }
     }
     
+    /**
+     * Returns injection point raw type.
+     * 
+     * @param injectionPoint injection point definition
+     * @return injection point raw type
+     */
+    public static Class<?> getRawTypeForInjectionPoint(InjectionPoint injectionPoint)
+    {
+        Class<?> rawType = null;
+        Type type = injectionPoint.getType();
+        
+        if(type instanceof Class)
+        {
+            rawType = (Class<?>) type;
+        }
+        else if(type instanceof ParameterizedType)
+        {
+            ParameterizedType pt = (ParameterizedType)type;            
+            rawType = (Class<?>)pt.getRawType();                                                
+        }
+        
+        return rawType;
+    }
     
 }

Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=790362&r1=790361&r2=790362&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Wed Jul  1 20:27:48 2009
@@ -1109,7 +1109,7 @@
     {
         Asserts.assertNotNull(component, "component parameter can not be null");
 
-        Set<Annotation> set = component.getStereotypes();
+        Set<Annotation> set = component.getOwbStereotypes();
         Annotation[] anns = new Annotation[set.size()];
         anns = set.toArray(anns);
         if (AnnotationUtil.isStereoTypeMetaAnnotationExist(anns))
@@ -1125,7 +1125,7 @@
         Asserts.assertNotNull(component, "component parameter can not be null");
         if (isComponentHasStereoType(component))
         {
-            Set<Annotation> set = component.getStereotypes();
+            Set<Annotation> set = component.getOwbStereotypes();
             Annotation[] anns = new Annotation[set.size()];
             anns = set.toArray(anns);
 
@@ -1915,17 +1915,17 @@
         
     }
     
-    public static <T> AbstractComponent<T> getMostSpecializedBean(BeanManager manager, AbstractComponent<T> component)
+    public static Bean<?> getMostSpecializedBean(BeanManager manager, Bean<?> component)
     {
-        Set<Bean<T>> beans = manager.resolveByType(component.getReturnType(), AnnotationUtil.getAnnotationsFromSet(component.getBindings()));
+        Set<Bean<?>> beans = manager.getBeans(component.getBeanClass(), AnnotationUtil.getAnnotationsFromSet(component.getBindings()));
                 
-        for(Bean<T> bean : beans)
+        for(Bean<?> bean : beans)
         {
-            AbstractComponent<T> find = (AbstractComponent<T>)bean;
+            Bean<?> find = bean;
             
             if(!find.equals(component))
             {
-                if(AnnotationUtil.isAnnotationExistOnClass(find.getReturnType(), Specializes.class))
+                if(AnnotationUtil.isAnnotationExistOnClass(find.getBeanClass(), Specializes.class))
                 {
                     return getMostSpecializedBean(manager, find);
                 }