Dain,
This change is causing some TCK breakage. Can you have a look? Details on TCK list...

--kevan

On May 25, 2007, at 7:51 PM, [EMAIL PROTECTED] wrote:

Author: dain
Date: Fri May 25 16:51:36 2007
New Revision: 541825

URL: http://svn.apache.org/viewvc?view=rev&rev=541825
Log:
Fixed create-remove-create bug in BMP container

Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityContainer.java incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityInstanceManager.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/ src/main/java/org/apache/openejb/core/entity/EntityContainer.java URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/ container/openejb-core/src/main/java/org/apache/openejb/core/entity/ EntityContainer.java?view=diff&rev=541825&r1=541824&r2=541825 ====================================================================== ======== --- incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityContainer.java (original) +++ incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityContainer.java Fri May 25 16:51:36 2007
@@ -216,7 +216,7 @@
             ejbLoad_If_No_Transaction(callContext, bean);
             returnValue = runMethod.invoke(bean, args);
             ejbStore_If_No_Transaction(callContext, bean);
-            instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, callContext.getPrimaryKey()); } catch (java.lang.reflect.InvocationTargetException ite) {// handle enterprise bean exceptions ExceptionType type = callContext.getDeploymentInfo ().getExceptionType(ite.getTargetException());
             if (type == ExceptionType.SYSTEM) {
@@ -225,7 +225,7 @@
txPolicy.handleSystemException (ite.getTargetException(), bean, txContext);
             } else {
                 /* Application Exception ***********************/
-                instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, callContext.getPrimaryKey()); txPolicy.handleApplicationException (ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
             }
         } catch (org.apache.openejb.ApplicationException e) {
@@ -384,7 +384,7 @@
             }

             // update pool
-            instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, primaryKey); } catch (java.lang.reflect.InvocationTargetException ite) {// handle enterprise bean exceptions ExceptionType type = callContext.getDeploymentInfo ().getExceptionType(ite.getTargetException());
             if (type == ExceptionType.SYSTEM) {
@@ -392,7 +392,7 @@
txPolicy.handleSystemException (ite.getTargetException(), bean, txContext);
             } else {
                 /* Application Exception ***********************/
-                instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, callContext.getPrimaryKey()); txPolicy.handleApplicationException (ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
             }
         } catch (OpenEJBException e) {
@@ -494,7 +494,7 @@
             ejbLoad_If_No_Transaction(callContext, bean);
             bean.ejbRemove();
             didRemove(bean, callContext);
-            instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, callContext.getPrimaryKey());
         } catch (org.apache.openejb.ApplicationException e) {
txPolicy.handleApplicationException(e.getRootCause(), false, txContext);
         } catch (org.apache.openejb.SystemException se) {
@@ -506,7 +506,7 @@
                 txPolicy.handleSystemException(e, bean, txContext);
             } else {
                 /* Application Exception ***********************/
-                instanceManager.poolInstance(callContext, bean);
+ instanceManager.poolInstance(callContext, bean, callContext.getPrimaryKey()); txPolicy.handleApplicationException(e, type == ExceptionType.APPLICATION_ROLLBACK, txContext);
             }
         } finally {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/ src/main/java/org/apache/openejb/core/entity/ EntityInstanceManager.java URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/ container/openejb-core/src/main/java/org/apache/openejb/core/entity/ EntityInstanceManager.java?view=diff&rev=541825&r1=541824&r2=541825 ====================================================================== ======== --- incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityInstanceManager.java (original) +++ incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/entity/EntityInstanceManager.java Fri May 25 16:51:36 2007
@@ -302,11 +302,10 @@
return new EntityContext(transactionManager, securityService);
     }

- public void poolInstance(ThreadContext callContext, EntityBean bean) throws OpenEJBException { + public void poolInstance(ThreadContext callContext, EntityBean bean, Object primaryKey) throws OpenEJBException {
         if (bean == null) {
             return;
         }
- Object primaryKey = callContext.getPrimaryKey();// null if servicing a home ejbFind or ejbHome method.
         Transaction currentTx = null;
         try {
             currentTx = getTransactionManager().getTransaction();
@@ -332,8 +331,13 @@
                     */
Stack methodReadyPool = poolMap.get (callContext.getDeploymentInfo().getDeploymentID());
                     methodReadyPool.push(bean);
-                } else
+                } else {
+ if (callContext.getCurrentOperation() == Operation.CREATE) { + // Bean is being recreated (new-delete- new) so we need to reassociate it
+                        wrapper.associate();
+                    }
                     wrapper.setEntityBean(bean);
+                }
             } else {
                 /*
A wrapper will not exist if the bean is being returned after a create operation.
@@ -555,6 +559,10 @@
             isAssociated = true;
             deploymentInfo = callContext.getDeploymentInfo();
             primaryKey = callContext.getPrimaryKey();
+        }
+
+        public void associate() {
+            isAssociated = true;
         }

         public void disassociate() {



Reply via email to