Author: struberg
Date: Sat Jul 28 15:52:37 2012
New Revision: 1366699
URL: http://svn.apache.org/viewvc?rev=1366699&view=rev
Log:
OWB-689 radically simplify OWBInjector
the CreationalContext of the owner gets used now.
That we we don't need to do cleanup ourselfs.
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
(original)
+++
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/interceptor/OpenWebBeansEjbInterceptor.java
Sat Jul 28 15:52:37 2012
@@ -96,9 +96,6 @@ public class OpenWebBeansEjbInterceptor
/**Non contextual Intercepted methods*/
protected transient Map<Method, List<InterceptorData>>
nonCtxInterceptedMethodMap = new WeakHashMap<Method, List<InterceptorData>>();
- /**Injector*/
- private transient OWBInjector injector;
-
/**Resolved ejb beans for non-contexctual interceptors*/
private transient Map<Class<?>, BaseEjbBean<?>> resolvedBeans = new
HashMap<Class<?>, BaseEjbBean<?>>();
@@ -303,10 +300,10 @@ public class OpenWebBeansEjbInterceptor
if
(webBeansContext.getOpenWebBeansConfiguration().isUseEJBInterceptorInjection())
{
Object instance = context.getTarget();
- this.injector = new OWBInjector(webBeansContext);
+ OWBInjector injector = new OWBInjector(webBeansContext);
try
{
- this.injector.inject(instance, this.cc);
+ injector.inject(instance, this.cc);
}
catch (Exception e)
{
@@ -326,11 +323,6 @@ public class OpenWebBeansEjbInterceptor
lifecycleCommon(context, InterceptionType.PRE_DESTROY);
- if (this.injector != null)
- {
- this.injector.destroy();
- }
-
this.interceptedMethodMap.clear();
this.resolvedBeans.clear();
this.nonCtxInterceptedMethodMap.clear();
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
Sat Jul 28 15:52:37 2012
@@ -306,26 +306,11 @@ public class CreationalContextImpl<T> im
dependentObjects = null;
}
- Collection<List<EjbInterceptorContext>> interceptorValues = null;
+ // the instances are managed as normal dependent instances already
if (ejbInterceptors != null)
{
- interceptorValues = ejbInterceptors.values();
- }
-
- if(interceptorValues != null)
- {
- for(List<EjbInterceptorContext> interceptors : interceptorValues)
- {
- if(interceptors != null)
- {
- for(EjbInterceptorContext intereptor : interceptors)
- {
- intereptor.getInjectorInstance().destroy();
- }
- }
- }
-
ejbInterceptors.clear();
+ ejbInterceptors = null;
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/EjbInterceptorContext.java
Sat Jul 28 15:52:37 2012
@@ -20,7 +20,6 @@ package org.apache.webbeans.context.crea
import java.io.Serializable;
-import org.apache.webbeans.inject.OWBInjector;
public class EjbInterceptorContext implements Serializable
{
@@ -28,8 +27,6 @@ public class EjbInterceptorContext imple
private Object interceptorInstance;
- private OWBInjector injectorInstance;
-
private Class<?> interceptorClass;
public EjbInterceptorContext()
@@ -69,27 +66,10 @@ public class EjbInterceptorContext imple
this.interceptorInstance = interceptorInstance;
}
- /**
- * @return the injectorInstance
- */
- public OWBInjector getInjectorInstance()
- {
- return injectorInstance;
- }
-
- /**
- * @param injectorInstance the injectorInstance to set
- */
- public void setInjectorInstance(OWBInjector injectorInstance)
- {
- this.injectorInstance = injectorInstance;
- }
-
@Override
public String toString()
{
return "EjbInterceptorContext [interceptorClass=" + interceptorClass
- + ", interceptorInstance=" + interceptorInstance
- + ", injectorInstance=" + injectorInstance + "]";
+ + ", interceptorInstance=" + interceptorInstance + "]";
}
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/OWBInjector.java
Sat Jul 28 15:52:37 2012
@@ -18,35 +18,10 @@
*/
package org.apache.webbeans.inject;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.spi.AnnotatedParameter;
import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Provider;
-
-import org.apache.webbeans.component.EventBean;
-import org.apache.webbeans.component.InjectionPointBean;
-import org.apache.webbeans.component.InjectionTargetWrapper;
-import org.apache.webbeans.component.InstanceBean;
+import javax.enterprise.inject.spi.BeanManager;
import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.container.InjectionResolver;
-import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.exception.WebBeansException;
-import org.apache.webbeans.util.ClassUtil;
-import org.apache.webbeans.util.WebBeansAnnotatedTypeUtil;
-import org.apache.webbeans.util.WebBeansUtil;
/**
* Injects dependencies of the given Java EE component
@@ -55,17 +30,8 @@ import org.apache.webbeans.util.WebBeans
* @version $Rev$ $Date$
*
*/
-public final class OWBInjector implements Serializable
+public final class OWBInjector
{
- //Serial id
- private static final long serialVersionUID = 1L;
-
- /**Creational context to hold dependent instances*/
- private CreationalContextImpl<?> ownerCreationalContext = null;
-
- /**Underlying javaee instance*/
- private Object javaEEInstance;
-
private final WebBeansContext webBeansContext;
/**
@@ -77,278 +43,29 @@ public final class OWBInjector implement
//No operation
this.webBeansContext = webBeansContext;
}
-
- /**
- * Inject dependencies of given instance.
- * @param javaEeComponentInstance instance
- * @return this injector
- * @throws Exception if exception occurs
- */
- public OWBInjector inject(Object javaEeComponentInstance) throws Exception
- {
- return inject(javaEeComponentInstance,null);
- }
-
+
/**
* Inject dependencies of given instance.
- * @param javaEeComponentInstance instance
- * @param creationalContext context
+ * @param instanceUnderInjection instance
+ * @param ownerCreationalContext CreationalContext of the owner
* @return this injector
* @throws Exception if exception occurs
*/
@SuppressWarnings("unchecked")
- public OWBInjector inject(Object javaEeComponentInstance,
CreationalContext<?> creationalContext) throws Exception
+ public OWBInjector inject(Object instanceUnderInjection,
CreationalContext<?> ownerCreationalContext) throws Exception
{
- BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
- try
- {
- javaEEInstance = javaEeComponentInstance;
- if(creationalContext == null)
- {
- ownerCreationalContext = (CreationalContextImpl<?>)
beanManager.createCreationalContext(null);
- }
-
- Class<Object> injectableComponentClass =
(Class<Object>)javaEeComponentInstance.getClass();
-
- //Look for custom InjectionTarget
- InjectionTargetWrapper<Object> wrapper =
beanManager.getInjectionTargetWrapper(injectableComponentClass);
- if(wrapper != null)
- {
- wrapper.inject(javaEeComponentInstance,
(CreationalContext<Object>) ownerCreationalContext);
- return this;
- }
-
- AnnotatedType<Object> annotated =
beanManager.createAnnotatedType(injectableComponentClass);
- Set<InjectionPoint> injectionPoints =
WebBeansAnnotatedTypeUtil.getJavaEeComponentInstanceInjectionPoints(webBeansContext,
annotated);
- if(injectionPoints != null && injectionPoints.size() > 0)
- {
- for(InjectionPoint injectionPoint : injectionPoints)
- {
- if(injectionPoint.getMember() instanceof Method)
- {
- Method method = (Method)injectionPoint.getMember();
-
- //Get injected method arguments
- List<Object> parameters =
getInjectedMethodParameterReferences(injectionPoint, beanManager,
injectionPoints);
-
- //Set method
- ClassUtil.callInstanceMethod(method,
javaEeComponentInstance, parameters.toArray(new Object[parameters.size()]));
-
- }
- else if(injectionPoint.getMember() instanceof Field)
- {
- //Get injected object ref
- Object object =
getInjectedObjectReference(injectionPoint, beanManager);
-
- //Set field
- Field field = (Field)injectionPoint.getMember();
- setField(javaEeComponentInstance, field, object);
- }
- }
-
- return this;
- }
-
-
- }
- catch(Exception e)
- {
- throw e;
- }
-
- return null;
- }
+ CreationalContext<?> creationalContext = ownerCreationalContext;
+ BeanManager bm = webBeansContext.getBeanManagerImpl();
-
- /**
- * Release dependents.
- */
- @SuppressWarnings("unchecked")
- public void destroy()
- {
- BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
-
- //Look for custom InjectionTarget
- InjectionTargetWrapper<Object> wrapper =
beanManager.getInjectionTargetWrapper((Class<Object>)javaEEInstance.getClass());
- if(wrapper != null)
- {
- wrapper.dispose(javaEEInstance);
- javaEEInstance = null;
- ownerCreationalContext = null;
- }
-
- else
- {
- if(ownerCreationalContext != null)
- {
- ownerCreationalContext.release();
- ownerCreationalContext = null;
- }
- }
- }
-
- private void setField(Object instance, Field field, Object value)
- {
- if(!field.isAccessible())
- {
-
webBeansContext.getSecurityService().doPrivilegedSetAccessible(field, true);
- }
-
- try
- {
- field.set(instance, value);
- }
- catch (IllegalArgumentException e)
- {
- throw new WebBeansException(e);
- }
- catch (IllegalAccessException e)
+ if(creationalContext == null)
{
- throw new WebBeansException(e);
+ creationalContext = bm.createCreationalContext(null);
}
- }
- /**
- * Gets injected object reference.
- * @param injectionPoint injection point of javaee instance
- * @param beanManager bean manager implementation
- * @return injected reference
- */
- private Object getInjectedObjectReference(InjectionPoint injectionPoint,
BeanManagerImpl beanManager)
- {
- Object object = null;
- boolean injectionPointBeanLocalSetOnStack = false;
-
- //Injected contextual beam
- InjectionResolver injectionResolver =
beanManager.getInjectionResolver();
+ AnnotatedType annotatedType =
bm.createAnnotatedType(instanceUnderInjection.getClass());
+ bm.createInjectionTarget(annotatedType).inject(instanceUnderInjection,
creationalContext);
- Bean<?> injectedBean = (Bean<?>)
injectionResolver.getInjectionPointBean(injectionPoint);
-
- if(isInstanceProviderInjection(injectionPoint))
- {
- InstanceBean.local.set(injectionPoint);
- }
-
- else if(isEventProviderInjection(injectionPoint))
- {
- EventBean.local.set(injectionPoint);
- }
-
- else if(WebBeansUtil.isDependent(injectedBean))
- {
-
if(!InjectionPoint.class.isAssignableFrom(ClassUtil.getClass(injectionPoint.getType())))
- {
- injectionPointBeanLocalSetOnStack =
InjectionPointBean.setThreadLocal(injectionPoint);
- }
- }
-
- object = beanManager.getInjectableReference(injectionPoint,
ownerCreationalContext);
- if (injectionPointBeanLocalSetOnStack )
- {
- InjectionPointBean.unsetThreadLocal();
- }
-
- return object;
- }
-
- /**
- * Gets initializer method parameters.
- * @param injectionPoint javaee component
- * injection point
- * @param beanManager bean manager
- * @param injectionPoints all injection points
- * @return injected method injected arguments
- */
- private List<Object> getInjectedMethodParameterReferences(InjectionPoint
injectionPoint, BeanManagerImpl beanManager, Set<InjectionPoint>
injectionPoints)
- {
- Method method = (Method)injectionPoint.getMember();
- List<InjectionPoint> injectedPoints = getInjectedPoints(method,
injectionPoints);
- List<Object> list = new ArrayList<Object>();
- for(int i=0;i<injectedPoints.size();i++)
- {
- for(InjectionPoint point : injectedPoints)
- {
- AnnotatedParameter<?> parameter =
(AnnotatedParameter<?>)point.getAnnotated();
- if(parameter.getPosition() == i)
- {
- Object instance =
getInjectedObjectReference(injectionPoint, beanManager);
- list.add(instance);
- break;
- }
- }
- }
-
- return list;
- }
-
- /**
- * Gets injection point of given methods.
- * @param method injection point member
- * @param injectionPoints all injection points
- * @return method injection points
- */
- private List<InjectionPoint> getInjectedPoints(Method method,
Set<InjectionPoint> injectionPoints)
- {
- List<InjectionPoint> points = new ArrayList<InjectionPoint>();
-
- for(InjectionPoint ip : injectionPoints)
- {
- if(ip.getMember().equals(method))
- {
- points.add(ip);
- }
- }
-
- return points;
-
- }
-
- /**
- * Returns true if injection point is instance injection point
- * false otherwise.
- * @param injectionPoint injection point
- * @return true if injection point is instance injection point
- */
- private boolean isInstanceProviderInjection(InjectionPoint injectionPoint)
- {
- Type type = injectionPoint.getType();
-
- if (type instanceof ParameterizedType)
- {
- ParameterizedType pt = (ParameterizedType) type;
- Class<?> clazz = (Class<?>) pt.getRawType();
-
- if(Provider.class.isAssignableFrom(clazz))
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Returns true if injection point is event injection point
- * false otherwise.
- * @param injectionPoint injection point
- * @return true if injection point is event injection point
- */
- private boolean isEventProviderInjection(InjectionPoint injectionPoint)
- {
- Type type = injectionPoint.getType();
-
- if (type instanceof ParameterizedType)
- {
- ParameterizedType pt = (ParameterizedType) type;
- Class<?> clazz = (Class<?>) pt.getRawType();
-
- if(clazz.isAssignableFrom(Event.class))
- {
- return true;
- }
- }
-
- return false;
+ return this;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataComparator.java
Sat Jul 28 15:52:37 2012
@@ -18,18 +18,13 @@
*/
package org.apache.webbeans.intercept;
-import java.io.Serializable;
import java.util.Comparator;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.intercept.webbeans.WebBeansInterceptor;
-public class InterceptorDataComparator implements Comparator<InterceptorData>,
Serializable
+public class InterceptorDataComparator implements Comparator<InterceptorData>
{
-
- /** default serial version */
- private static final long serialVersionUID = 1L;
-
private final WebBeansContext instance;
public InterceptorDataComparator(WebBeansContext webBeansContext)
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java
Sat Jul 28 15:52:37 2012
@@ -437,35 +437,34 @@ public class InterceptorDataImpl impleme
return interceptor;
}
- EjbInterceptorContext ctx ;
+ EjbInterceptorContext ejbInterceptorContext ;
Object interceptor = null;
// control for this InterceptorData is defined by interceptor class
if (definedInInterceptorClass)
{
- ctx = ownerCreationalContext.getEjbInterceptor(ownerInstance,
interceptorClass);
- if (ctx == null)
+ ejbInterceptorContext =
ownerCreationalContext.getEjbInterceptor(ownerInstance, interceptorClass);
+ if (ejbInterceptorContext == null)
{
interceptor =
webBeansContext.getWebBeansUtil().newInstanceForced(interceptorClass);
try
{
OWBInjector injector = new OWBInjector(webBeansContext);
- injector.inject(interceptor);
+ injector.inject(interceptor, ownerCreationalContext);
- ctx = new EjbInterceptorContext();
- ctx.setInjectorInstance(injector);
- ctx.setInterceptorInstance(interceptor);
- ctx.setInterceptorClass(interceptorClass);
+ ejbInterceptorContext = new EjbInterceptorContext();
+ ejbInterceptorContext.setInterceptorInstance(interceptor);
+
ejbInterceptorContext.setInterceptorClass(interceptorClass);
}
catch (Exception e)
{
logger.log(Level.SEVERE,
WebBeansLoggerFacade.constructMessage(OWBLogConst.ERROR_0022,
interceptorClass), e);
}
- ownerCreationalContext.addEjbInterceptor(ownerInstance, ctx);
+ ownerCreationalContext.addEjbInterceptor(ownerInstance,
ejbInterceptorContext);
}
else
{
- interceptor = ctx.getInterceptorInstance();
+ interceptor = ejbInterceptorContext.getInterceptorInstance();
}
}
return interceptor;
Modified:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java?rev=1366699&r1=1366698&r2=1366699&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/portable/javaee/JavaEeInjectionTest.java
Sat Jul 28 15:52:37 2012
@@ -40,14 +40,12 @@ public class JavaEeInjectionTest extends
MockInstance instance = new MockInstance();
WebBeansContext webBeansContext = WebBeansContext.getInstance();
OWBInjector injector = new OWBInjector(webBeansContext);
- injector.inject(instance);
+ injector.inject(instance, null);
Assert.assertNotNull(instance.getBeanManager());
Assert.assertNotNull(instance.getSample());
Assert.assertNotNull(instance.getViaMethod());
- injector.destroy();
-
shutDownContainer();
}