001/* 002 * HA-JDBC: High-Availability JDBC 003 * Copyright (c) 2004-2007 Paul Ferraro 004 * 005 * This library is free software; you can redistribute it and/or modify it 006 * under the terms of the GNU Lesser General Public License as published by the 007 * Free Software Foundation; either version 2.1 of the License, or (at your 008 * option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, but WITHOUT 011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 013 * for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with this library; if not, write to the Free Software Foundation, 017 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 018 * 019 * Contact: ferraro@users.sourceforge.net 020 */ 021package net.sf.hajdbc.distributable; 022 023import java.util.Map; 024import java.util.concurrent.TimeUnit; 025import java.util.concurrent.locks.Lock; 026 027import org.jgroups.Address; 028 029import net.sf.hajdbc.LockManager; 030 031/** 032 * @author Paul Ferraro 033 * @since 2.0 034 */ 035public class AcquireLockDecree extends AbstractLockDecree 036{ 037 private static final long serialVersionUID = 9016576896686385467L; 038 039 public AcquireLockDecree() 040 { 041 super(); 042 } 043 044 public AcquireLockDecree(String id, Address address) 045 { 046 super(id, address); 047 } 048 049 /** 050 * @see net.sf.hajdbc.distributable.LockDecree#vote(net.sf.hajdbc.LockManager, java.util.Map) 051 */ 052 @Override 053 public boolean vote(LockManager lockManager, Map<String, Lock> lockMap) 054 { 055 Lock lock = lockManager.writeLock(this.id); 056 057 try 058 { 059 boolean locked = lock.tryLock(0, TimeUnit.SECONDS); 060 061 if (locked) 062 { 063 synchronized (lockMap) 064 { 065 lockMap.put(this.id, lock); 066 } 067 } 068 069 return locked; 070 } 071 catch (InterruptedException e) 072 { 073 return false; 074 } 075 } 076}