1 /** 2 * Copyright (c) 2012, University of Konstanz, Distributed Systems Group All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the 5 * following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of 6 * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, 7 * this list of conditions and the following disclaimer in the documentation and/or other materials provided with the 8 * distribution. * Neither the name of the University of Konstanz nor the names of its contributors may be used to 9 * endorse or promote products derived from this software without specific prior written permission. 10 * 11 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 12 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 13 * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 14 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 15 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 16 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 17 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 18 */ 19 package org.jscsi.initiator.taskbalancer; 20 21 22 import java.util.concurrent.LinkedBlockingQueue; 23 24 import org.jscsi.exception.NoSuchConnectionException; 25 import org.jscsi.initiator.connection.Connection; 26 import org.jscsi.initiator.connection.Session; 27 28 29 /** 30 * <h1>AbstractLoadBalancer</h1> 31 * <p/> 32 * Each load balancer must extend this abstract class to support some basic features. 33 * 34 * @author Volker Wildi 35 */ 36 public abstract class AbstractTaskBalancer { 37 38 // -------------------------------------------------------------------------- 39 // -------------------------------------------------------------------------- 40 41 /** This list contains all free connections of a iSCSI Session. */ 42 protected LinkedBlockingQueue<Connection> freeConnections; 43 44 /** The Session. */ 45 protected Session session; 46 47 // -------------------------------------------------------------------------- 48 // -------------------------------------------------------------------------- 49 50 /** 51 * Constructor to create a new <code>AbstractLoadBalancer</code> instance, which distribute the work to these 52 * connections. 53 * 54 * @param initConnections The list with all opened connections. 55 */ 56 protected AbstractTaskBalancer (final LinkedBlockingQueue<Connection> initConnections) { 57 58 freeConnections = initConnections; 59 } 60 61 // -------------------------------------------------------------------------- 62 // -------------------------------------------------------------------------- 63 64 public abstract Connection getConnection () throws NoSuchConnectionException; 65 66 public void releaseConnection (final Connection connection) throws NoSuchConnectionException { 67 68 if (connection != null) { 69 try { 70 freeConnections.add(connection); 71 } catch (Exception e) { 72 e.printStackTrace(); 73 } 74 } 75 } 76 77 // -------------------------------------------------------------------------- 78 // -------------------------------------------------------------------------- 79 // -------------------------------------------------------------------------- 80 // -------------------------------------------------------------------------- 81 82 }