After applying CMR within our project where we up to hundreds of thousands of transactions per day against "base" data, we have discovered that because of the locking policy (even the SimpleReadWrite one), it is acceptable to use CMR when the relationship is one of composition, and to avoid it when it is one of aggregation. Even in the former case, we actually use our Limited Duration Cache technology to further cache deeply nested composite relationships of base data for the transactional processes.
The locking policy on reads for CMR, even when the CMR collection is not intended to be modified, is to block, and this causes serious performance problems. It would be nice to be able to specify that a relation usage is somehow read only, if even that meant obtaining an unmodifiable collection, but alas that is just wishful thinking.
Just thought I'd throw it out there for people to be warned!
This is a very nice warning. My current project have deadlock problem because of this cmr read-locking policy. I am just wondering is there any work around available?