2
* HA-JDBC: High-Availability JDBC
3
* Copyright (c) 2004-2007 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.balancer;
23
import java.util.Collections;
24
import java.util.Comparator;
25
import java.util.NoSuchElementException;
27
import net.sf.hajdbc.Database;
30
* Trivial balancer implementation whose {@link #next} implementation always returns the database with the highest weight.
32
* @author Paul Ferraro
33
* @param <D> either java.sql.Driver or javax.sql.DataSource
35
public class SimpleBalancer<D> extends AbstractBalancer<D>
37
private volatile Database<D> nextDatabase = null;
39
private Comparator<Database<D>> comparator = new Comparator<Database<D>>()
42
public int compare(Database<D> database1, Database<D> database2)
44
return database1.getWeight() - database2.getWeight();
49
* @see net.sf.hajdbc.Balancer#next()
52
public Database<D> next()
54
Database<D> next = this.nextDatabase;
58
throw new NoSuchElementException();
65
* @see net.sf.hajdbc.balancer.AbstractBalancer#added(net.sf.hajdbc.Database)
68
protected void added(Database<D> database)
74
* @see net.sf.hajdbc.balancer.AbstractBalancer#removed(net.sf.hajdbc.Database)
77
protected void removed(Database<D> database)
84
this.nextDatabase = this.databaseSet.isEmpty() ? null : Collections.max(this.databaseSet, this.comparator);
88
* @see net.sf.hajdbc.balancer.AbstractBalancer#cleared()
91
protected void cleared()
93
this.nextDatabase = null;