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/01/15 22:41:13 UTC

svn commit: r1433675 - in /openwebbeans/trunk: webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/ webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ webbeans-...

Author: arne
Date: Tue Jan 15 21:41:13 2013
New Revision: 1433675

URL: http://svn.apache.org/viewvc?rev=1433675&view=rev
Log:
OWB-755: Created AbstractDecoratorInjectionTarget

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractDecoratorInjectionTarget.java
Modified:
    openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java

Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java?rev=1433675&r1=1433674&r2=1433675&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/EjbBeanBuilder.java Tue Jan 15 21:41:13 2013
@@ -18,9 +18,11 @@
  */
 package org.apache.webbeans.ejb.common.component;
 
+import java.util.List;
 import java.util.Set;
 
 import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
@@ -78,7 +80,9 @@ public abstract class EjbBeanBuilder<T, 
     @Override
     protected InjectionTarget<T> buildInjectionTarget(AnnotatedType<T> annotatedType,
                                                       Set<InjectionPoint> points,
-                                                      WebBeansContext webBeansContext)
+                                                      WebBeansContext webBeansContext,
+                                                      List<AnnotatedMethod<?>> postConstructMethods,
+                                                      List<AnnotatedMethod<?>> preDestroyMethods)
     {
         return new AbstractEjbInjectionTarget<T>(annotatedType, points, webBeansContext)
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java?rev=1433675&r1=1433674&r2=1433675&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ManagedBean.java Tue Jan 15 21:41:13 2013
@@ -29,9 +29,6 @@ import javax.enterprise.inject.spi.Annot
 import javax.enterprise.inject.spi.Decorator;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.decorator.AbstractDecoratorMethodHandler;
-import org.apache.webbeans.inject.InjectableConstructor;
 import org.apache.webbeans.intercept.InterceptorData;
 
 /**
@@ -78,22 +75,7 @@ public class ManagedBean<T> extends Inje
     @Override
     protected T createComponentInstance(CreationalContext<T> creationalContext)
     {
-        Constructor<T> con = getConstructor();
-        if (con == null)
-        {
-            con = webBeansContext.getWebBeansUtil().getNoArgConstructor(getReturnType());
-        }
-        InjectableConstructor<T> ic = new InjectableConstructor<T>(con, getInjectionTarget(), (CreationalContextImpl<T>) creationalContext);
-
-        T instance = ic.doInjection();
-        
-        //If this is an abstract Decorator, we need to set the handler on the Proxy instance
-        //X TODO should be done in DecoratorBean
-        if(isAbstractDecorator)
-        {
-            webBeansContext.getProxyFactory().setHandler(instance, new AbstractDecoratorMethodHandler());
-        }
-        return instance;
+        return getInjectionTarget().produce(creationalContext);
     }
 
     /**

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java?rev=1433675&r1=1433674&r2=1433675&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java Tue Jan 15 21:41:13 2013
@@ -40,6 +40,7 @@ import org.apache.webbeans.decorator.Web
 import org.apache.webbeans.exception.inject.DeploymentException;
 import org.apache.webbeans.inject.impl.InjectionPointFactory;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
+import org.apache.webbeans.portable.AbstractDecoratorInjectionTarget;
 import org.apache.webbeans.util.WebBeansUtil;
 
 /**
@@ -232,10 +233,7 @@ public class ManagedBeanBuilder<T, M ext
         }
 
         //X TODO move proxy instance creation into JavassistProxyFactory!
-        Class clazz = webBeansContext.getProxyFactory().createAbstractDecoratorProxyClass(bean);
-
-        bean.setConstructor(webBeansContext.getWebBeansUtil().defineConstructor(clazz));
-        bean.setIsAbstractDecorator(true);
+        bean.setInjectionTarget(new AbstractDecoratorInjectionTarget<T>(bean));
         return bean;
     }
 

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=1433675&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 Tue Jan 15 21:41:13 2013
@@ -0,0 +1,57 @@
+/*
+ * 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.Collections;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+
+import org.apache.webbeans.component.ManagedBean;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.decorator.AbstractDecoratorMethodHandler;
+import org.apache.webbeans.inject.InjectableConstructor;
+import org.apache.webbeans.proxy.ProxyFactory;
+
+public class AbstractDecoratorInjectionTarget<T> extends InjectionTargetImpl<T>
+{
+
+    private Constructor<T> constructor;
+    private ProxyFactory proxyFactory;
+    
+    //TODO: handle postconstruct and predestroy methods...
+    public AbstractDecoratorInjectionTarget(ManagedBean<T> bean)
+    {
+        super(bean.getAnnotatedType(), bean.getInjectionPoints(), bean.getWebBeansContext(),
+              Collections.<AnnotatedMethod<?>>emptyList(), Collections.<AnnotatedMethod<?>>emptyList());
+        proxyFactory = bean.getWebBeansContext().getProxyFactory();
+        Class<T> clazz = (Class<T>) proxyFactory.createAbstractDecoratorProxyClass(bean);
+        constructor = bean.getWebBeansContext().getWebBeansUtil().defineConstructor(clazz);
+    }
+
+    @Override
+    public T produce(CreationalContext<T> creationalContext)
+    {
+        InjectableConstructor<T> ic = new InjectableConstructor<T>(constructor, this, (CreationalContextImpl<T>) creationalContext);
+        T instance = ic.doInjection();
+        proxyFactory.setHandler(instance, new AbstractDecoratorMethodHandler());
+        return instance;
+    }
+}

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=1433675&r1=1433674&r2=1433675&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 Tue Jan 15 21:41:13 2013
@@ -128,7 +128,6 @@ import org.apache.webbeans.intercept.Int
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.plugins.OpenWebBeansEjbLCAPlugin;
 import org.apache.webbeans.plugins.PluginLoader;
-import org.apache.webbeans.portable.creation.InjectionTargetProducerRemove;
 import org.apache.webbeans.portable.creation.ProducerBeansProducerRemove;
 import org.apache.webbeans.portable.events.discovery.ErrorStack;
 import org.apache.webbeans.portable.events.generics.GProcessAnnotatedType;