The default locking system in EJB3 is mostly based on optimistic locking (ie using a version column to check any concurrency issues). EJB3 has defined an additional mechanism to increase the concurrency guaranties. You can apply a lock on a given entity (and it's associated entities if
LOCK is cascaded) through the lock(Object entity) method. Depending on the concurrency guaranties you requires, you choose a lock mode:
LockMode.READprevents dirty-reads and non repeatable read on a given entity.LockMode.WRITEprevents dirty-reads and non repeatable read on a given entity and force an increase of the version number if any.