Author: struberg
Date: Sat Jul 28 15:52:37 2012
New Revision: 1366699

URL: http://svn.apache.org/viewvc?rev=1366699&view=rev
Log:
OWB-689 radically simplify OWBInjector

the CreationalContext of the owner gets used now.
That we we don't need to do cleanup ourselfs.

Modified:
    
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java

Modified: 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
 (original)
+++ 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
 Sat Jul 28 15:52:37 2012
@@ -96,9 +96,6 @@ public class OpenWebBeansEjbInterceptor 
     /**Non contextual Intercepted methods*/
     protected transient Map<Method, List<InterceptorData>> 
nonCtxInterceptedMethodMap = new WeakHashMap<Method, List<InterceptorData>>();
     
-    /**Injector*/
-    private transient OWBInjector injector;
-    
     /**Resolved ejb beans for non-contexctual interceptors*/
     private transient Map<Class<?>, BaseEjbBean<?>> resolvedBeans = new 
HashMap<Class<?>, BaseEjbBean<?>>();
     
@@ -303,10 +300,10 @@ public class OpenWebBeansEjbInterceptor 
         if 
(webBeansContext.getOpenWebBeansConfiguration().isUseEJBInterceptorInjection())
         {
             Object instance = context.getTarget();
-            this.injector = new OWBInjector(webBeansContext);
+            OWBInjector injector = new OWBInjector(webBeansContext);
             try
             {
-                this.injector.inject(instance, this.cc);
+                injector.inject(instance, this.cc);
             }
             catch (Exception e)
             {
@@ -326,11 +323,6 @@ public class OpenWebBeansEjbInterceptor 
 
         lifecycleCommon(context, InterceptionType.PRE_DESTROY);
 
-        if (this.injector != null)
-        {
-            this.injector.destroy();
-        }
-
         this.interceptedMethodMap.clear();
         this.resolvedBeans.clear();
         this.nonCtxInterceptedMethodMap.clear();

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
 Sat Jul 28 15:52:37 2012
@@ -306,26 +306,11 @@ public class CreationalContextImpl<T> im
             dependentObjects = null;
         }
 
-        Collection<List<EjbInterceptorContext>> interceptorValues = null;
+        // the instances are managed as normal dependent instances already
         if (ejbInterceptors != null)
         {
-            interceptorValues = ejbInterceptors.values();
-        }
-
-        if(interceptorValues != null)
-        {
-            for(List<EjbInterceptorContext> interceptors : interceptorValues)
-            {
-                if(interceptors != null)
-                {
-                    for(EjbInterceptorContext intereptor : interceptors)
-                    {
-                        intereptor.getInjectorInstance().destroy();
-                    }
-                }                
-            }
-
             ejbInterceptors.clear();
+            ejbInterceptors = null;
         }
     }
     

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
 Sat Jul 28 15:52:37 2012
@@ -20,7 +20,6 @@ package org.apache.webbeans.context.crea
 
 import java.io.Serializable;
 
-import org.apache.webbeans.inject.OWBInjector;
 
 public class EjbInterceptorContext implements Serializable
 {
@@ -28,8 +27,6 @@ public class EjbInterceptorContext imple
 
     private Object interceptorInstance;
 
-    private OWBInjector injectorInstance;
-
     private Class<?> interceptorClass;
 
     public EjbInterceptorContext()
@@ -69,27 +66,10 @@ public class EjbInterceptorContext imple
         this.interceptorInstance = interceptorInstance;
     }
 
-    /**
-     * @return the injectorInstance
-     */
-    public OWBInjector getInjectorInstance()
-    {
-        return injectorInstance;
-    }
-
-    /**
-     * @param injectorInstance the injectorInstance to set
-     */
-    public void setInjectorInstance(OWBInjector injectorInstance)
-    {
-        this.injectorInstance = injectorInstance;
-    }
-    
     @Override
     public String toString() 
     {
         return "EjbInterceptorContext [interceptorClass=" + interceptorClass
-            + ", interceptorInstance=" + interceptorInstance
-            + ", injectorInstance=" + injectorInstance + "]";
+            + ", interceptorInstance=" + interceptorInstance + "]";
     }
 }

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
 Sat Jul 28 15:52:37 2012
@@ -18,35 +18,10 @@
  */
 package org.apache.webbeans.inject;
 
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
 import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Provider;
