Return-Path: X-Original-To: apmail-openwebbeans-commits-archive@www.apache.org Delivered-To: apmail-openwebbeans-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E505211AA8 for ; Thu, 1 May 2014 12:15:18 +0000 (UTC) Received: (qmail 65839 invoked by uid 500); 1 May 2014 12:15:18 -0000 Delivered-To: apmail-openwebbeans-commits-archive@openwebbeans.apache.org Received: (qmail 65797 invoked by uid 500); 1 May 2014 12:15:13 -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 65774 invoked by uid 99); 1 May 2014 12:15:11 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 01 May 2014 12:15:11 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED 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; Thu, 01 May 2014 12:15:09 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 6FB3B2388994; Thu, 1 May 2014 12:14:49 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1591632 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans: context/AbstractContext.java inject/instance/InstanceImpl.java Date: Thu, 01 May 2014 12:14:49 -0000 To: commits@openwebbeans.apache.org From: arne@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140501121449.6FB3B2388994@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: arne Date: Thu May 1 12:14:48 2014 New Revision: 1591632 URL: http://svn.apache.org/r1591632 Log: OWB-951: Implemented AlterableContext Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java 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=1591632&r1=1591631&r2=1591632&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 Thu May 1 12:14:48 2014 @@ -18,16 +18,20 @@ */ package org.apache.webbeans.context; -import java.io.*; +import java.io.IOException; +import java.io.NotSerializableException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; import java.lang.annotation.Annotation; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.Map.Entry; import java.util.concurrent.ConcurrentMap; import javax.enterprise.context.ContextNotActiveException; +import javax.enterprise.context.spi.AlterableContext; import javax.enterprise.context.spi.Context; import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; @@ -46,7 +50,7 @@ import org.apache.webbeans.context.creat * @see ApplicationContext * @see ConversationContext */ -public abstract class AbstractContext implements Context, Serializable +public abstract class AbstractContext implements Context, AlterableContext, Serializable { private static final long serialVersionUID = 2357678967444477818L; /**Context status, active or not*/ @@ -58,10 +62,6 @@ public abstract class AbstractContext im /**Contextual Scope Type*/ protected Class scopeType; - - - - @SuppressWarnings("unchecked") private void createContextualBag(Contextual contextual, CreationalContext creationalContext) @@ -164,6 +164,21 @@ public abstract class AbstractContext im return instance; } + @Override + public void destroy(Contextual contextual) { + + BeanInstanceBag instance = componentInstanceMap.get(contextual); + //Get creational context + CreationalContext cc = (CreationalContext)instance.getBeanCreationalContext(); + + //Destroy instance + final Object beanInstance = instance.getBeanInstance(); + if (beanInstance != null) + { + destroyInstance((Contextual)contextual, beanInstance, cc); + } + } + /** * Destroy the given web beans component instance. * @@ -171,40 +186,23 @@ public abstract class AbstractContext im * @param component web beans component * @param instance component instance */ - private void destroyInstance(Contextual component, T instance,CreationalContext creationalContext) + private void destroyInstance(Contextual component, T instance, CreationalContext creationalContext) { //Destroy component component.destroy(instance,creationalContext); + componentInstanceMap.remove(component); } /** * {@inheritDoc} */ - @SuppressWarnings("unchecked") public void destroy() { - Set, BeanInstanceBag>> entrySet = componentInstanceMap.entrySet(); - Iterator, BeanInstanceBag>> it = entrySet.iterator(); - - Contextual contextual; - while (it.hasNext()) + Set> keySet = new HashSet>(componentInstanceMap.keySet()); + for (Contextual contextual: keySet) { - contextual = it.next().getKey(); - - BeanInstanceBag instance = componentInstanceMap.get(contextual); - //Get creational context - CreationalContext cc = (CreationalContext)instance.getBeanCreationalContext(); - - //Destroy instance - final Object beanInstance = instance.getBeanInstance(); - if (beanInstance != null) - { - destroyInstance((Contextual) contextual, beanInstance, cc); - } + destroy(contextual); } - - //Clear context map - componentInstanceMap.clear(); setActive(false); } Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=1591632&r1=1591631&r2=1591632&view=diff ============================================================================== --- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original) +++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Thu May 1 12:14:48 2014 @@ -30,6 +30,8 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import javax.enterprise.context.spi.AlterableContext; +import javax.enterprise.context.spi.Context; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.Instance; import javax.enterprise.inject.spi.Bean; @@ -288,7 +290,16 @@ public class InstanceImpl implements NormalScopedBeanInterceptorHandler handler = (NormalScopedBeanInterceptorHandler)provider; Bean bean = (Bean)handler.getBean(); CreationalContext creationalContext = (CreationalContext)parentCreationalContext; - bean.destroy(instance, creationalContext); + Context currentContext = webBeansContext.getContextsService().getCurrentContext(bean.getScope()); + if (currentContext instanceof AlterableContext) + { + AlterableContext alterableContext = (AlterableContext)currentContext; + alterableContext.destroy(bean); + } + else + { + bean.destroy(instance, creationalContext); + } } else {