2
* HA-JDBC: High-Availability JDBC
3
* Copyright (c) 2004-2008 Paul Ferraro
5
* This library is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU Lesser General Public License as published by the
7
* Free Software Foundation; either version 2.1 of the License, or (at your
8
* option) any later version.
10
* This library is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
15
* You should have received a copy of the GNU Lesser General Public License
16
* along with this library; if not, write to the Free Software Foundation,
17
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
* Contact: ferraro@users.sourceforge.net
21
package net.sf.hajdbc.sql;
23
import java.util.List;
24
import java.util.concurrent.locks.Lock;
27
* An invocation strategy decorator that acquires a list of locks before invocation, and releases them afterward.
28
* @author Paul Ferraro
29
* @param <D> Type of the root object (e.g. driver, datasource)
30
* @param <T> Target object type of the invocation
31
* @param <R> Return type of this invocation
33
public class LockingInvocationStrategy<D, T, R> implements InvocationStrategy<D, T, R>
35
private InvocationStrategy<D, T, R> strategy;
36
private List<Lock> lockList;
42
public LockingInvocationStrategy(InvocationStrategy<D, T, R> strategy, List<Lock> lockList)
44
this.strategy = strategy;
45
this.lockList = lockList;
49
* @see net.sf.hajdbc.sql.InvocationStrategy#invoke(net.sf.hajdbc.sql.SQLProxy, net.sf.hajdbc.sql.Invoker)
52
public R invoke(SQLProxy<D, T> proxy, Invoker<D, T, R> invoker) throws Exception
54
for (Lock lock: this.lockList)
61
return this.strategy.invoke(proxy, invoker);
65
for (Lock lock: this.lockList)