@Override protected synchronized GlobalLock doLock(final String lockName) { if (!isFree(lockName)) { return null; } if (locks.get(lockName) == null) { locks.put(lockName, new AtomicBoolean(true)); } else { locks.get(lockName).set(true); } final GlobalLock lock = new GlobalLock() { @Override public void release() { if (lockTable.releaseLock(lockName)) { locks.get(lockName).set(false); } } }; lockTable.createLock(lockName, lock); return lock; }
@Override protected GlobalLock doLock(final String lockName) { Connection connection = null; boolean obtained = false; try { connection = dataSource.getConnection(); obtained = globalLockDao.lock(connection, lockName, timeout, timeUnit); if (obtained) { final GlobalLock lock = getGlobalLock(connection, lockName, new ResetReentrantLockCallback() { @Override public boolean reset(final String lockName) { return lockTable.releaseLock(lockName); } }); lockTable.createLock(lockName, lock); return lock; } } catch (final SQLException e) { logger.warn("Unable to obtain lock for {}", lockName, e); } finally { if (!obtained && connection != null) { try { connection.close(); } catch (final SQLException e) { logger.warn("Unable to close connection", e); } } } return null; }