-
-import org.apache.webbeans.component.EventBean;
-import org.apache.webbeans.component.InjectionPointBean;
-import org.apache.webbeans.component.InjectionTargetWrapper;
-import org.apache.webbeans.component.InstanceBean;
+import javax.enterprise.inject.spi.BeanManager;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.container.InjectionResolver;
-import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.util.ClassUtil;
-import org.apache.webbeans.util.WebBeansAnnotatedTypeUtil;
-import org.apache.webbeans.util.WebBeansUtil;
 
 /**
  * Injects dependencies of the given Java EE component
@@ -55,17 +30,8 @@ import org.apache.webbeans.util.WebBeans
  * @version $Rev$ $Date$
  *
  */
-public final class OWBInjector implements Serializable
+public final class OWBInjector
 {
-    //Serial id
-    private static final long serialVersionUID = 1L;
-    
-    /**Creational context to hold dependent instances*/
-    private CreationalContextImpl<?> ownerCreationalContext = null;
-    
-    /**Underlying javaee instance*/
-    private Object javaEEInstance;
-
     private final WebBeansContext webBeansContext;
 
     /**
@@ -77,278 +43,29 @@ public final class OWBInjector implement
         //No operation
         this.webBeansContext = webBeansContext;
     }
-    
-    /**
-     * Inject dependencies of given instance.
-     * @param javaEeComponentInstance instance
-     * @return this injector
-     * @throws Exception if exception occurs
-     */
-    public  OWBInjector inject(Object javaEeComponentInstance) throws Exception
-    {
-        return inject(javaEeComponentInstance,null);
-    }
-    
+
     /**
      * Inject dependencies of given instance.
-     * @param javaEeComponentInstance instance
-     * @param creationalContext context
+     * @param instanceUnderInjection instance
+     * @param ownerCreationalContext CreationalContext of the owner
      * @return this injector
      * @throws Exception if exception occurs
      */
     @SuppressWarnings("unchecked")
-    public  OWBInjector inject(Object javaEeComponentInstance, 
CreationalContext<?> creationalContext) throws Exception
+    public  OWBInjector inject(Object instanceUnderInjection, 
CreationalContext<?> ownerCreationalContext) throws Exception
     {
-        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
-        try
-        {
-            javaEEInstance = javaEeComponentInstance;
-            if(creationalContext == null)
-            {
-                ownerCreationalContext = (CreationalContextImpl<?>) 
beanManager.createCreationalContext(null);
-            }
-
-            Class<Object> injectableComponentClass = 
(Class<Object>)javaEeComponentInstance.getClass();
-
-            //Look for custom InjectionTarget
-            InjectionTargetWrapper<Object> wrapper = 
beanManager.getInjectionTargetWrapper(injectableComponentClass);
-            if(wrapper != null)
-            {
-                wrapper.inject(javaEeComponentInstance, 
(CreationalContext<Object>) ownerCreationalContext);
-                return this;
-            }
-            
-            AnnotatedType<Object> annotated = 
beanManager.createAnnotatedType(injectableComponentClass);
-            Set<InjectionPoint> injectionPoints = 
WebBeansAnnotatedTypeUtil.getJavaEeComponentInstanceInjectionPoints(webBeansContext,
 annotated);
-            if(injectionPoints != null && injectionPoints.size() > 0)
-            {
-                for(InjectionPoint injectionPoint : injectionPoints)
-                {
-                    if(injectionPoint.getMember() instanceof Method)
-                    {
-                        Method method = (Method)injectionPoint.getMember();
-                        
-                        //Get injected method arguments
-                        List<Object> parameters = 
getInjectedMethodParameterReferences(injectionPoint, beanManager, 
injectionPoints);
-                        
-                        //Set method
-                        ClassUtil.callInstanceMethod(method, 
javaEeComponentInstance, parameters.toArray(new Object[parameters.size()]));
-                        
-                    }
-                    else if(injectionPoint.getMember() instanceof Field)
-                    {
-                        //Get injected object ref
-                        Object object = 
getInjectedObjectReference(injectionPoint, beanManager);                    
-                        
-                        //Set field
-                        Field field = (Field)injectionPoint.getMember();
-                        setField(javaEeComponentInstance, field, object);
-                    }                        
-                }
-                
-                return this;
-            }
-            
-            
-        }
-        catch(Exception e)
-        {
-            throw e;
-        }
-        
-        return null;
-    }
+        CreationalContext<?> creationalContext = ownerCreationalContext;
+        BeanManager bm = webBeansContext.getBeanManagerImpl();
 
-
-    /**
-     * Release dependents.
-     */
-    @SuppressWarnings("unchecked")
-    public void destroy()
-    {
-        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
-        
-        //Look for custom InjectionTarget
-        InjectionTargetWrapper<Object> wrapper = 
beanManager.getInjectionTargetWrapper((Class<Object>)javaEEInstance.getClass());
-        if(wrapper != null)
-        {
-           wrapper.dispose(javaEEInstance);
-            javaEEInstance = null;
-            ownerCreationalContext = null;
-        }
-        
-        else
-        {
-            if(ownerCreationalContext != null)
-            {
-                ownerCreationalContext.release();
-                ownerCreationalContext = null;
-            }            
-        }        
-    }
-
-    private void setField(Object instance, Field field, Object value)
-    {
-        if(!field.isAccessible())
-        {
-            
webBeansContext.getSecurityService().doPrivilegedSetAccessible(field, true);
-        }
-
-        try
-        {
-            field.set(instance, value);
-        }
-        catch (IllegalArgumentException e)
-        {
-            throw new WebBeansException(e);
-        }
-        catch (IllegalAccessException e)
+        if(creationalContext == null)
         {
-            throw new WebBeansException(e);
+            creationalContext = bm.createCreationalContext(null);
         }
-    }
 
-    /**
-     * Gets injected object reference.
-     * @param injectionPoint injection point of javaee instance
-     * @param beanManager bean manager implementation
-     * @return injected reference
-     */
-    private Object getInjectedObjectReference(InjectionPoint injectionPoint, 
BeanManagerImpl beanManager)
-    {
-        Object object = null;
-        boolean injectionPointBeanLocalSetOnStack = false;
-        
-        //Injected contextual beam
-        InjectionResolver injectionResolver = 
beanManager.getInjectionResolver();
+        AnnotatedType annotatedType = 
bm.createAnnotatedType(instanceUnderInjection.getClass());
+        bm.createInjectionTarget(annotatedType).inject(instanceUnderInjection, 
creationalContext);
 
-        Bean<?> injectedBean = (Bean<?>) 
injectionResolver.getInjectionPointBean(injectionPoint);
-        
-        if(isInstanceProviderInjection(injectionPoint))
-        {
-            InstanceBean.local.set(injectionPoint);
-        }
-        
-        else if(isEventProviderInjection(injectionPoint))
-        {
-            EventBean.local.set(injectionPoint);
-        }        
-        
-        else if(WebBeansUtil.isDependent(injectedBean))
-        {
-            
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(injectionPoint.getType())))
-            {
-                injectionPointBeanLocalSetOnStack = 
InjectionPointBean.setThreadLocal(injectionPoint);
-            }
-        }
-        
-        object = beanManager.getInjectableReference(injectionPoint, 
ownerCreationalContext);
-        if (injectionPointBeanLocalSetOnStack )
-        {
-            InjectionPointBean.unsetThreadLocal();
-        }
-        
-        return object;
-    }
-    
-    /**
-     * Gets initializer method parameters.
-     * @param injectionPoint javaee component 
-     * injection point
-     * @param beanManager bean manager
-     * @param injectionPoints all injection points
-     * @return injected method injected arguments
-     */
-    private List<Object> getInjectedMethodParameterReferences(InjectionPoint 
injectionPoint, BeanManagerImpl beanManager, Set<InjectionPoint> 
injectionPoints)
-    {
-        Method method = (Method)injectionPoint.getMember();
-        List<InjectionPoint> injectedPoints = getInjectedPoints(method, 
injectionPoints);        
-        List<Object> list = new ArrayList<Object>();                        
-        for(int i=0;i<injectedPoints.size();i++)
-        {
-            for(InjectionPoint point : injectedPoints)
-            {                
-                AnnotatedParameter<?> parameter = 
(AnnotatedParameter<?>)point.getAnnotated();
-                if(parameter.getPosition() == i)
-                {
-                    Object instance = 
getInjectedObjectReference(injectionPoint, beanManager);
-                    list.add(instance);    
-                    break;
-                }
-            }
-        }        
-        
-        return list;
-    }
-    
-    /**
-     * Gets injection point of given methods.
-     * @param method injection point member
-     * @param injectionPoints all injection points
-     * @return method injection points
-     */
-    private List<InjectionPoint> getInjectedPoints(Method method, 
Set<InjectionPoint> injectionPoints)
-    {
-        List<InjectionPoint> points = new ArrayList<InjectionPoint>();
-        
-        for(InjectionPoint ip : injectionPoints)
-        {
-            if(ip.getMember().equals(method))
-            {
-                points.add(ip);
-            }
-        }
-        
-        return points;
-        
-    }
-    
-    /**
-     * Returns true if injection point is instance injection point
-     * false otherwise.
-     * @param injectionPoint injection point
-     * @return true if injection point is instance injection point
-     */
-    private boolean isInstanceProviderInjection(InjectionPoint injectionPoint)
-    {
-        Type type = injectionPoint.getType();
-        
-        if (type instanceof ParameterizedType)
-        {
-            ParameterizedType pt = (ParameterizedType) type;            
-            Class<?> clazz = (Class<?>) pt.getRawType();
-            
-            if(Provider.class.isAssignableFrom(clazz))
-            {
-                return true;
-            }
-        }
-        
-        return false;
-    }
-    
-    /**
-     * Returns true if injection point is event injection point
-     * false otherwise.
-     * @param injectionPoint injection point
-     * @return true if injection point is event injection point
-     */
-    private boolean isEventProviderInjection(InjectionPoint injectionPoint)
-    {
-        Type type = injectionPoint.getType();
-        
-        if (type instanceof ParameterizedType)
-        {
-            ParameterizedType pt = (ParameterizedType) type;            
-            Class<?> clazz = (Class<?>) pt.getRawType();
-            
-            if(clazz.isAssignableFrom(Event.class))
-            {
-                return true;
-            }
-        }
-        
-        return false;
+        return this;
     }
 
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
 Sat Jul 28 15:52:37 2012
