src/org/objectweb/cjdbc/controller/loadbalancer/policies/createtable/CreateTableRoundRobin.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.loadbalancer.policies.createtable; 00026 00027 import java.util.ArrayList; 00028 00029 import org.objectweb.cjdbc.controller.backend.DatabaseBackend; 00030 00038 public class CreateTableRoundRobin extends CreateTableRule 00039 { 00040 private int index = 0; 00041 00045 public CreateTableRoundRobin() 00046 { 00047 super(CreateTablePolicy.ROUND_ROBIN); 00048 } 00049 00055 public CreateTableRoundRobin(ArrayList backendList) 00056 { 00057 super(CreateTablePolicy.ROUND_ROBIN, backendList); 00058 } 00059 00063 public ArrayList getBackends(ArrayList backends) throws CreateTableException 00064 { 00065 int size = backends.size(); 00066 00067 if (nbOfNodes == 0) 00068 return null; 00069 else if (nbOfNodes == size) 00070 return backends; 00071 00072 ArrayList clonedList; 00073 00074 if (backendList.size() > 0) 00075 { // Keep only the backends that are affected by this rule 00076 clonedList = new ArrayList(nbOfNodes); 00077 for (int i = 0; i < size; i++) 00078 { 00079 DatabaseBackend db = (DatabaseBackend) backends.get(i); 00080 if (db.isWriteEnabled() && backendList.contains(db.getName())) 00081 clonedList.add(db); 00082 } 00083 } 00084 else 00085 { // Take all enabled backends 00086 clonedList = new ArrayList(size); 00087 for (int i = 0; i < size; i++) 00088 { 00089 DatabaseBackend db = (DatabaseBackend) backends.get(i); 00090 if (db.isWriteEnabled()) 00091 clonedList.add(db); 00092 } 00093 } 00094 00095 int clonedSize = clonedList.size(); 00096 00097 if (nbOfNodes == clonedSize) 00098 return backends; 00099 else if (nbOfNodes > clonedSize) 00100 throw new CreateTableException( 00101 "Asking for more backends (" 00102 + nbOfNodes 00103 + ") than available (" 00104 + clonedSize 00105 + ")"); 00106 00107 ArrayList result = new ArrayList(nbOfNodes); 00108 00109 synchronized (this) 00110 { // index must be modified in mutual exclusion 00111 for (int i = 0; i < nbOfNodes; i++) 00112 { 00113 index = (index + 1) % clonedSize; 00114 result.add(clonedList.remove(index)); 00115 } 00116 } 00117 00118 return result; 00119 } 00120 00124 public String getInformation() 00125 { 00126 String s; 00127 if (tableName == null) 00128 s = "Default rule create table on "; 00129 else 00130 s = "Rule for table " + tableName + " create table on "; 00131 00132 return s + nbOfNodes + " node(s) in round-robin from " + backendList; 00133 } 00134 }

CJDBCversion1.0.4に対してTue Oct 12 15:16:02 2004に生成されました。 doxygen 1.3.8