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;