Return-Path: Delivered-To: apmail-openwebbeans-commits-archive@www.apache.org Received: (qmail 11868 invoked from network); 14 Apr 2010 19:56:47 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 14 Apr 2010 19:56:47 -0000 Received: (qmail 68488 invoked by uid 500); 14 Apr 2010 19:56:47 -0000 Delivered-To: apmail-openwebbeans-commits-archive@openwebbeans.apache.org Received: (qmail 68458 invoked by uid 500); 14 Apr 2010 19:56:47 -0000 Mailing-List: contact commits-help@openwebbeans.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openwebbeans.apache.org Delivered-To: mailing list commits@openwebbeans.apache.org Received: (qmail 68450 invoked by uid 99); 14 Apr 2010 19:56:46 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Apr 2010 19:56:46 +0000 X-ASF-Spam-Status: No, hits=-1207.2 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Apr 2010 19:56:43 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 2AA0123889DE; Wed, 14 Apr 2010 19:56:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r934161 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: component/ container/ context/ context/creational/ decorator/ event/ inject/ intercept/ portable/creation/ util/ Date: Wed, 14 Apr 2010 19:56:22 -0000 To: commits@openwebbeans.apache.org From: gerdogdu@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100414195623.2AA0123889DE@eris.apache.org> Author: gerdogdu Date: Wed Apr 14 19:56:22 2010 New Revision: 934161 URL: http://svn.apache.org/viewvc?rev=934161&view=rev Log: [OWB-352] Thread Safety Problem in our InterceptorHandlers, aka proxies Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.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/DependentCreationalContext.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/decorator/WebBeansDecoratorConfig.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorDataImpl.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractInjectionTargetBean.java Wed Apr 14 19:56:22 2010 @@ -33,7 +33,6 @@ import org.apache.webbeans.annotation.De import org.apache.webbeans.config.OWBLogConst; import org.apache.webbeans.config.inheritance.BeanInheritedMetaData; import org.apache.webbeans.config.inheritance.IBeanInheritedMetaData; -import org.apache.webbeans.context.creational.CreationalContextImpl; import org.apache.webbeans.decorator.WebBeansDecorator; import org.apache.webbeans.exception.WebBeansConfigurationException; import org.apache.webbeans.exception.WebBeansException; @@ -145,16 +144,6 @@ public abstract class AbstractInjectionT } } - //Push instance into creational context, this is necessary because - //Context objects look for instance in the interceptors. If we do not - //push instance into cretional context, circular exception occurs. - //Context instance first look into creational context object whether - //Or not it exist. - if(creationalContext instanceof CreationalContextImpl) - { - CreationalContextImpl cc = (CreationalContextImpl)creationalContext; - cc.push(instance); - } //If dependent proxy if(isDependentProxy) Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Wed Apr 14 19:56:22 2010 @@ -165,9 +165,9 @@ public abstract class AbstractOwbBean ((AbstractInjectionTargetBean)this).afterConstructor(instance, creationalContext); } } - - //Remove incmplete instance from creational Context - ((CreationalContextImpl)creationalContext).remove(); + + //Remove proxy instance + ((CreationalContextImpl)creationalContext).setProxyInstance(null); } catch (Exception re) @@ -223,13 +223,19 @@ public abstract class AbstractOwbBean destroyInstance(instance,creationalContext); } + //Setting destroying instance + CreationalContextImpl.currentRemoveObject.set(instance); + //Destory dependent instances creationalContext.release(); - + }catch(Exception e) { logger.fatal(OWBLogConst.FATAL_0001, new Object[]{toString()}); e.printStackTrace(); + }finally + { + CreationalContextImpl.currentRemoveObject.remove(); } } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java Wed Apr 14 19:56:22 2010 @@ -17,11 +17,21 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; import javax.enterprise.context.Dependent; +import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; +import javax.enterprise.inject.spi.Bean; +import org.apache.webbeans.context.creational.CreationalContextImpl; +import org.apache.webbeans.context.creational.DependentCreationalContext; +import org.apache.webbeans.context.creational.DependentCreationalContext.DependentType; import org.apache.webbeans.exception.WebBeansConfigurationException; +import org.apache.webbeans.inject.AbstractInjectable; import org.apache.webbeans.inject.InjectableMethods; import org.apache.webbeans.util.WebBeansUtil; @@ -149,14 +159,17 @@ public class ProducerMethodBean exten * @param creationalContext creational context * @return producer method instance */ + @SuppressWarnings("unchecked") protected T createDefaultInstance(CreationalContext creationalContext) { T instance = null; Object parentInstance = null; CreationalContext parentCreational = null; InjectableMethods m = null; + List> oldDependents = AbstractInjectable.dependentInstanceOfProducerMethods.get(); try { + AbstractInjectable.dependentInstanceOfProducerMethods.set(new ArrayList>()); parentCreational = getManager().createCreationalContext(this.ownerComponent); if (!Modifier.isStatic(creatorMethod.getModifiers())) @@ -167,6 +180,74 @@ public class ProducerMethodBean exten m = new InjectableMethods(creatorMethod, parentInstance, this, creationalContext); //Injection of parameters instance = m.doInjection(); + + boolean isInjectionToAnotherBean = false; + Contextual contextual = null; + if(creationalContext instanceof CreationalContextImpl) + { + contextual = ((CreationalContextImpl)creationalContext).getBean(); + isInjectionToAnotherBean = contextual == this ? false : true; + } + + Object injectionTargetInstance = AbstractInjectable.instanceUnderInjection; + if(isInjectionToAnotherBean) + { + if(oldDependents == null && injectionTargetInstance != null) + { + ((CreationalContextImpl)creationalContext).addDependent(injectionTargetInstance, this , instance); + } + else + { + DependentCreationalContext dependentCreational = new DependentCreationalContext((Contextual)this); + dependentCreational.setInstance(instance); + dependentCreational.setDependentType(DependentType.BEAN); + + oldDependents.add(dependentCreational); + } + } + else + { + List> dependents = AbstractInjectable.dependentInstanceOfProducerMethods.get(); + if(dependents != null) + { + for(DependentCreationalContext dependent : dependents) + { + ((CreationalContextImpl)creationalContext).addDependent(instance, dependent.getContextual() , dependent.getInstance()); + } + } + } + + //Adding dependents of producers + Map, Object> dependents = m.getDependentBeanParameters(); + if(dependents != null) + { + Set> beans = dependents.keySet(); + for(Bean bean : beans) + { + if(creationalContext instanceof CreationalContextImpl) + { + if(isInjectionToAnotherBean) + { + if(oldDependents == null && injectionTargetInstance != null) + { + ((CreationalContextImpl)creationalContext).addDependent(injectionTargetInstance, this , instance); + } + else + { + DependentCreationalContext dependentCreational = new DependentCreationalContext((Contextual)bean); + dependentCreational.setInstance(dependents.get(bean)); + dependentCreational.setDependentType(DependentType.BEAN); + oldDependents.add(dependentCreational); + } + } + else + { + ((CreationalContextImpl)creationalContext).addDependent(instance, bean , dependents.get(bean)); + } + } + } + } + } finally @@ -176,8 +257,14 @@ public class ProducerMethodBean exten destroyBean(getParent(), parentInstance, parentCreational); } - //Remove any dependent objects - m.destroyDependentInjectionPoints(); + if(oldDependents != null) + { + AbstractInjectable.dependentInstanceOfProducerMethods.set(oldDependents); + } + else + { + AbstractInjectable.dependentInstanceOfProducerMethods.remove(); + } } return instance; @@ -206,6 +293,7 @@ public class ProducerMethodBean exten * * @param instance bean instance */ + @SuppressWarnings("unchecked") protected void disposeDefault(T instance, CreationalContext creationalContext) { if (disposalMethod != null) @@ -235,9 +323,22 @@ public class ProducerMethodBean exten { destroyBean(getParent(), parentInstance, parentCreational); } + + //Destroy dependent parameters + Map, Object> dependents = m.getDependentBeanParameters(); + if(dependents != null) + { + Set> beans = dependents.keySet(); + for(Bean bean : beans) + { + Bean beanTt = (Bean)bean; + if(creationalContext instanceof CreationalContextImpl) + { + beanTt.destroy(dependents.get(beanTt), (CreationalContext)creationalContext); + } + } + } - //Remove any dependent objects - m.destroyDependentInjectionPoints(); } } } 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -698,44 +698,20 @@ public class BeanManagerImpl implements return null; } - //Owner bean creational context - CreationalContextImpl ownerCreationalContextImpl = null; - if(!(ownerCreationalContext instanceof CreationalContextImpl)) - { - ownerCreationalContextImpl = (CreationalContextImpl)CreationalContextFactory.getInstance().wrappedCreationalContext(ownerCreationalContext, injectionPoint.getBean()); - } - else - { - ownerCreationalContextImpl = (CreationalContextImpl)ownerCreationalContext; - } - //Find the injection point Bean Bean injectedBean = (Bean)injectionResolver.getInjectionPointBean(injectionPoint); - CreationalContextImpl injectedCreational = (CreationalContextImpl)createCreationalContext(injectedBean); - if(WebBeansUtil.isDependent(injectedBean)) { - // this must only be added for dependent beans, otherwise we register @NormalScoped beans as dependent! - injectedCreational.setOwnerCreational(ownerCreationalContextImpl); - - //Creating a new creational context for target bean instance - instance = getReference(injectedBean, injectionPoint.getType(), injectedCreational); - - // add this dependent into bean dependent list - if (!WebBeansUtil.isStaticInjection(injectionPoint)) - { - ownerCreationalContextImpl.addDependent(injectedBean, instance, injectedCreational); - } + //Using owner creational context + //Dependents use parent creational context + instance = getReference(injectedBean, injectionPoint.getType(), ownerCreationalContext); } else - { //Look for creational stack - instance = WebBeansUtil.getObjectFromCreationalContext(injectedBean, ownerCreationalContextImpl); - //No in stack, create new - if(instance == null) - { - instance = getReference(injectedBean, injectionPoint.getType(), injectedCreational); - } + { + //New creational context for normal scoped beans + CreationalContextImpl injectedCreational = (CreationalContextImpl)createCreationalContext(injectedBean); + instance = getReference(injectedBean, injectionPoint.getType(), injectedCreational); } return instance; Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java Wed Apr 14 19:56:22 2010 @@ -31,7 +31,6 @@ import javax.enterprise.context.spi.Cont import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; -import org.apache.webbeans.context.creational.CreationalContextImpl; import org.apache.webbeans.context.type.ContextTypes; import org.apache.webbeans.util.Asserts; @@ -177,17 +176,8 @@ public abstract class AbstractContext im } else - { - //Check for incomplete instance, putting for circular references - if(creationalContext instanceof CreationalContextImpl) - { - CreationalContextImpl cc = (CreationalContextImpl)creationalContext; - if(cc.get() != null) - { - instance = (T)cc.get(); - } - } - + { + //No instance if(instance == null) { instance = component.create(creationalContext); 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -34,26 +34,28 @@ import org.apache.webbeans.util.WebBeans /** {@inheritDoc} */ public class CreationalContextImpl implements CreationalContext, Serializable { - private static final long serialVersionUID = -3416834742959340960L; + //Default serial id + private static final long serialVersionUID = 1L; - /**Actual bean instance*/ - private transient volatile Object incompleteInstance = null; - /**Bean proxy*/ + //This will be set to null after instance creations private volatile Object proxyInstance = null; /**Contextual bean dependent instances*/ - private Map> dependentObjects = - Collections.synchronizedMap(new WeakHashMap>()); + //contextual instance --> dependents + private Map>> dependentObjects = + Collections.synchronizedMap(new WeakHashMap>>()); - /**Owner bean*/ + /**Contextual bean*/ private volatile Contextual contextual = null; - - /**Owner creational context*/ - private volatile CreationalContextImpl ownerCreational = null; - + /**Ejb interceptors*/ - private ConcurrentMap, EjbInterceptorContext> ejbInterceptors = new ConcurrentHashMap, EjbInterceptorContext>(); + //contextual instance --> interceptors + private ConcurrentMap> ejbInterceptors = + new ConcurrentHashMap>(); + + /**When bean object is destroyed it is set*/ + public static ThreadLocal currentRemoveObject = new ThreadLocal(); /** * Package private @@ -68,9 +70,24 @@ public class CreationalContextImpl im * @param clazz interceptor class * @param instance interceptor instance */ - public void addEjbInterceptor(Class clazz, EjbInterceptorContext instance) + public void addEjbInterceptor(Object ownerInstance, EjbInterceptorContext instance) { - this.ejbInterceptors.putIfAbsent(clazz, instance); + Asserts.assertNotNull(ownerInstance,"Owner instance parameter can not be null"); + Asserts.assertNotNull(instance,"Instance parameter can not be null"); + + List list = this.ejbInterceptors.get(ownerInstance); + if(list == null) + { + list = new ArrayList(); + List oldList = this.ejbInterceptors.putIfAbsent(ownerInstance, list); + if(oldList != null) + { + list = oldList; + } + } + + + list.add(instance); } /** @@ -78,9 +95,23 @@ public class CreationalContextImpl im * @param clazz interceptor class * @return interceptor instance */ - public EjbInterceptorContext getEjbInterceptor(Class clazz) + public EjbInterceptorContext getEjbInterceptor(Object ownerInstance,Class clazz) { - return this.ejbInterceptors.get(clazz); + Asserts.assertNotNull(ownerInstance,"Owner instance can not be null"); + + List ejbInterceptors = this.ejbInterceptors.get(ownerInstance); + if(ejbInterceptors != null) + { + for(EjbInterceptorContext ejbInterceptor : ejbInterceptors) + { + if(ejbInterceptor.getInterceptorClass() == clazz) + { + return ejbInterceptor; + } + } + } + + return null; } @@ -91,11 +122,7 @@ public class CreationalContextImpl im */ public void push(T incompleteInstance) { - if(this.incompleteInstance != null) - { - this.incompleteInstance = incompleteInstance; - } - + //No-action } /** @@ -104,7 +131,7 @@ public class CreationalContextImpl im */ public void setProxyInstance(Object proxyInstance) { - if(this.proxyInstance != null) + if(this.proxyInstance == null) { this.proxyInstance = proxyInstance; } @@ -125,13 +152,16 @@ public class CreationalContextImpl im * @param dependent dependent contextual * @param instance dependent instance */ - public void addDependent(Contextual dependent, Object instance, CreationalContext cc) + public void addDependent(Object ownerInstance, Contextual dependent, Object instance) { + Asserts.assertNotNull(dependent,"ownerInstance parameter cannot be null"); Asserts.assertNotNull(dependent,"dependent parameter cannot be null"); + Asserts.assertNotNull(dependent,"instance parameter cannot be null"); + Asserts.assertNotNull(dependent,"cc parameter cannot be null"); if(instance != null) { - DependentCreationalContext dependentCreational = new DependentCreationalContext(cc,dependent); + DependentCreationalContext dependentCreational = new DependentCreationalContext(dependent); if(dependent instanceof Interceptor) { dependentCreational.setDependentType(DependentType.INTERCEPTOR); @@ -146,7 +176,14 @@ public class CreationalContextImpl im } dependentCreational.setInstance(instance); - this.dependentObjects.put(instance, dependentCreational); + List> dependentList = this.dependentObjects.get(ownerInstance); + if(dependentList == null) + { + dependentList = new ArrayList>(); + this.dependentObjects.put(ownerInstance, dependentList); + } + + dependentList.add(dependentCreational); } } @@ -155,15 +192,20 @@ public class CreationalContextImpl im * @param interceptor interceptor bean * @return bean interceptor instance */ - public Object getDependentInterceptor(Contextual interceptor) + public Object getDependentInterceptor(Object ownerInstance, Contextual interceptor) { - List> dcs = getDependentInterceptors(); - for(DependentCreationalContext dc : dcs) + Asserts.assertNotNull(interceptor,"Interceptor parameter can not be null"); + + if(ownerInstance != null) { - if(dc.getContextual().equals(interceptor)) + List> dcs = getDependentInterceptors(ownerInstance); + for(DependentCreationalContext dc : dcs) { - return dc.getInstance(); - } + if(dc.getContextual().equals(interceptor)) + { + return dc.getInstance(); + } + } } return null; @@ -176,6 +218,7 @@ public class CreationalContextImpl im */ public Object getDependentDecorator(Contextual decorator) { + Asserts.assertNotNull(decorator, "Decorator parameter can not be null"); List> dcs = getDependentDecorators(); for(DependentCreationalContext dc : dcs) { @@ -192,21 +235,25 @@ public class CreationalContextImpl im * Gets list of dependent interceptors context. * @return list of dependent interceptors context */ - private List> getDependentInterceptors() + private List> getDependentInterceptors(Object ownerInstance) { List> list = new ArrayList>(); - Collection> values = this.dependentObjects.values(); - if(values != null && values.size() > 0) + + if(ownerInstance != null) { - Iterator> it = values.iterator(); - while(it.hasNext()) + List> values = this.dependentObjects.get(ownerInstance); + if(values != null && values.size() > 0) { - DependentCreationalContext dc = it.next(); - if(dc.getDependentType().equals(DependentType.INTERCEPTOR)) + Iterator> it = values.iterator(); + while(it.hasNext()) { - list.add(dc); + DependentCreationalContext dc = it.next(); + if(dc.getDependentType().equals(DependentType.INTERCEPTOR)) + { + list.add(dc); + } } - } + } } return list; @@ -219,7 +266,7 @@ public class CreationalContextImpl im private List> getDependentDecorators() { List> list = new ArrayList>(); - Collection> values = this.dependentObjects.values(); + List> values = new ArrayList>(); if(values != null && values.size() > 0) { Iterator> it = values.iterator(); @@ -237,43 +284,30 @@ public class CreationalContextImpl im } /** - * Returns incomplete instance. - * - * @return incomplete instance - */ - public Object get() - { - return this.incompleteInstance; - } - - - /** - * Removes from creational context. - */ - public void remove() - { - this.incompleteInstance = null; - } - - /** * Removes dependent objects. */ @SuppressWarnings("unchecked") - public void removeDependents() + public void removeDependents(Object ownerInstance) { - Collection values = this.dependentObjects.keySet(); - Iterator iterator = values.iterator(); - - while(iterator.hasNext()) + if(ownerInstance == null) { - T instance = (T)iterator.next(); - DependentCreationalContext dependent = (DependentCreationalContext)this.dependentObjects.get(instance); - dependent.getContextual().destroy(instance, dependent.getCreationalContext()); + return; } - this.dependentObjects.clear(); + List> values = this.dependentObjects.get(ownerInstance); + if(values != null) + { + Iterator iterator = values.iterator(); + while(iterator.hasNext()) + { + DependentCreationalContext dependent = (DependentCreationalContext)iterator.next(); + dependent.getContextual().destroy((T)dependent.getInstance(), CreationalContextFactory.getInstance().getCreationalContext(dependent.getContextual())); + } + + this.dependentObjects.remove(ownerInstance); + } - Collection interceptors = this.ejbInterceptors.values(); + List interceptors = this.ejbInterceptors.get(ownerInstance); if(interceptors != null) { for(EjbInterceptorContext intereptor : interceptors) @@ -282,7 +316,48 @@ public class CreationalContextImpl im } } + this.ejbInterceptors.remove(ownerInstance); + } + + @SuppressWarnings("unchecked") + public void removeAllDependents() + { + Collection>> values = this.dependentObjects.values(); + if(values != null) + { + for(List> value : values) + { + if(values != null) + { + Iterator iterator = value.iterator(); + while(iterator.hasNext()) + { + DependentCreationalContext dependent = (DependentCreationalContext)iterator.next(); + dependent.getContextual().destroy((T)dependent.getInstance(), CreationalContextFactory.getInstance().getCreationalContext(dependent.getContextual())); + } + } + } + } + + this.dependentObjects.clear(); + + Collection> interceptorValues = this.ejbInterceptors.values(); + if(interceptorValues != null) + { + for(List interceptors : interceptorValues) + { + if(interceptors != null) + { + for(EjbInterceptorContext intereptor : interceptors) + { + intereptor.getInjectorInstance().destroy(); + } + } + } + } + this.ejbInterceptors.clear(); + } /** @@ -291,8 +366,14 @@ public class CreationalContextImpl im @Override public void release() { - removeDependents(); - this.incompleteInstance = null; + if(currentRemoveObject.get() == null) + { + removeAllDependents(); + } + else + { + removeDependents(currentRemoveObject.get()); + } } /** @@ -306,36 +387,14 @@ public class CreationalContextImpl im /** - * @return the ownerCreational - */ - public CreationalContextImpl getOwnerCreational() - { - return ownerCreational; - } - - - /** - * @param ownerCreational the ownerCreational to set - */ - public void setOwnerCreational(CreationalContextImpl ownerCreational) - { - if(this.ownerCreational != null) - { - this.ownerCreational = ownerCreational; - } - } - - /** * Write Object. */ private synchronized void writeObject(ObjectOutputStream s) throws IOException { - s.writeObject(proxyInstance); - // we have to remap into a standard HashMap because WeakHashMap is not serializable - HashMap> depo - = new HashMap>(dependentObjects); + HashMap>> depo + = new HashMap>>(dependentObjects); s.writeObject(depo); String id = null; @@ -347,7 +406,6 @@ public class CreationalContextImpl im { s.writeObject(null); } - s.writeObject(ownerCreational); s.writeObject(ejbInterceptors); } @@ -359,18 +417,16 @@ public class CreationalContextImpl im private synchronized void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { - proxyInstance = s.readObject(); - - HashMap> depo = (HashMap>)s.readObject(); - dependentObjects = new WeakHashMap>(depo); + HashMap>> depo = (HashMap>>)s.readObject(); + dependentObjects = new WeakHashMap>>(depo); String id = (String) s.readObject(); if (id != null) { contextual = (Contextual) BeanManagerImpl.getManager().getPassivationCapableBean(id); } - ownerCreational = (CreationalContextImpl) s.readObject(); - ejbInterceptors = (ConcurrentMap, EjbInterceptorContext>) s.readObject(); + + ejbInterceptors = (ConcurrentMap>) s.readObject(); } } \ No newline at end of file Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java Wed Apr 14 19:56:22 2010 @@ -23,17 +23,14 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import javax.enterprise.context.spi.Contextual; -import javax.enterprise.context.spi.CreationalContext; import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.util.WebBeansUtil; -class DependentCreationalContext implements Serializable +public class DependentCreationalContext implements Serializable { private static final long serialVersionUID = 1L; - private CreationalContext creationalContext; - private Contextual contextual; private DependentType dependentType; @@ -65,10 +62,9 @@ class DependentCreationalContext impl BEAN } - public DependentCreationalContext(CreationalContext cc, Contextual contextual) + public DependentCreationalContext(Contextual contextual) { this.contextual = contextual; - this.creationalContext = cc; } @@ -91,22 +87,6 @@ class DependentCreationalContext impl } /** - * @return the creationalContext - */ - public CreationalContext getCreationalContext() - { - return creationalContext; - } - - /** - * @param creationalContext the creationalContext to set - */ - public void setCreationalContext(CreationalContext creationalContext) - { - this.creationalContext = creationalContext; - } - - /** * @return the contextual */ public Contextual getContextual() 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -30,10 +30,33 @@ public class EjbInterceptorContext imple private OWBInjector injectorInstance; + private Class interceptorClass; + public EjbInterceptorContext() { } + + + + /** + * @return the interceptorClass + */ + public Class getInterceptorClass() + { + return interceptorClass; + } + + + /** + * @param interceptorClass the interceptorClass to set + */ + public void setInterceptorClass(Class interceptorClass) + { + this.interceptorClass = interceptorClass; + } + + /** * @return the interceptorInstance Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/decorator/WebBeansDecoratorConfig.java Wed Apr 14 19:56:22 2010 @@ -102,7 +102,7 @@ public final class WebBeansDecoratorConf if (ownerCreationalContext != null) { - ownerCreationalContext.addDependent(decorator, decoratorInstance, creationalContext); + ownerCreationalContext.addDependent(instance, decorator, decoratorInstance); } } 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -411,10 +411,18 @@ public final class NotificationManager try { TransactionPhase phase = observer.getTransactionPhase(); - TransactionService transactionService = ServiceLoader.getService(TransactionService.class); - if(transactionService != null) + + if(phase != null && !phase.equals(TransactionPhase.IN_PROGRESS)) { - transactionService.registerTransactionSynchronization(phase, observer, event); + TransactionService transactionService = ServiceLoader.getService(TransactionService.class); + if(transactionService != null) + { + transactionService.registerTransactionSynchronization(phase, observer, event); + } + else + { + observer.notify(event); + } } else { Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java Wed Apr 14 19:56:22 2010 @@ -33,6 +33,8 @@ import org.apache.webbeans.component.Ins import org.apache.webbeans.component.OwbBean; import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.container.InjectionResolver; +import org.apache.webbeans.context.creational.CreationalContextImpl; +import org.apache.webbeans.context.creational.DependentCreationalContext; import org.apache.webbeans.logger.WebBeansLogger; import org.apache.webbeans.util.ClassUtil; import org.apache.webbeans.util.WebBeansUtil; @@ -60,6 +62,11 @@ public abstract class AbstractInjectable /**Field, method or constructor injection*/ protected Member injectionMember; + + public static ThreadLocal instanceUnderInjection = new ThreadLocal(); + + public static ThreadLocal>> dependentInstanceOfProducerMethods = + new ThreadLocal>>(); /** * Creates a new injectable. @@ -81,9 +88,11 @@ public abstract class AbstractInjectable public Object inject(InjectionPoint injectionPoint) { logger.debug("Injected into bean : " + this.injectionOwnerBean.toString() + " with injection point : " + injectionPoint); - Object injected = null; - Bean injectedBean = (Bean)InjectionResolver.getInstance().getInjectionPointBean(injectionPoint); - + + Object injected = null; + + //Injected contextual beam + Bean injectedBean = (Bean)InjectionResolver.getInstance().getInjectionPointBean(injectionPoint); if(isInstanceProviderInjection(injectionPoint)) { InstanceBean.local.set(injectionPoint); @@ -115,6 +124,7 @@ public abstract class AbstractInjectable } } + //Gets injectable reference for injected bean injected = BeanManagerImpl.getManager().getInjectableReference(injectionPoint, this.injectionOwnerCreationalContext); if(dependentProducer) @@ -122,11 +132,19 @@ public abstract class AbstractInjectable if(!Serializable.class.isAssignableFrom(injected.getClass())) { throw new IllegalProductException("If a producer method or field of scope @Dependent returns an serializable object for injection " + - "into an injection point "+ injectionPoint +" that requires a passivation capable dependency"); + "into an injection point "+ injectionPoint +" that requires a passivation capable dependency"); } } - + // add this dependent into bean dependent list + if (!WebBeansUtil.isStaticInjection(injectionPoint) && WebBeansUtil.isDependent(injectedBean)) + { + if(instanceUnderInjection.get() != null) + { + ((CreationalContextImpl)this.injectionOwnerCreationalContext).addDependent(instanceUnderInjection.get(),injectedBean, injected); + } + } + return injected; } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethods.java Wed Apr 14 19:56:22 2010 @@ -15,8 +15,11 @@ package org.apache.webbeans.inject; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import javax.enterprise.context.Dependent; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.Disposes; import javax.enterprise.inject.spi.AnnotatedParameter; @@ -28,6 +31,7 @@ import org.apache.webbeans.annotation.De import org.apache.webbeans.component.OwbBean; import org.apache.webbeans.component.ProducerMethodBean; 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; @@ -46,6 +50,7 @@ public class InjectableMethods extend /**Used in dispose method, represents produces method parameter instance*/ private Object producerMethodInstance = null; + private Map,Object> dependentParameters = new HashMap, Object>(); /** * Constructs new instance. @@ -74,7 +79,7 @@ public class InjectableMethods extend for(int i=0;i parameter = (AnnotatedParameter)point.getAnnotated(); if(parameter.getPosition() == i) { @@ -87,6 +92,7 @@ public class InjectableMethods extend Bean injectionPointBean = manager.getBeans(InjectionPoint.class, new DefaultLiteral()).iterator().next(); Object reference = manager.getReference(injectionPointBean, InjectionPoint.class, manager.createCreationalContext(injectionPointBean)); + this.dependentParameters.put(injectionPointBean, reference); list.add(reference); injectionPoint = true; @@ -102,7 +108,14 @@ public class InjectableMethods extend } else { - list.add(inject(point)); + Object instance = inject(point); + Bean injectedBean = (Bean)InjectionResolver.getInstance().getInjectionPointBean(point); + if(injectedBean.getScope() == Dependent.class) + { + this.dependentParameters.put(injectedBean, instance); + } + + list.add(instance); } } @@ -130,10 +143,15 @@ public class InjectableMethods extend /** * Destroy dependent objects of the bean. */ - public void destroyDependentInjectionPoints() + public void destroyDependentInjectionPoints(Object ownerInstance) { CreationalContextImpl ownerCreational = (CreationalContextImpl) this.injectionOwnerCreationalContext; - ownerCreational.removeDependents(); + ownerCreational.removeDependents(ownerInstance); + } + + public Map,Object> getDependentBeanParameters() + { + return this.dependentParameters; } /** Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorData.java Wed Apr 14 19:56:22 2010 @@ -164,7 +164,7 @@ public interface InterceptorData * Creates and returns a new interceptor instance. * @return creates a new interceptor instance */ - public Object createNewInstance(CreationalContextImpl ownerBean); + public Object createNewInstance(Object ownerInstance,CreationalContextImpl ownerBean); /** * if this interceptor data is defined by interceptor, 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -292,7 +292,7 @@ public class InterceptorDataImpl impleme @Override @SuppressWarnings("unchecked") - public Object createNewInstance(CreationalContextImpl ownerCreationalContext) + public Object createNewInstance(Object ownerInstance,CreationalContextImpl ownerCreationalContext) { //check for this InterceptorData is defined by interceptor class if(this.isDefinedWithWebBeansInterceptor && this.definedInInterceptorClass) @@ -305,7 +305,7 @@ public class InterceptorDataImpl impleme return this.decoratorInterceptor; } - interceptor = ownerCreationalContext.getDependentInterceptor(this.webBeansInterceptor); + interceptor = ownerCreationalContext.getDependentInterceptor(ownerInstance,this.webBeansInterceptor); //There is no define interceptor, define and add it into dependent if(interceptor == null) { @@ -317,7 +317,7 @@ public class InterceptorDataImpl impleme actualInterceptor.setInjections(interceptor, creationalContext); - ownerCreationalContext.addDependent((WebBeansInterceptor)this.webBeansInterceptor, interceptor, creationalContext); + ownerCreationalContext.addDependent(ownerInstance, (WebBeansInterceptor)this.webBeansInterceptor, interceptor); } return interceptor; @@ -328,7 +328,7 @@ public class InterceptorDataImpl impleme //control for this InterceptorData is defined by interceptor class if(this.definedInInterceptorClass) { - ctx = ownerCreationalContext.getEjbInterceptor(this.interceptorClass); + ctx = ownerCreationalContext.getEjbInterceptor(ownerInstance, this.interceptorClass); if(ctx == null) { interceptor = WebBeansUtil.newInstanceForced(this.interceptorClass); Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InvocationContextImpl.java Wed Apr 14 19:56:22 2010 @@ -200,7 +200,7 @@ public class InvocationContextImpl imple method.setAccessible(true); } - Object t = intc.createNewInstance((CreationalContextImpl)this.creationalContext); + Object t = intc.createNewInstance(this.target,(CreationalContextImpl)this.creationalContext); if (t == null) { @@ -272,7 +272,7 @@ public class InvocationContextImpl imple currentMethod++; - Object t = intc.createNewInstance((CreationalContextImpl)this.creationalContext); + Object t = intc.createNewInstance(this.target,(CreationalContextImpl)this.creationalContext); //In bean class if (t == null) Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java?rev=934161&r1=934160&r2=934161&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java Wed Apr 14 19:56:22 2010 @@ -13,6 +13,7 @@ */ package org.apache.webbeans.portable.creation; +import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.InjectionTarget; @@ -20,6 +21,7 @@ import org.apache.webbeans.component.Ent import org.apache.webbeans.component.InjectionTargetBean; import org.apache.webbeans.context.creational.CreationalContextFactory; import org.apache.webbeans.context.creational.CreationalContextImpl; +import org.apache.webbeans.inject.AbstractInjectable; /** * InjectionTargetProducer implementation. @@ -51,16 +53,45 @@ public class InjectionTargetProducer ctx = CreationalContextFactory.getInstance().wrappedCreationalContext(ctx, this.bean); } - InjectionTargetBean bean = getBean(InjectionTargetBean.class); - - if(!(bean instanceof EnterpriseBeanMarker)) + Object oldInstanceUnderInjection = AbstractInjectable.instanceUnderInjection.get(); + boolean isInjectionToAnotherBean = false; + try + { + Contextual contextual = null; + if(ctx instanceof CreationalContextImpl) + { + contextual = ((CreationalContextImpl)ctx).getBean(); + isInjectionToAnotherBean = contextual == getBean(InjectionTargetBean.class) ? false : true; + } + + if(!isInjectionToAnotherBean) + { + AbstractInjectable.instanceUnderInjection.set(instance); + } + + InjectionTargetBean bean = getBean(InjectionTargetBean.class); + + if(!(bean instanceof EnterpriseBeanMarker)) + { + bean.injectResources(instance, ctx); + bean.injectSuperFields(instance, ctx); + bean.injectSuperMethods(instance, ctx); + bean.injectFields(instance, ctx); + bean.injectMethods(instance, ctx); + } + } + finally { - bean.injectResources(instance, ctx); - bean.injectSuperFields(instance, ctx); - bean.injectSuperMethods(instance, ctx); - bean.injectFields(instance, ctx); - bean.injectMethods(instance, ctx); - } + if(oldInstanceUnderInjection != null) + { + AbstractInjectable.instanceUnderInjection.set(oldInstanceUnderInjection); + } + else + { + AbstractInjectable.instanceUnderInjection.remove(); + } + } + } /** 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=934161&r1=934160&r2=934161&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 Wed Apr 14 19:56:22 2010 @@ -126,7 +126,6 @@ import org.apache.webbeans.config.OWBLog import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.container.ExternalScope; import org.apache.webbeans.container.InjectionResolver; -import org.apache.webbeans.context.creational.CreationalContextImpl; import org.apache.webbeans.conversation.ConversationImpl; import org.apache.webbeans.decorator.DecoratorUtil; import org.apache.webbeans.decorator.DecoratorsManager; @@ -2563,28 +2562,7 @@ public final class WebBeansUtil { producer.setEnabled(parent.isEnabled()); } - } - - public static Object getObjectFromCreationalContext(Bean bean,CreationalContextImpl cc) - { - if(cc == null) - { - throw new IllegalArgumentException("Creational context is null"); - } - - final Contextual existing = cc.getBean(); - if(existing != null && existing.equals(bean)) - { - return cc.getProxyInstance(); - } - - if(cc.getOwnerCreational() != null) - { - return getObjectFromCreationalContext(bean, cc.getOwnerCreational()); - } - - return null; - } + } public static boolean isExtensionEventType(Class clazz) {