You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/04/06 21:04:28 UTC
svn commit: r1465291 [2/2] - in /openwebbeans/trunk:
webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/
webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/
webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/ webb...
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;
+ }
}