Author: rmannibucau
Date: Fri Mar 13 17:42:41 2015
New Revision: 1666526

URL: http://svn.apache.org/r1666526
Log:
merging more or less resource and producer field logic

Added:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceProducerFactory.java
      - copied, changed from r1666473, 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ResourceProducer.java
      - copied, changed from r1666473, 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducerFactory.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java?rev=1666526&r1=1666525&r2=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
 Fri Mar 13 17:42:41 2015
@@ -20,30 +20,24 @@ package org.apache.webbeans.component;
 
 import java.lang.annotation.Annotation;
 
-import org.apache.webbeans.portable.ProviderBasedProducerFactory;
 import org.apache.webbeans.spi.ResourceInjectionService;
 import org.apache.webbeans.spi.api.ResourceReference;
 
-import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.spi.BeanAttributes;
+import javax.enterprise.inject.spi.ProducerFactory;
 
 public class ResourceBean<X, T extends Annotation> extends ProducerFieldBean<X>
 {
-    
+
     private ResourceReference<X,T> resourceReference = null;
 
     public ResourceBean(InjectionTargetBean<?> ownerComponent,
                         ResourceReference<X, T> resourceReference,
                         BeanAttributes<X> beanAttributes,
-                        Class<X> beanClass)
+                        Class<X> beanClass,
+                        ProducerFactory<X> producerFactory)
     {
-        super(ownerComponent,
-              beanAttributes,
-              beanClass,
-              new 
ProviderBasedProducerFactory<X>(!Dependent.class.equals(beanAttributes.getScope()),
-                      new ResourceProvider<X>(resourceReference, 
ownerComponent.getWebBeansContext()),
-                                                       beanClass,
-                                                       
ownerComponent.getWebBeansContext()));
+        super(ownerComponent, beanAttributes, beanClass, producerFactory);
         this.resourceReference = resourceReference;
     }
     
@@ -55,6 +49,8 @@ public class ResourceBean<X, T extends A
     /**
      * Called after deserialization to get a new instance for some type of 
resource bean instance that are
      * not serializable.
+     *
+     * TODO: broken if producer is wrapped but surely better than actually 
serializing
      * 
      * @return a new instance of this resource bean.
      */

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java?rev=1666526&r1=1666525&r2=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
 Fri Mar 13 17:42:41 2015
