Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010-2013 Ning, Inc.
   *
   * Ning licenses this file to you under the Apache License, version 2.0
   * (the "License"); you may not use this file except in compliance with the
   * License.  You may obtain a copy of the License at:
   *
   *    http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
  * License for the specific language governing permissions and limitations
  * under the License.
  */
 
 package org.killbill.commons.locker.mysql;
 
 
 
 
 
 public class MySqlGlobalLocker implements GlobalLocker {
 
     private static final Logger logger = LoggerFactory.getLogger(MySqlGlobalLocker.class);
     private static final long DEFAULT_TIMEOUT_SECONDS = 10L;
 
     private final MysqlGlobalLockDao mysqlGlobalLockDao = new MysqlGlobalLockDao();
 
     private final DataSource dataSource;
     private final long timeout;
 
     public MySqlGlobalLocker(final DataSource dataSource) {
         this(dataSource.);
     }
 
     public MySqlGlobalLocker(final DataSource dataSourcefinal long timeoutfinal TimeUnit timeUnit) {
         this. = dataSource;
         this. = ..convert(timeouttimeUnit);
     }
 
     @Override
     public GlobalLock lockWithNumberOfTries(final String servicefinal String lockKeyfinal int retrythrows LockFailedException {
         final String lockName = getLockName(servicelockKey);
 
         int tries_left = retry;
         while (tries_left-- > 0) {
             final GlobalLock lock = lock(lockName);
             if (lock != null) {
                 return lock;
             }
         }
 
         .warn(String.format("Failed to acquire lock %s for service %s after %d retries"lockKeyserviceretry));
         throw new LockFailedException();
     }
 
     @Override
     public boolean isFree(final String servicefinal String lockKey) {
         final String lockName = getLockName(servicelockKey);
 
         Connection connection = null;
         try {
             connection = .getConnection();
             return .isLockFree(connectionlockName);
         } catch (SQLException e) {
             .warn("Unable to check if lock is free"e);
             return false;
         } finally {
             if (connection != null) {
                 try {
                     connection.close();
                 } catch (SQLException e) {
                     .warn("Unable to close connection"e);
                 }
             }
         }
     }
 
     private GlobalLock lock(final String lockNamethrows LockFailedException {
         Connection connection = null;
         boolean obtained = false;
         try {
             connection = .getConnection();
             obtained = .lock(connectionlockName);
             if (obtained) {
                 return new MysqlGlobalLock(connectionlockName);
             }
         } catch (SQLException e) {
             .warn("Unable to obtain lock for " + lockNamee);
        } finally {
            if (!obtained) {
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        .warn("Unable to close connection"e);
                    }
                }
            }
        }
        throw new LockFailedException();
    }
    private String getLockName(final String servicefinal String lockKey) {
        return service + "-" + lockKey;
    }
New to GrepCode? Check out our FAQ X