Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
 Sat Apr  6 19:04:24 2013
@@ -44,6 +44,8 @@ import javax.enterprise.context.spi.Cont
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Default;
 import javax.enterprise.inject.Stereotype;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
@@ -63,12 +65,14 @@ import javax.naming.Reference;
 import javax.naming.Referenceable;
 import javax.naming.StringRefAddr;
 import org.apache.webbeans.component.AbstractOwbBean;
+import org.apache.webbeans.component.BeanAttributesImpl;
 import org.apache.webbeans.component.EnterpriseBeanMarker;
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.component.JmsBeanMarker;
 import org.apache.webbeans.component.NewBean;
 import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.component.WebBeansType;
+import org.apache.webbeans.component.creation.BeanAttributesBuilder;
 import org.apache.webbeans.component.third.ThirdpartyBeanImpl;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -512,6 +516,33 @@ public class BeanManagerImpl implements 
     /**
      * {@inheritDoc}
      */
+    public <T> BeanAttributesImpl<T> createBeanAttributes(AnnotatedType<T> 
type)
+    {
+        return 
BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(type).build();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public <T> BeanAttributesImpl<T> createBeanAttributes(AnnotatedMember<T> 
member)
+    {
+        if (member instanceof AnnotatedField)
+        {
+            return 
BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes((AnnotatedField<T>)member).build();
+        }
+        else if (member instanceof AnnotatedMethod)
+        {
+            return 
BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes((AnnotatedMethod<T>)member).build();
+        }
+        else
+        {
+            throw new IllegalArgumentException("Unsupported member type " + 
member.getClass().getName());
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public <T> CreationalContext<T> createCreationalContext(Contextual<T> 
contextual)
     {
         if (contextual instanceof SerializableBean)

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/DecoratorInjectionTargetFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/DecoratorInjectionTargetFactory.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/DecoratorInjectionTargetFactory.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/DecoratorInjectionTargetFactory.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.container;
+
+import java.lang.reflect.Modifier;
+
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionTarget;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.AbstractDecoratorInjectionTarget;
+
+public class DecoratorInjectionTargetFactory<T> extends 
InjectionTargetFactoryImpl<T>
+{
+
+    public DecoratorInjectionTargetFactory(AnnotatedType<T> annotatedType, 
WebBeansContext webBeansContext)
+    {
+        super(annotatedType, webBeansContext);
+    }
+
+    public InjectionTarget<T> createInjectionTarget(Bean<T> bean)
+    {
+        if 
(Modifier.isAbstract(getAnnotatedType().getJavaClass().getModifiers()))
+        {
+            return new AbstractDecoratorInjectionTarget<T>(
+                    getAnnotatedType(),
+                    createInjectionPoints(bean),
+                    getWebBeansContext(),
+                    getPostConstructMethods(),
+                    getPreDestroyMethods());
+        }
+        else
+        {
+            return super.createInjectionTarget(bean);
+        }
+    }
+}

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InjectionTargetFactoryImpl.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.container;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.util.Asserts;
+
+public class InjectionTargetFactoryImpl<T>
+{
+
+    private AnnotatedType<T> annotatedType;
+    private WebBeansContext webBeansContext;
+
+    public InjectionTargetFactoryImpl(AnnotatedType<T> annotatedType, 
WebBeansContext webBeansContext)
+    {
+        Asserts.assertNotNull(annotatedType, "AnnotatedType may not be null");
+        Asserts.assertNotNull(webBeansContext, "WebBeansContext may not be 
null");
+        this.annotatedType = annotatedType;
+        this.webBeansContext = webBeansContext;
+    }
+
+    public InjectionTarget<T> createInjectionTarget(Bean<T> bean)
+    {
+        InjectionTarget<T> injectionTarget
+            = new InjectionTargetImpl<T>(annotatedType, 
createInjectionPoints(bean), webBeansContext, getPostConstructMethods(), 
getPreDestroyMethods());
+        return 
webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEvent(injectionTarget,
 annotatedType).getInjectionTarget();
+    }
+
+    protected Set<InjectionPoint> createInjectionPoints(Bean<T> bean)
+    {
+        Set<InjectionPoint> injectionPoints = new HashSet<InjectionPoint>();
+        for (InjectionPoint injectionPoint: 
webBeansContext.getInjectionPointFactory().buildInjectionPoints(bean, 
annotatedType))
+        {
+            injectionPoints.add(injectionPoint);
+        }
+        return injectionPoints;
+    }
+
+    protected AnnotatedType<T> getAnnotatedType()
+    {
+        return annotatedType;
+    }
+
+    protected WebBeansContext getWebBeansContext()
+    {
+        return webBeansContext;
+    }
+
+    protected List<AnnotatedMethod<?>> getPostConstructMethods()
+    {
+        return 
webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, 
PostConstruct.class, true);
+    }
+
+    protected List<AnnotatedMethod<?>> getPreDestroyMethods()
+    {
+        return 
webBeansContext.getInterceptorUtil().getLifecycleMethods(annotatedType, 
PreDestroy.class, false);
+    }
+}

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InterceptorInjectionTargetFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InterceptorInjectionTargetFactory.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InterceptorInjectionTargetFactory.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/InterceptorInjectionTargetFactory.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.container;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+
+import org.apache.webbeans.config.WebBeansContext;
+
+public class InterceptorInjectionTargetFactory<T> extends 
InjectionTargetFactoryImpl<T>
+{
+
+    public InterceptorInjectionTargetFactory(AnnotatedType<T> annotatedType, 
WebBeansContext webBeansContext)
+    {
+        super(annotatedType, webBeansContext);
+    }
+
+    protected List<AnnotatedMethod<?>> getPostConstructMethods()
+    {
+        return Collections.<AnnotatedMethod<?>>emptyList();
+    }
+
+    protected List<AnnotatedMethod<?>> getPreDestroyMethods()
+    {
+        return Collections.<AnnotatedMethod<?>>emptyList();
+    }
+}

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ProducerFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ProducerFactory.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ProducerFactory.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ProducerFactory.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.container;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Producer;
+
+/**
+ * This is a preview to CDI 1.1
+ * when we implement CDI 1.1 this interface can be removed
+ */
+public interface ProducerFactory<T>
+{
+    public Producer<T> createProducer(Bean<T> bean);
+}

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java
 Sat Apr  6 19:04:24 2013
@@ -41,7 +41,7 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.util.TypeLiteral;
 
 import org.apache.webbeans.annotation.AnyLiteral;
-import org.apache.webbeans.component.InjectionTargetBean;
+import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansException;
@@ -502,7 +502,7 @@ public final class NotificationManager
      * @param bean bean instance 
      * @return ObserverMethod
      */
-    public <T> ObserverMethod<?> 
getObservableMethodForAnnotatedMethod(AnnotatedMethod<?> annotatedMethod, 
InjectionTargetBean<T> bean)
+    public <T> ObserverMethod<?> 
getObservableMethodForAnnotatedMethod(AnnotatedMethod<?> annotatedMethod, 
AbstractOwbBean<T> bean)
     {
         Asserts.assertNotNull(annotatedMethod, "annotatedMethod parameter can 
not be null");
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
 Sat Apr  6 19:04:24 2013
@@ -92,7 +92,7 @@ public class ObserverMethodImpl<T> imple
     private final static Logger logger = 
WebBeansLoggerFacade.getLogger(ObserverMethodImpl.class);
 
     /**Observer owner bean that defines observer method*/
-    private final InjectionTargetBean<?> bean;
+    private final AbstractOwbBean<?> bean;
 
     /**Event observer method*/
     private Method observerMethod;
@@ -130,7 +130,7 @@ public class ObserverMethodImpl<T> imple
      * @param observerMethod method
      * @param ifExist if exist parameter
      */
-    public ObserverMethodImpl(InjectionTargetBean<?> bean, Method 
observerMethod, boolean ifExist)
+    public ObserverMethodImpl(AbstractOwbBean<?> bean, Method observerMethod, 
boolean ifExist)
     {
         this.bean = bean;
         this.observerMethod = observerMethod;
@@ -160,7 +160,7 @@ public class ObserverMethodImpl<T> imple
      * @param qualifiers
      * @param observedEventType
      */
-    public ObserverMethodImpl(InjectionTargetBean<?> bean, Method 
observerMethod, boolean ifExist,
+    public ObserverMethodImpl(AbstractOwbBean<?> bean, Method observerMethod, 
boolean ifExist,
                                  Annotation[] qualifiers, Type 
observedEventType)
     {
         this.bean = bean;

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
 Sat Apr  6 19:04:24 2013
@@ -67,7 +67,7 @@ public final class InterceptorUtil
         List<Class> classes = 
getReverseClassHierarchy(annotatedType.getJavaClass());
         for (Class clazz : classes)
         {
-            for (AnnotatedMethod annotatedMethod : annotatedType.getMethods())
+            for (AnnotatedMethod<?> annotatedMethod : 
annotatedType.getMethods())
             {
                 if (annotatedMethod.getDeclaringType().getJavaClass() != clazz)
                 {

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.portable;
+
+import java.lang.reflect.Constructor;
+import java.util.List;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.apache.webbeans.config.WebBeansContext;
+
+public class AbstractDecoratorInjectionTarget<T> extends InjectionTargetImpl<T>
+{
+    private Class<T> proxySubClass = null;
+
+    public AbstractDecoratorInjectionTarget(AnnotatedType<T> annotatedType, 
Set<InjectionPoint> points, WebBeansContext webBeansContext,
+                                             List<AnnotatedMethod<?>> 
postConstructMethods, List<AnnotatedMethod<?>> preDestroyMethods)
+    {
+        super(annotatedType, points, webBeansContext, postConstructMethods, 
preDestroyMethods);
+    }
+
+    @Override
+    protected AnnotatedConstructor<T> createConstructor()
+    {
+        // create proxy subclass
+        ClassLoader classLoader = this.getClass().getClassLoader();
+        Class<T> classToProxy = annotatedType.getJavaClass();
+
+        proxySubClass = 
webBeansContext.getSubclassProxyFactory().createImplementedSubclass(classLoader,
 classToProxy);
+
+        //X TODO what about @Inject constructors?
+        Constructor<T> ct = 
webBeansContext.getWebBeansUtil().getNoArgConstructor(proxySubClass);
+        return new AnnotatedConstructorImpl<T>(webBeansContext, ct, 
annotatedType);
+    }
+
+}

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ExtensionProducer.java
 Sat Apr  6 19:04:24 2013
@@ -18,12 +18,9 @@
  */
 package org.apache.webbeans.portable;
 
-import java.util.Set;
-
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
@@ -33,10 +30,10 @@ public class ExtensionProducer<T> extend
 {
 
     public ExtensionProducer(AnnotatedType<T> annotatedType,
-                             Set<InjectionPoint> points,
+                             Bean<T> owner,
                              WebBeansContext webBeansContext)
     {
-        super(annotatedType, points, webBeansContext, null, null);
+        super(annotatedType, 
webBeansContext.getInjectionPointFactory().buildInjectionPoints(owner, 
annotatedType), webBeansContext, null, null);
     }
 
     @Override

Modified: 
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/ProducerFieldProducer.java?rev=1465291&r1=1465290&r2=1465291&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/ProducerFieldProducer.java
 Sat Apr  6 19:04:24 2013
@@ -20,7 +20,7 @@ package org.apache.webbeans.portable;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
-import java.util.Set;
+import java.util.Collections;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
@@ -29,9 +29,9 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.component.AbstractOwbBean;
-import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.util.Asserts;
 import org.apache.webbeans.util.WebBeansUtil;
 
 public class ProducerFieldProducer<T, P> extends AbstractProducer<T>
@@ -39,13 +39,16 @@ public class ProducerFieldProducer<T, P>
 
     private Bean<P> owner;
     private WebBeansContext webBeansContext;
-    private AnnotatedField<P> producerField;
+    private AnnotatedField<? super P> producerField;
 
-    public ProducerFieldProducer(OwbBean<P> owner, AnnotatedField<P> 
producerField, Set<InjectionPoint> points)
+    public ProducerFieldProducer(Bean<P> owner, AnnotatedField<? super P> 
producerField, WebBeansContext context)
     {
-        super(points);
+        super(Collections.<InjectionPoint>emptySet());
+        Asserts.assertNotNull(owner, "owner may not be null");
+        Asserts.assertNotNull(producerField, "field may not be null");
+        Asserts.assertNotNull(context, "WebBeansContext may not be null");
         this.owner = owner;
-        this.webBeansContext = owner.getWebBeansContext();
+        this.webBeansContext = context;
         this.producerField = producerField;
     }
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
 Sat Apr  6 19:04:24 2013
@@ -25,7 +25,6 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 
-import org.apache.webbeans.component.OwbBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.inject.InjectableMethod;
@@ -39,22 +38,32 @@ public class ProducerMethodProducer<T, P
 
     private Bean<P> owner;
     private WebBeansContext webBeansContext;
-    private AnnotatedMethod<P> producerMethod;
-    private AnnotatedMethod<P> disposalMethod;
+    private AnnotatedMethod<? super P> producerMethod;
+    private AnnotatedMethod<? super P> disposalMethod;
 
-    public ProducerMethodProducer(OwbBean<P> owner, AnnotatedMethod<P> 
producerMethod, AnnotatedMethod<P> disposerMethod, Set<InjectionPoint> points)
+    public ProducerMethodProducer(Bean<P> owner,
+                                  AnnotatedMethod<? super P> producerMethod,
+                                  AnnotatedMethod<? super P> disposerMethod,
+                                  Set<InjectionPoint> points,
+                                  WebBeansContext webBeansContext)
     {
         super(points);
-        Asserts.assertNotNull(producerMethod);
+        Asserts.assertNotNull(owner, "owner may not be null");
+        Asserts.assertNotNull(producerMethod, "method may not be null");
+        Asserts.assertNotNull(webBeansContext, "WebBeansContext may not be 
null");
+        if (!producerMethod.isStatic())
+        {
+            Asserts.assertNotNull(owner, "owner may not be null for non-static 
producer method");
+        }
         this.owner = owner;
-        this.webBeansContext = owner.getWebBeansContext();
+        this.webBeansContext = webBeansContext;
         this.producerMethod = producerMethod;
         this.disposalMethod = disposerMethod;
     }
-    
-    public void setOwner(Bean<P> owner)
+
+    public void specializeBy(Bean<P> bean)
     {
-        this.owner = owner;
+        owner = bean;
     }
 
     @Override

Added: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProxyProducerFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProxyProducerFactory.java?rev=1465291&view=auto
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProxyProducerFactory.java
 (added)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProxyProducerFactory.java
 Sat Apr  6 19:04:24 2013
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.portable;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Producer;
+import javax.inject.Provider;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.container.ProducerFactory;
+import org.apache.webbeans.util.Asserts;
+
+public class ProviderBasedProxyProducerFactory<T> implements ProducerFactory<T>
+{
+
+    private Provider<T> provider;
+    private Class<T> providerType;
+    private WebBeansContext webBeansContext;
+    
+    public ProviderBasedProxyProducerFactory(Provider<T> provider, Class<T> 
providerType, WebBeansContext context)
+    {
+        Asserts.assertNotNull(provider);
+        Asserts.assertNotNull(providerType);
+        Asserts.assertNotNull(context);
+        this.provider = provider;
+        this.providerType = providerType;
+        this.webBeansContext = context;
+    }
+
+    @Override
+    public Producer<T> createProducer(Bean<T> bean)
+    {
+        return new ProviderBasedProxyProducer<T>(webBeansContext, 
providerType, provider);
+    }
+}

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
 Sat Apr  6 19:04:24 2013
@@ -48,6 +48,7 @@ import javax.enterprise.inject.Specializ
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
 import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
@@ -68,6 +69,7 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.inject.spi.ProcessProducerField;
 import javax.enterprise.inject.spi.ProcessProducerMethod;
 import javax.enterprise.inject.spi.ProcessSessionBean;
+import javax.enterprise.inject.spi.Producer;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -98,7 +100,6 @@ import org.apache.webbeans.component.cre
 import org.apache.webbeans.component.creation.ObserverMethodsBuilder;
 import org.apache.webbeans.component.creation.ProducerFieldBeansBuilder;
 import org.apache.webbeans.component.creation.ProducerMethodBeansBuilder;
-import org.apache.webbeans.component.creation.ProducerMethodProducerBuilder;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.InjectionResolver;
@@ -107,7 +108,6 @@ import org.apache.webbeans.exception.inj
 import 
org.apache.webbeans.exception.inject.InconsistentSpecializationException;
 import org.apache.webbeans.inject.AlternativesManager;
 import org.apache.webbeans.plugins.PluginLoader;
-import org.apache.webbeans.portable.ProducerFieldProducer;
 import org.apache.webbeans.portable.ProducerMethodProducer;
 import org.apache.webbeans.portable.events.discovery.ErrorStack;
 import org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;
@@ -473,9 +473,9 @@ public final class WebBeansUtil
     public <T> ExtensionBean<T> createExtensionComponent(Class<T> clazz)
     {
         Asserts.nullCheckForClass(clazz);
-        ExtensionBeanBuilder<T> extensionBeanCreator = new 
ExtensionBeanBuilder<T>(webBeansContext, clazz);
-        ExtensionBean<T> bean = extensionBeanCreator.getBean();
-        new ObserverMethodsBuilder<T, InjectionTargetBean<T>>(webBeansContext, 
bean.getAnnotatedType()).defineObserverMethods(bean);
+        ExtensionBeanBuilder<T> extensionBeanBuilder = new 
ExtensionBeanBuilder<T>(webBeansContext, clazz);
+        ExtensionBean<T> bean = extensionBeanBuilder.getBean();
+        new ObserverMethodsBuilder<T, InjectionTargetBean<T>>(webBeansContext, 
extensionBeanBuilder.getAnnotatedType()).defineObserverMethods(bean);
         return bean;
     }
 
@@ -756,7 +756,7 @@ public final class WebBeansUtil
                         if (producerBean.getParent() == superBean && 
producerBean.getProducer() instanceof ProducerMethodProducer)
                         {
                             ProducerMethodProducer<?, ?> producer = 
(ProducerMethodProducer<?, ?>) producerBean.getProducer();
-                            producer.setOwner((Bean) comp);
+                            producer.specializeBy((Bean) comp);
                         }
                     }
                 }
@@ -1170,15 +1170,13 @@ public final class WebBeansUtil
      * @param bean bean instance
      * @return event
      */
-    public <T> GProcessInjectionTarget 
fireProcessInjectionTargetEvent(InjectionTargetBean<T> bean)
+    public <T> ProcessInjectionTarget<T> 
fireProcessInjectionTargetEvent(InjectionTarget<T> injectionTarget, 
AnnotatedType<T> annotatedType)
     {
-        GProcessInjectionTarget processInjectionTargetEvent = 
createProcessInjectionTargetEvent(bean);
+        GProcessInjectionTarget processInjectionTargetEvent = new 
GProcessInjectionTarget(injectionTarget, annotatedType);
         return fireProcessInjectionTargetEvent(processInjectionTargetEvent);
-
-
     }
 
-    public GProcessInjectionTarget 
fireProcessInjectionTargetEvent(GProcessInjectionTarget 
processInjectionTargetEvent)
+    private GProcessInjectionTarget 
fireProcessInjectionTargetEvent(GProcessInjectionTarget 
processInjectionTargetEvent)
     {
         //Fires ProcessInjectionTarget
         
webBeansContext.getBeanManagerImpl().fireEvent(processInjectionTargetEvent, 
AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
@@ -1186,12 +1184,6 @@ public final class WebBeansUtil
         return processInjectionTargetEvent;
     }
 
-    public <T> GProcessInjectionTarget 
createProcessInjectionTargetEvent(InjectionTargetBean<T> bean)
-    {
-        return new GProcessInjectionTarget(bean.getInjectionTarget(), 
bean.getAnnotatedType());
-    }
-
-
     /**
      * Returns <code>ProcessInjectionTarget</code> event.
      * @param <T> bean type
@@ -1208,26 +1200,13 @@ public final class WebBeansUtil
 
     }
 
-
-    public GProcessProducer 
fireProcessProducerEventForMethod(ProducerMethodBean<?> producerMethod, 
AnnotatedMethod<?> method)
-    {
-        ProducerMethodProducerBuilder builder = new 
ProducerMethodProducerBuilder(producerMethod);
-        GProcessProducer producerEvent = new 
GProcessProducer(builder.build(method), method);
-
-        //Fires ProcessProducer for methods
-        webBeansContext.getBeanManagerImpl().fireEvent(producerEvent, 
AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
-
-        return producerEvent;
-    }
-
-    public GProcessProducer 
fireProcessProducerEventForField(ProducerFieldBean<?> producerField, 
AnnotatedField<?> field)
+    public <T> Producer<T> fireProcessProducerEvent(Producer<T> producer, 
AnnotatedMember<?> annotatedMember)
     {
-        GProcessProducer producerEvent = new GProcessProducer(new 
ProducerFieldProducer(producerField.getParent(), field, 
producerField.getInjectionPoints()), field);
-
-        //Fires ProcessProducer for fields
-        webBeansContext.getBeanManagerImpl().fireEvent(producerEvent, 
AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
-
-        return producerEvent;
+        GProcessProducer processProducerEvent = new GProcessProducer(producer, 
annotatedMember);
+        //Fires ProcessProducer
+        webBeansContext.getBeanManagerImpl().fireEvent(processProducerEvent, 
AnnotationUtil.EMPTY_ANNOTATION_ARRAY);
+        webBeansContext.getWebBeansUtil().inspectErrorStack("There are errors 
that are added by ProcessProducer event observers. Look at logs for further 
details");
+        return processProducerEvent.getProducer();
     }
 
     public void fireProcessProducerMethodBeanEvent(Map<ProducerMethodBean<?>, 
AnnotatedMethod<?>> annotatedMethods, AnnotatedType<?> annotatedType)

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/ConversationDecoratorTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/ConversationDecoratorTest.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/ConversationDecoratorTest.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/ConversationDecoratorTest.java
 Sat Apr  6 19:04:24 2013
@@ -32,8 +32,10 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.newtests.decorators.common.ConversationDecorator;
 import org.apache.webbeans.spi.ConversationService;
+import org.junit.Ignore;
 import org.junit.Test;
 
+@Ignore("Should it really be possible to decorate a Conversation?")
 public class ConversationDecoratorTest extends AbstractUnitTest
 {
     public static final String PACKAGE_NAME = 
ConversationDecoratorTest.class.getPackage().getName();

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
 Sat Apr  6 19:04:24 2013
@@ -524,11 +524,6 @@ public abstract class TestContext implem
         BeanAttributesImpl<T> beanAttributes = 
BeanAttributesBuilder.forContext(getWebBeansContext()).newBeanAttibutes(annotatedType).build();
         ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new 
ManagedBeanBuilder<T, ManagedBean<T>>(webBeansContext, annotatedType, 
beanAttributes);
         ManagedBean<T> component = managedBeanCreator.getBean();
-        List<AnnotatedMethod<?>> postConstructMethods
-            = 
webBeansContext.getInterceptorUtil().getLifecycleMethods(component.getAnnotatedType(),
 PostConstruct.class, true);
-        List<AnnotatedMethod<?>> preDestroyMethods
-            = 
webBeansContext.getInterceptorUtil().getLifecycleMethods(component.getAnnotatedType(),
 PreDestroy.class, false);
-        component.setProducer(new 
InjectionTargetImpl<T>(component.getAnnotatedType(), 
component.getInjectionPoints(), webBeansContext, postConstructMethods, 
preDestroyMethods));
 
         
webBeansContext.getWebBeansUtil().setInjectionTargetBeanEnableFlag(component);
 

Modified: 
openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java?rev=1465291&r1=1465290&r2=1465291&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java
 (original)
+++ 
openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java
 Sat Apr  6 19:04:24 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.webbeans.jms.component;
 
+import javax.enterprise.inject.spi.Producer;
 import javax.jms.Destination;
 
 import org.apache.webbeans.component.AbstractOwbBean;
@@ -41,4 +42,10 @@ public class JmsBean<T> extends Abstract
     {
         return this.jmsModel;
     }
+
+    @Override
+    public Producer<T> getProducer()
+    {
+        return null;
+    }
 }


Reply via email to