@@ -18,18 +18,13 @@
  */
 package org.apache.webbeans.intercept;
 
-import java.io.Serializable;
 import java.util.Comparator;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
 
-public class InterceptorDataComparator implements Comparator<InterceptorData>, 
Serializable
+public class InterceptorDataComparator implements Comparator<InterceptorData>
 {
-
-    /** default serial version */
-    private static final long serialVersionUID = 1L;
-
     private final WebBeansContext instance;
 
     public InterceptorDataComparator(WebBeansContext webBeansContext)

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
 Sat Jul 28 15:52:37 2012
@@ -437,35 +437,34 @@ public class InterceptorDataImpl impleme
             return interceptor;
         }
 
-        EjbInterceptorContext ctx ;
+        EjbInterceptorContext ejbInterceptorContext ;
         Object interceptor = null;
         // control for this InterceptorData is defined by interceptor class
         if (definedInInterceptorClass)
         {
-            ctx = ownerCreationalContext.getEjbInterceptor(ownerInstance, 
interceptorClass);
-            if (ctx == null)
+            ejbInterceptorContext = 
ownerCreationalContext.getEjbInterceptor(ownerInstance, interceptorClass);
+            if (ejbInterceptorContext == null)
             {
                 interceptor = 
webBeansContext.getWebBeansUtil().newInstanceForced(interceptorClass);
                 try
                 {
                     OWBInjector injector = new OWBInjector(webBeansContext);
-                    injector.inject(interceptor);
+                    injector.inject(interceptor, ownerCreationalContext);
 
-                    ctx = new EjbInterceptorContext();
-                    ctx.setInjectorInstance(injector);
-                    ctx.setInterceptorInstance(interceptor);
-                    ctx.setInterceptorClass(interceptorClass);
+                    ejbInterceptorContext = new EjbInterceptorContext();
+                    ejbInterceptorContext.setInterceptorInstance(interceptor);
+                    
ejbInterceptorContext.setInterceptorClass(interceptorClass);
                 }
                 catch (Exception e)
                 {
                     logger.log(Level.SEVERE, 
WebBeansLoggerFacade.constructMessage(OWBLogConst.ERROR_0022, 
interceptorClass), e);
                 }
 
-                ownerCreationalContext.addEjbInterceptor(ownerInstance, ctx);
+                ownerCreationalContext.addEjbInterceptor(ownerInstance, 
ejbInterceptorContext);
             }
             else
             {
-                interceptor = ctx.getInterceptorInstance();
+                interceptor = ejbInterceptorContext.getInterceptorInstance();
             }
         }
         return interceptor;

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
 Sat Jul 28 15:52:37 2012
@@ -40,14 +40,12 @@ public class JavaEeInjectionTest extends
         MockInstance instance = new MockInstance();
         WebBeansContext webBeansContext = WebBeansContext.getInstance();
         OWBInjector injector = new OWBInjector(webBeansContext);
-        injector.inject(instance);
+        injector.inject(instance, null);
         
         Assert.assertNotNull(instance.getBeanManager());
         Assert.assertNotNull(instance.getSample());
         Assert.assertNotNull(instance.getViaMethod());
         
-        injector.destroy();
-        
         shutDownContainer();
         
     }


Reply via email to