@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;
}