This message was cross-posted in the cluster forum to inform the authors of an affected subsystem.
When we have an entity with an cache-invalidation set
to true. The problem is that it is being invalidated in every transaction. Clearly not what we want. The bean is not configured to be read-only.
Debugging through the container, I found the following:
EntityBeanCacheBatchInvalidatorInterceptor has a changed() method that calls the container.getPersistenceManager().isModified(). In turn, the CMPPersistenceManager's isModified calls JDBCStoreManager-->isModifiedCommand.execute(ctx) which is hardcoded
to return true.
However, when the container itself does not use the isModified when it saves and enity. It uses a dirty list to determine whether the bean needs to be persisted.
Look at JDBCStoreEntityCommand which uses the dirty list.
I have changed a local copy of the JDBCIsModifiedCommand to use the code in JDBCStoreEntityCommand and it works like a charm.
How do we get fix into the system ?
P.S I am using code from CVS updated 3 days ago. 3.2 branch. Using JDK1.4.1 on linux
Thank you for finding this. Nothing much to say for me, as I prefer to have all CMP fixes be checked by someone from the CMP team (Dain, Alexey, etc.)
In the meantime, you can go here : http://sf.net/projects/jboss and post a fix for this bug (it will get better visibility than lost in the forums)