@Override public boolean isFree(final String service, final String lockKey) { final String lockName = getLockName(service, lockKey); Connection connection = null; try { connection = dataSource.getConnection(); return globalLockDao.isLockFree(connection, lockName); } catch (final SQLException e) { logger.warn("Unable to check if lock is free", e); return false; } finally { if (connection != null) { try { connection.close(); } catch (final SQLException e) { logger.warn("Unable to close connection", e); } } } }
@Override public Void execute() throws RuntimeException { if (resetCallback != null && !resetCallback.reset(lockName)) { // We are not the last one using that lock, bail early (AND don't close the connection)... return null; } try { lockDao.releaseLock(connection, lockName); } catch (final SQLException e) { logger.warn("Unable to release lock for " + lockName, e); } finally { try { connection.close(); } catch (final SQLException e) { logger.warn("Unable to close connection", e); } } return null; } });
@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; }