.buildLockRequest( LockOptions.NONE ) .setLockMode( LockMode.PESSIMISTIC_READ ) .setTimeOut( LockOptions.NO_WAIT ) .lock( person ); .buildLockRequest( LockOptions.NONE ) .setLockMode( LockMode.PESSIMISTIC_READ ) .setTimeOut( LockOptions.NO_WAIT ) .setScope( true ) .lock( person );
/** * A strategy method to lock an object with an exclusive lock so that it can * be processed * * @param entity the entity to be locked * @param session * @return true if the entity was locked */ protected boolean lockEntity(Object entity, Session session) { if (!getEndpoint().isConsumeDelete() || !getEndpoint().isConsumeLockEntity()) { return true; } try { if (LOG.isDebugEnabled()) { LOG.debug("Acquiring exclusive lock on entity: " + entity); } session.buildLockRequest(LockOptions.UPGRADE).setLockMode(LockMode.PESSIMISTIC_WRITE).setTimeOut(60000).lock(entity); return true; } catch (Exception e) { if (LOG.isDebugEnabled()) { LOG.debug("Failed to achieve lock on entity: " + entity + ". Reason: " + e, e); } return false; } }
@Test public void testPessimisticReadWithPessimisticWriteNoWait() throws InterruptedException { LOGGER.info("Test PESSIMISTIC_READ blocks PESSIMISTIC_WRITE, NO WAIT fails fast"); testPessimisticLocking( (session, post) -> { session.buildLockRequest(new LockOptions(LockMode.PESSIMISTIC_READ)).lock(post); LOGGER.info("PESSIMISTIC_READ acquired"); }, (session, post) -> { session.buildLockRequest(new LockOptions(LockMode.PESSIMISTIC_WRITE)).setTimeOut(Session.LockRequest.PESSIMISTIC_NO_WAIT).lock(post); LOGGER.info("PESSIMISTIC_WRITE acquired"); } ); }