1 21 package net.sf.hajdbc.balancer; 22 23 import java.util.ArrayList ; 24 import java.util.Collection ; 25 import java.util.HashSet ; 26 import java.util.List ; 27 import java.util.Random ; 28 import java.util.Set ; 29 30 import net.sf.hajdbc.Database; 31 32 36 public class RandomBalancer extends AbstractBalancer 37 { 38 private Random random = new Random (); 39 private Set <Database> databaseSet = new HashSet <Database>(); 40 private List <Database> databaseList = new ArrayList <Database>(); 41 42 45 @Override 46 protected Collection <Database> getDatabases() 47 { 48 return this.databaseSet; 49 } 50 51 54 @Override 55 public synchronized boolean add(Database database) 56 { 57 boolean added = super.add(database); 58 59 if (added) 60 { 61 int weight = database.getWeight(); 62 63 for (int i = 0; i < weight; ++i) 64 { 65 this.databaseList.add(database); 66 } 67 } 68 69 return added; 70 } 71 72 75 @Override 76 public synchronized boolean remove(Database database) 77 { 78 boolean removed = super.remove(database); 79 80 int weight = database.getWeight(); 81 82 if (removed && (weight > 0)) 83 { 84 int index = this.databaseList.indexOf(database); 85 86 this.databaseList.subList(index, index + weight).clear(); 87 } 88 89 return removed; 90 } 91 92 95 public synchronized Database next() 96 { 97 if (this.databaseList.isEmpty()) 98 { 99 return this.first(); 100 } 101 102 int index = this.random.nextInt(this.databaseList.size()); 103 104 return this.databaseList.get(index); 105 } 106 } 107 | Popular Tags |