this semaphore implementation does not use the database . concode_field_sep HashSet<String> locks concode_elem_sep String DEFAULT_TRANSACTION_MANANGER_LOCATION concode_elem_sep ThreadLocal<HashSet<String>> lockOwners concode_elem_sep Logger log concode_elem_sep String transactionManagerJNDIName concode_elem_sep String lockName concode_field_sep void beforeCompletion concode_elem_sep boolean isLockOwner concode_elem_sep Logger getLog concode_elem_sep void releaseLock concode_elem_sep void releaseLock concode_elem_sep void afterCompletion concode_elem_sep HashSet<String> getThreadLocks concode_elem_sep void setTransactionManagerJNDIName concode_elem_sep boolean obtainLock concode_elem_sep Transaction getTransaction
boolean function ( ) { return false ; }