You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by co...@apache.org on 2010/08/19 15:08:48 UTC
svn commit: r987155 -
/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
Author: covener
Date: Thu Aug 19 13:08:48 2010
New Revision: 987155
URL: http://svn.apache.org/viewvc?rev=987155&view=rev
Log:
[OWB-443] non-dependent EJBs neeed to be removed during Contextual.destroy()
Modified:
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java?rev=987155&r1=987154&r2=987155&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/component/BaseEjbBean.java Thu Aug 19 13:08:48 2010
@@ -24,12 +24,14 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.SessionBeanType;
import org.apache.webbeans.component.AbstractInjectionTargetBean;
import org.apache.webbeans.component.EnterpriseBeanMarker;
import org.apache.webbeans.component.WebBeansType;
+import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.util.ClassUtil;
/**
@@ -118,29 +120,49 @@ public abstract class BaseEjbBean<T> ext
@Override
protected void destroyComponentInstance(T instance, CreationalContext<T> creational)
{
- if ((this.getScope() == Dependent.class) && (getEjbType().equals(SessionBeanType.STATEFUL)))
+ if (getEjbType().equals(SessionBeanType.STATEFUL))
{
- try
+ if ((this.getScope() == Dependent.class))
{
- Object ejbInstance = getDependentSFSBForProxy(instance);
+ try
+ {
+ Object ejbInstance = getDependentSFSBForProxy(instance);
+ if (ejbInstance != null)
+ {
+ List<Method> methods = getRemoveMethods();
+ if (methods.size() > 0)
+ {
+ // FIXME: This needs to call an API from the EJB
+ // container to remove the EJB instance directly,
+ // not via a remove method. For now, just call 1
+ // remove method directly on the EJB
+ ClassUtil.callInstanceMethod(methods.get(0), ejbInstance, ClassUtil.OBJECT_EMPTY);
+ }
+ }
+ }
+ finally
+ {
+ removeDependentSFSB(instance);
+ }
+ }
+ else // normal scope
+ {
+ // The EjbBeanProxyHandler may not have actually obtained an EJB for this normal-scope Bean.
+ Context webbeansContext = BeanManagerImpl.getManager().getContext(this.getScope());
+ Object ejbInstance = webbeansContext.get(this);
if (ejbInstance != null)
{
List<Method> methods = getRemoveMethods();
- if (methods.size() > 0)
- {
+ if (methods.size() > 0)
+ {
// FIXME: This needs to call an API from the EJB
- // container to remove the EJB instance directly, not
- // via a remove method
- // For now, just call 1 remove method directly on the
- // EJB
+ // container to remove the EJB instance directly,
+ // not via a remove method. For now, just call 1
+ // remove method directly on the EJB
ClassUtil.callInstanceMethod(methods.get(0), ejbInstance, ClassUtil.OBJECT_EMPTY);
}
}
}
- finally
- {
- removeDependentSFSB(instance);
- }
}
}