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/04/15 09:19:11 UTC
svn commit: r1467877 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
context/creational/CreationalContextImpl.java
inject/instance/InstanceImpl.java
intercept/NormalScopedBeanInterceptorHandler.java
Author: arne
Date: Mon Apr 15 07:19:11 2013
New Revision: 1467877
URL: http://svn.apache.org/r1467877
Log:
OWB-830: Implemented Instance#destroy
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
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=1467877&r1=1467876&r2=1467877&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 Mon Apr 15 07:19:11 2013
@@ -23,6 +23,7 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.Stack;
@@ -135,7 +136,7 @@ public class CreationalContextImpl<T> im
{
//No-action
}
-
+
/**
* Adds given dependent instance to the map.
*
@@ -181,6 +182,29 @@ public class CreationalContextImpl<T> im
}
}
+ public <X> void destroyDependent(X instance)
+ {
+ if (dependentObjects == null)
+ {
+ return;
+ }
+ synchronized (this)
+ {
+ for (Iterator<DependentCreationalContext<?>> i = dependentObjects.iterator(); i.hasNext();)
+ {
+ DependentCreationalContext<?> dependentContext = i.next();
+ if (dependentContext.getInstance() == instance)
+ {
+ Contextual<X> dependentContextual = (Contextual<X>)dependentContext.getContextual();
+ CreationalContext<X> creationalContext = (CreationalContext<X>)this;
+ dependentContextual.destroy(instance, creationalContext);
+ i.remove();
+ break;
+ }
+ }
+ }
+ }
+
@SuppressWarnings("unchecked")
public void removeAllDependents()
{
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=1467877&r1=1467876&r2=1467877&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 Mon Apr 15 07:19:11 2013
@@ -33,11 +33,14 @@ import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.util.TypeLiteral;
+import javax.inject.Provider;
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.intercept.NormalScopedBeanInterceptorHandler;
+import org.apache.webbeans.proxy.OwbNormalScopeProxy;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.InjectionExceptionUtil;
import org.apache.webbeans.util.OwbCustomObjectInputStream;
@@ -66,7 +69,7 @@ public class InstanceImpl<T> implements
private WebBeansContext webBeansContext;
private CreationalContextImpl<?> parentCreationalContext;
-
+
/**
* Creates new instance.
*
@@ -279,6 +282,23 @@ public class InstanceImpl<T> implements
return instances.iterator();
}
+
+ public void destroy(T instance)
+ {
+ if (instance instanceof OwbNormalScopeProxy)
+ {
+ OwbNormalScopeProxy proxy = (OwbNormalScopeProxy) instance;
+ Provider<T> provider = webBeansContext.getNormalScopeProxyFactory().getInstanceProvider(proxy);
+ NormalScopedBeanInterceptorHandler handler = (NormalScopedBeanInterceptorHandler)provider;
+ Bean<T> bean = (Bean<T>)handler.getBean();
+ CreationalContext<T> creationalContext = (CreationalContext<T>)parentCreationalContext;
+ bean.destroy(instance, creationalContext);
+ }
+ else
+ {
+ parentCreationalContext.destroyDependent(instance);
+ }
+ }
private void writeObject(java.io.ObjectOutputStream op) throws IOException
{
@@ -299,7 +319,6 @@ public class InstanceImpl<T> implements
injectionPoint = (InjectionPoint) inputStream.readObject();
}
-
public String toString()
{
StringBuilder builder = new StringBuilder();
@@ -323,5 +342,4 @@ public class InstanceImpl<T> implements
return builder.toString();
}
-
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=1467877&r1=1467876&r2=1467877&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java Mon Apr 15 07:19:11 2013
@@ -70,6 +70,11 @@ public class NormalScopedBeanInterceptor
return getContextualInstance();
}
+ public Bean<?> getBean()
+ {
+ return bean;
+ }
+
protected BeanManager getBeanManager()
{
return beanManager;