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);
}
}