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() {