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