@@ -35,7 +35,7 @@ import java.util.Set;
 
 public class FieldProducerFactory<P> extends BaseProducerFactory<P>
 {
-    private AnnotatedField<? super P> producerField;
+    protected AnnotatedField<? super P> producerField;
 
     public FieldProducerFactory(AnnotatedField<? super P> producerField, 
Bean<P> parent, WebBeansContext webBeansContext)
     {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java?rev=1666526&r1=1666525&r2=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerFieldBeanBuilder.java
 Fri Mar 13 17:42:41 2015
@@ -32,20 +32,6 @@ public class ProducerFieldBeanBuilder<T,
         super(owner, annotated, beanAttributes);
     }
 
-    protected AnnotatedField<?> getSuperAnnotated()
-    {
-        AnnotatedField<?> thisField = annotatedMember;
-        for (AnnotatedField<?> superField: getSuperType().getFields())
-        {
-            if 
(thisField.getJavaMember().getName().equals(superField.getJavaMember().getName())
-                && thisField.getBaseType().equals(superField.getBaseType()))
-            {
-                return superField;
-            }
-        }
-        return null;
-    }
-
     @Override
     protected <X> P createBean(InjectionTargetBean<X> owner, Class<T> 
beanClass)
     {

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java?rev=1666526&r1=1666525&r2=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceBeanBuilder.java
 Fri Mar 13 17:42:41 2015
@@ -20,11 +20,13 @@ package org.apache.webbeans.component.cr
 
 import java.lang.annotation.Annotation;
 
+import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.BeanAttributes;
 
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.component.ResourceBean;
+import org.apache.webbeans.component.ResourceProvider;
 import org.apache.webbeans.spi.api.ResourceReference;
 
 public class ResourceBeanBuilder<T, R extends Annotation> extends 
ProducerFieldBeanBuilder<T, ResourceBean<T, R>>
@@ -41,6 +43,13 @@ public class ResourceBeanBuilder<T, R ex
     @Override
     protected <X> ResourceBean<T, R> createBean(InjectionTargetBean<X> owner, 
Class<T> beanClass)
     {
-        return new ResourceBean<T, R>(owner, resourceRef, beanAttributes, 
beanClass);
+        return new ResourceBean<T, R>(
+                owner, resourceRef, beanAttributes, beanClass,
+                new ResourceProducerFactory(
+                        !Dependent.class.equals(beanAttributes.getScope()),
+                        owner,
+                        new ResourceProvider<T>(resourceRef, 
owner.getWebBeansContext()), beanClass, owner.getWebBeansContext(),
+                        annotatedMember,
+                        resourceRef));
     }
 }

Copied: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceProducerFactory.java
 (from r1666473, 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java)
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceProducerFactory.java?p2=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceProducerFactory.java&p1=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java&r1=1666473&r2=1666526&rev=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/FieldProducerFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ResourceProducerFactory.java
 Fri Mar 13 17:42:41 2015
@@ -18,67 +18,37 @@
  */
 package org.apache.webbeans.component.creation;
 
+import org.apache.webbeans.component.ResourceProvider;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.portable.ProducerFieldProducer;
-import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.portable.ProviderBasedProducerFactory;
+import org.apache.webbeans.portable.ResourceProducer;
+import org.apache.webbeans.spi.api.ResourceReference;
 
 import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.Producer;
-import javax.inject.Inject;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Set;
 
-public class FieldProducerFactory<P> extends BaseProducerFactory<P>
+public class ResourceProducerFactory<P> extends ProviderBasedProducerFactory<P>
 {
-    private AnnotatedField<? super P> producerField;
-
-    public FieldProducerFactory(AnnotatedField<? super P> producerField, 
Bean<P> parent, WebBeansContext webBeansContext)
+    private final AnnotatedField<? super P> member;
+    private final Bean<P> owner;
+    private final ResourceReference<?, ?> ref;
+
+    public ResourceProducerFactory(boolean dependent, Bean<P> owner,
+                                   ResourceProvider<P> provider, Class<P> 
clazz,
+                                   WebBeansContext wbc, AnnotatedField<? super 
P> annotatedMember,
+                                   ResourceReference<?, ?> resourceRef)
     {
-        super(parent, webBeansContext);
-        Asserts.assertNotNull(producerField, "producer method may not be 
null");
-
-        if (producerField.isAnnotationPresent(Inject.class))
-        {
-            throw new IllegalArgumentException("producer field has @Inject 
annotation: " + producerField);
-        }
-
-        final Type type = producerField.getJavaMember().getGenericType();
-        if (ParameterizedType.class.isInstance(type))
-        {
-            for (final Type arg : 
ParameterizedType.class.cast(type).getActualTypeArguments())
-            {
-                if (ClassUtil.isWildCardType(arg))
-                {
-                    throw new IllegalArgumentException("Wildcard are 
forbidden: " + type);
-                }
-            }
-        }
-
-        this.producerField = producerField;
-        defineDisposalMethod();
+        super(dependent, provider, clazz, wbc);
+        this.member = annotatedMember;
+        this.owner = owner;
+        this.ref = resourceRef;
     }
 
     @Override
     public <T> Producer<T> createProducer(Bean<T> bean)
     {
-        final Set<InjectionPoint> disposalIPs = getInjectionPoints(bean);
-        final Producer<T> producer = new ProducerFieldProducer<T, P>(parent, 
producerField, disposalMethod, disposalIPs, webBeansContext);
-        return 
webBeansContext.getWebBeansUtil().fireProcessProducerEvent(producer, 
producerField);
-    }
-
-    public Class<?> getReturnType()
-    {
-        return producerField.getJavaMember().getType();
-    }
-
-    @Override
-    protected AnnotatedMember<? super P> producerType()
-    {
-        return producerField;
+        return webBeansContext.getWebBeansUtil().fireProcessProducerEvent(
+                new ResourceProducer<T, P>(owner, member, webBeansContext, 
ref), member);
     }
 }

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducerFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducerFactory.java?rev=1666526&r1=1666525&r2=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducerFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProducerFactory.java
 Fri Mar 13 17:42:41 2015
@@ -29,11 +29,12 @@ import org.apache.webbeans.util.Asserts;
 public class ProviderBasedProducerFactory<P> implements ProducerFactory<P>
 {
 
-    private Provider<?> provider;
     private Class<?> providerType;
-    private WebBeansContext webBeansContext;
     private boolean proxy;
-    
+
+    protected Provider<?> provider;
+    protected WebBeansContext webBeansContext;
+
     public ProviderBasedProducerFactory(boolean proxy, Provider<?> provider, 
Class<?> providerType, WebBeansContext context)
     {
         Asserts.assertNotNull(provider);

Copied: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ResourceProducer.java
 (from r1666473, 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java)
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ResourceProducer.java?p2=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ResourceProducer.java&p1=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java&r1=1666473&r2=1666526&rev=1666526&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ResourceProducer.java
 Fri Mar 13 17:42:41 2015
@@ -18,107 +18,40 @@
  */
 package org.apache.webbeans.portable;
 
-import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.util.Asserts;
-import org.apache.webbeans.util.WebBeansUtil;
+import org.apache.webbeans.spi.ResourceInjectionService;
+import org.apache.webbeans.spi.api.ResourceReference;
 
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.Map;
 import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.Interceptor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
 
-public class ProducerFieldProducer<T, P> extends BaseProducerProducer<T, P>
+public class ResourceProducer<T, P> extends ProducerFieldProducer<T, P>
 {
-    private AnnotatedField<? super P> producerField;
+    private ResourceReference<?, ?> ref;
+    private boolean isStatic;
 
-    public ProducerFieldProducer(Bean<P> owner,
-                                 AnnotatedField<? super P> producerField,
-                                 AnnotatedMethod<? super P> disposerMethod,
-                                 Set<InjectionPoint> disposalIPs,
-                                 WebBeansContext webBeansContext)
+    public ResourceProducer(Bean<P> owner, AnnotatedField<? super P> 
producerField,
+                            WebBeansContext webBeansContext, 
ResourceReference<?, ?> ref)
     {
-        super(owner, disposerMethod, Collections.<InjectionPoint>emptySet(), 
disposalIPs, webBeansContext);
-        if (owner == null && !producerField.isStatic())
-        {
-            throw new IllegalArgumentException("owner may not be null");
-        }
-        Asserts.assertNotNull(producerField, "field may not be null");
-        this.producerField = producerField;
+        super(owner, producerField, null, 
Collections.<InjectionPoint>emptySet(), webBeansContext);
+        this.isStatic = 
Modifier.isStatic(producerField.getJavaMember().getModifiers());
+        this.ref = ref;
     }
 
     @Override
     protected T produce(Map<Interceptor<?>, ?> interceptors, 
CreationalContextImpl<T> creationalContext)
     {
-        T instance = null;
-        P parentInstance = null;
-        CreationalContext<P> parentCreational = null;
-        try
-        {
-            parentCreational = 
webBeansContext.getBeanManagerImpl().createCreationalContext(owner);
-            
-            Field field = producerField.getJavaMember();
-            if (!field.isAccessible())
-            {
-                
webBeansContext.getSecurityService().doPrivilegedSetAccessible(field, true);
-            }
-
-            if (Modifier.isStatic(field.getModifiers()))
-            {
-                instance = (T) field.get(null);
-            }
-            else
-            { 
-                parentInstance = 
getParentInstanceFromContext(parentCreational);
-                
-                instance = (T) field.get(parentInstance);
-            }
-        }
-        catch(Exception e)
-        {
-            throw new WebBeansException(e);
-        }
-        finally
+        if (!isStatic)
         {
-            if (owner != null && owner.getScope().equals(Dependent.class))
-            {
-                owner.destroy(parentInstance, parentCreational);
-            }
+            return super.produce(interceptors, creationalContext);
         }
 
-        return instance;
-
-    }
-    
-    @SuppressWarnings("unchecked")
-    protected P getParentInstanceFromContext(CreationalContext<?> 
creationalContext)
-    {
-        P  parentInstance;
-
-        Bean<?> specialize = 
WebBeansUtil.getMostSpecializedBean(webBeansContext.getBeanManagerImpl(), 
(AbstractOwbBean<T>) owner);
-
-        if (specialize != null)
-        {
-            parentInstance = (P) 
webBeansContext.getBeanManagerImpl().getContext(specialize.getScope()).
-                    get((Bean<Object>)specialize,(CreationalContext<Object>) 
creationalContext);
-        }
-        else
-        {
-            parentInstance = (P) 
webBeansContext.getBeanManagerImpl().getContext(
-                    owner.getScope()).get((Bean<Object>)owner, 
(CreationalContext<Object>) creationalContext);
-        }
-
-        return parentInstance;
-
+        return (T) 
webBeansContext.getService(ResourceInjectionService.class).getResourceReference(ref);
     }
 }


Reply via email to