Scenario:
Inside transaction I create entity bean and call some business methods on it.
Then transaction fail.
Problem:
After that the same EntityEnterpriseContext appears twice in EntityInstancePool.
Explanation:
1) When I create entity bean JBoss register transaction callback in method
EntitySynchronizationInterceptor.invokeHome
It calls register(ctx, tx)
Note: ctx.isInvoked == false !
2) When I call business method JBoss register transaction callback once again in method
EntitySynchronizationInterceptor.invoke because ctx.isInvoked was false
3) When transaction fail InstanceSynchronization.afterCompletion is called.
This method returns context into the pool.
container.getInstancePool().free(ctx)
Since we have 2 callbacks we return the same context 2 times!
Solution:
public class SafeEntityInstancePool extends EntityInstancePool {
public synchronized void free(EnterpriseContext ctx) {
// check is this instance already in pool?
if (pool.search(ctx) != -1) {
System.out.println("!!!!!! BUG !!!!!!");
return;
}
super.free(ctx);
}
}
Questions:
Is it a bug? Or I don't understand something?
Thanks,
Dmitri Ulitski
--
--------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
List Help?: [EMAIL PROTECTED]