Author: rmannibucau
Date: Mon Oct  3 16:58:53 2011
New Revision: 1178455

URL: http://svn.apache.org/viewvc?rev=1178455&view=rev
Log:
trying to release cdi dependent beans from ejb instances (see 
creationcontext.release())

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/Instance.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/Instance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/Instance.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/Instance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/Instance.java
 Mon Oct  3 16:58:53 2011
@@ -25,6 +25,7 @@ import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.Index;
 import org.apache.openejb.util.PojoSerialization;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.persistence.EntityManagerFactory;
 import javax.transaction.Transaction;
 import java.io.ObjectStreamException;
@@ -40,6 +41,7 @@ public class Instance implements Seriali
     public final BeanContext beanContext;
     public final Object primaryKey;
     public final Object bean;
+    public final CreationalContext creationalContext;
     public final Map<String, Object> interceptors;
 
     private boolean inUse;
@@ -53,16 +55,17 @@ public class Instance implements Seriali
     private Map<EntityManagerFactory, 
JtaEntityManagerRegistry.EntityManagerTracker> entityManagers;
     private final JtaEntityManagerRegistry.EntityManagerTracker[] 
entityManagerArray;
 
-    public Instance(BeanContext beanContext, Object primaryKey, Object bean, 
Map<String, Object> interceptors, Map<EntityManagerFactory, 
JtaEntityManagerRegistry.EntityManagerTracker> entityManagers) {
+    public Instance(BeanContext beanContext, Object primaryKey, Object bean, 
Map<String, Object> interceptors, CreationalContext creationalContext, 
Map<EntityManagerFactory, JtaEntityManagerRegistry.EntityManagerTracker> 
entityManagers) {
         this.beanContext = beanContext;
         this.primaryKey = primaryKey;
         this.bean = bean;
         this.interceptors = interceptors;
+        this.creationalContext = creationalContext;
         this.entityManagers = entityManagers;
         this.entityManagerArray = null;
     }
 
-    public Instance(Object deploymentId, Object primaryKey, Object bean, 
Map<String, Object> interceptors, 
JtaEntityManagerRegistry.EntityManagerTracker[] entityManagerArray) {
+    public Instance(Object deploymentId, Object primaryKey, Object bean, 
Map<String, Object> interceptors, CreationalContext creationalContext, 
JtaEntityManagerRegistry.EntityManagerTracker[] entityManagerArray) {
         this.beanContext = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext(deploymentId);
         if (beanContext == null) {
             throw new IllegalArgumentException("Unknown deployment " + 
deploymentId);
@@ -70,6 +73,7 @@ public class Instance implements Seriali
         this.primaryKey = primaryKey;
         this.bean = bean;
         this.interceptors = interceptors;
+        this.creationalContext = creationalContext;
         this.entityManagerArray = entityManagerArray;
     }
 
@@ -147,12 +151,14 @@ public class Instance implements Seriali
         public final Object primaryKey;
         public final Object bean;
         public final Map<String, Object> interceptors;
+        public final CreationalContext creationalContext;
         public final JtaEntityManagerRegistry.EntityManagerTracker[] 
entityManagerArray;
 
         public Serialization(Instance i) {
             deploymentId = i.beanContext.getDeploymentID();
             primaryKey = i.primaryKey;
             bean = toSerializable(i.bean);
+            creationalContext = i.creationalContext;
 
             interceptors = new HashMap<String, Object>(i.interceptors.size());
             for (Map.Entry<String, Object> e : i.interceptors.entrySet()) {
@@ -185,7 +191,7 @@ public class Instance implements Seriali
             // Anything wrapped with PojoSerialization will have been 
automatically
             // unwrapped via it's own readResolve so passing in the raw bean
             // and interceptors variables is totally fine.
-            return new Instance(deploymentId, primaryKey, bean, interceptors, 
entityManagerArray);
+            return new Instance(deploymentId, primaryKey, bean, interceptors, 
creationalContext, entityManagerArray);
         }
     }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
 Mon Oct  3 16:58:53 2011
@@ -330,6 +330,8 @@ public class ManagedContainer implements
             default:
                 return businessMethod(beanContext, primKey, callInterface, 
callMethod, args, type);
         }
+
+
     }
 
     protected ProxyInfo createEJBObject(BeanContext beanContext, Method 
callMethod, Object[] args, InterfaceType interfaceType) throws OpenEJBException 
{
@@ -369,7 +371,7 @@ public class ManagedContainer implements
                     final InstanceContext context = beanContext.newInstance();
 
                     // Wrap-up everthing into a object
-                    instance = new Instance(beanContext, primaryKey, 
context.getBean(), context.getInterceptors(), entityManagers);
+                    instance = new Instance(beanContext, primaryKey, 
context.getBean(), context.getInterceptors(), context.getCreationalContext(), 
entityManagers);
 
                 } catch (Throwable throwable) {
                     ThreadContext callContext = 
ThreadContext.getThreadContext();
@@ -691,8 +693,11 @@ public class ManagedContainer implements
             return;
         }
 
-        checkedOutInstances.remove(primaryKey);
+        Instance instance = checkedOutInstances.remove(primaryKey);
         cache.remove(primaryKey);
+        if (instance.creationalContext != null) {
+            instance.creationalContext.release();
+        }
     }
 
     private void checkAuthorization(Method callMethod, InterfaceType 
interfaceType) throws ApplicationException {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/Instance.java
 Mon Oct  3 16:58:53 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.core.mdb;
 
+import javax.enterprise.context.spi.CreationalContext;
 import java.util.Map;
 
 /**
@@ -24,9 +25,11 @@ import java.util.Map;
 public class Instance {
     public final Object bean;
     public final Map<String,Object> interceptors;
+    public final CreationalContext creationalContext;
 
-    public Instance(Object bean, Map<String, Object> interceptors) {
+    public Instance(Object bean, Map<String, Object> interceptors, 
CreationalContext creationalContext) {
         this.bean = bean;
         this.interceptors = interceptors;
+        this.creationalContext = creationalContext;
     }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
 Mon Oct  3 16:58:53 2011
@@ -169,6 +169,9 @@ public class MdbInstanceFactory {
             List<InterceptorData> callbackInterceptors = 
beanContext.getCallbackInterceptors();
             InterceptorStack interceptorStack = new 
InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, 
callbackInterceptors, instance.interceptors);
             interceptorStack.invoke();
+            if (instance.creationalContext != null) {
+                instance.creationalContext.release();
+            }
         } catch (Throwable re) {
             MdbInstanceFactory.logger.error("The bean instance " + 
instance.bean + " threw a system exception:" + re, re);
         } finally {
@@ -209,7 +212,7 @@ public class MdbInstanceFactory {
                 ejbCreate.invoke();
             }
 
-            return new Instance(context.getBean(), context.getInterceptors());
+            return new Instance(context.getBean(), context.getInterceptors(), 
context.getCreationalContext());
         } catch (Throwable e) {
             if (e instanceof java.lang.reflect.InvocationTargetException) {
                 e = ((java.lang.reflect.InvocationTargetException) 
e).getTargetException();

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/Instance.java
 Mon Oct  3 16:58:53 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.core.singleton;
 
+import javax.enterprise.context.spi.CreationalContext;
 import java.util.Map;
 import java.util.concurrent.locks.ReadWriteLock;
 
@@ -26,10 +27,12 @@ public class Instance {
     public final Object bean;
     public final Map<String,Object> interceptors;
     public final ReadWriteLock lock;
+    public final CreationalContext creationalContext;
 
-    public Instance(Object bean, Map<String, Object> interceptors, 
ReadWriteLock lock) {
+    public Instance(Object bean, Map<String, Object> interceptors, 
CreationalContext creationalContext, ReadWriteLock lock) {
         this.bean = bean;
         this.interceptors = interceptors;
         this.lock = lock;
+        this.creationalContext = creationalContext;
     }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 Mon Oct  3 16:58:53 2011
@@ -196,7 +196,7 @@ public class SingletonInstanceManager {
                 lock = new ReentrantReadWriteLock();
             }
 
-            return new Instance(context.getBean(), context.getInterceptors(), 
lock);
+            return new Instance(context.getBean(), context.getInterceptors(), 
context.getCreationalContext(), lock);
         } catch (Throwable e) {
             if (e instanceof java.lang.reflect.InvocationTargetException) {
                 e = ((java.lang.reflect.InvocationTargetException) 
e).getTargetException();
@@ -256,6 +256,9 @@ public class SingletonInstanceManager {
             try{
                 //Call the chain
                 interceptorStack.invoke();
+                if (instance.creationalContext != null) {
+                    instance.creationalContext.release();
+                }
             } catch(Throwable e) {
                 //RollBack Transaction
                 EjbTransactionUtil.handleSystemException(transactionPolicy, e, 
callContext);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/Instance.java
 Mon Oct  3 16:58:53 2011
@@ -25,6 +25,7 @@ import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.Index;
 import org.apache.openejb.util.PojoSerialization;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.persistence.EntityManagerFactory;
 import javax.transaction.Transaction;
 import java.io.ObjectStreamException;
@@ -40,6 +41,7 @@ public class Instance implements Seriali
     public final BeanContext beanContext;
     public final Object primaryKey;
     public final Object bean;
+    public CreationalContext creationalContext;
     public final Map<String, Object> interceptors;
 
     private boolean inUse;
@@ -53,22 +55,24 @@ public class Instance implements Seriali
     private Map<EntityManagerFactory, 
JtaEntityManagerRegistry.EntityManagerTracker> entityManagers;
     private final JtaEntityManagerRegistry.EntityManagerTracker[] 
entityManagerArray;
 
-    public Instance(BeanContext beanContext, Object primaryKey, Object bean, 
Map<String, Object> interceptors, Map<EntityManagerFactory, 
JtaEntityManagerRegistry.EntityManagerTracker> entityManagers) {
+    public Instance(BeanContext beanContext, Object primaryKey, Object bean, 
CreationalContext creationalContext, Map<String, Object> interceptors, 
Map<EntityManagerFactory, JtaEntityManagerRegistry.EntityManagerTracker> 
entityManagers) {
         this.beanContext = beanContext;
         this.primaryKey = primaryKey;
         this.bean = bean;
         this.interceptors = interceptors;
+        this.creationalContext = creationalContext;
         this.entityManagers = entityManagers;
         this.entityManagerArray = null;
     }
 
-    public Instance(Object deploymentId, Object primaryKey, Object bean, 
Map<String, Object> interceptors, 
JtaEntityManagerRegistry.EntityManagerTracker[] entityManagerArray) {
+    public Instance(Object deploymentId, Object primaryKey, Object bean, 
CreationalContext creationalContext, Map<String, Object> interceptors, 
JtaEntityManagerRegistry.EntityManagerTracker[] entityManagerArray) {
         this.beanContext = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext(deploymentId);
         if (beanContext == null) {
             throw new IllegalArgumentException("Unknown deployment " + 
deploymentId);
         }
         this.primaryKey = primaryKey;
         this.bean = bean;
+        this.creationalContext = creationalContext;
         this.interceptors = interceptors;
         this.entityManagerArray = entityManagerArray;
     }
@@ -146,6 +150,7 @@ public class Instance implements Seriali
         public final Object deploymentId;
         public final Object primaryKey;
         public final Object bean;
+        public final CreationalContext creationalContext;
         public final Map<String, Object> interceptors;
         public final JtaEntityManagerRegistry.EntityManagerTracker[] 
entityManagerArray;
 
@@ -153,6 +158,7 @@ public class Instance implements Seriali
             deploymentId = i.beanContext.getDeploymentID();
             primaryKey = i.primaryKey;
             bean = toSerializable(i.bean);
+            creationalContext = i.creationalContext;
 
             interceptors = new HashMap<String, Object>(i.interceptors.size());
             for (Map.Entry<String, Object> e : i.interceptors.entrySet()) {
@@ -185,7 +191,7 @@ public class Instance implements Seriali
             // Anything wrapped with PojoSerialization will have been 
automatically
             // unwrapped via it's own readResolve so passing in the raw bean
             // and interceptors variables is totally fine.
-            return new Instance(deploymentId, primaryKey, bean, interceptors, 
entityManagerArray);
+            return new Instance(deploymentId, primaryKey, bean, 
creationalContext, interceptors, entityManagerArray);
         }
     }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 Mon Oct  3 16:58:53 2011
@@ -386,7 +386,7 @@ public class StatefulContainer implement
                     final InstanceContext context = beanContext.newInstance();
 
                     // Wrap-up everthing into a object
-                    instance = new Instance(beanContext, primaryKey, 
context.getBean(), context.getInterceptors(), entityManagers);
+                    instance = new Instance(beanContext, primaryKey, 
context.getBean(),  context.getCreationalContext(), context.getInterceptors(), 
entityManagers);
 
                 } catch (Throwable throwable) {
                     ThreadContext callContext = 
ThreadContext.getThreadContext();
@@ -770,8 +770,11 @@ public class StatefulContainer implement
             return;
         }
 
-        checkedOutInstances.remove(primaryKey);
+        Instance instance = checkedOutInstances.remove(primaryKey);
         cache.remove(primaryKey);
+        if (instance.creationalContext != null) {
+            instance.creationalContext.release();
+        }
     }
 
     private void checkAuthorization(Method callMethod, InterfaceType 
interfaceType) throws ApplicationException {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/Instance.java
 Mon Oct  3 16:58:53 2011
@@ -18,6 +18,7 @@ package org.apache.openejb.core.stateles
 
 import org.apache.openejb.util.Pool;
 
+import javax.enterprise.context.spi.CreationalContext;
 import java.util.Map;
 
 /**
@@ -26,12 +27,14 @@ import java.util.Map;
 public class Instance {
     public final Object bean;
     public final Map<String, Object> interceptors;
+    public CreationalContext creationalContext;
 
     private Pool<Instance>.Entry poolEntry;
 
-    public Instance(Object bean, Map<String, Object> interceptors) {
+    public Instance(Object bean, Map<String, Object> interceptors, 
CreationalContext creationalContext) {
         this.bean = bean;
         this.interceptors = interceptors;
+        this.creationalContext = creationalContext;
     }
 
     public Pool<Instance>.Entry getPoolEntry() {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1178455&r1=1178454&r2=1178455&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 Mon Oct  3 16:58:53 2011
@@ -190,7 +190,7 @@ public class StatelessInstanceManager {
                 }
             }
 
-            return new Instance(context.getBean(), context.getInterceptors());
+            return new Instance(context.getBean(), context.getInterceptors(), 
context.getCreationalContext());
         } catch (Throwable e) {
             if (e instanceof InvocationTargetException) {
                 e = ((InvocationTargetException) e).getTargetException();
@@ -261,6 +261,10 @@ public class StatelessInstanceManager {
             InterceptorStack interceptorStack = new 
InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, 
callbackInterceptors, instance.interceptors);
 
             interceptorStack.invoke();
+
+            if (instance.creationalContext != null) {
+                instance.creationalContext.release();
+            }
         } catch (Throwable re) {
             logger.error("The bean instance " + instance + " threw a system 
exception:" + re, re);
         }


Reply via email to