Changing the locking policy
CMP locking is described here.
Trying to use a globally shared instance cache without a real lock
If you DON'T use a real BeanLock implementation like QueuedPessimisticEJBLock then you cannot
use the global shared instance cache. You need to use the "instance per transaction"
configuration which will give you commit option C semantics and potentially "MVCC" when used
with optimistic locking.
Using CMP outside a transaction with a shared cache
Since locks are taken per instance at the transaction level, if you use CMP outside a transaction
then the locking is undefined (see also the warning paragraph in the spec about using CMP
outside a transaction).
Basically, if you are doing anything more than read-only semantics you are probably not going to
get the behaviour you expect.