src/org/objectweb/cjdbc/controller/virtualdatabase/protocol/VirtualDatabaseConfiguration.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.virtualdatabase.protocol; 00026 00027 import java.util.ArrayList; 00028 import java.util.HashMap; 00029 import java.util.List; 00030 00031 import org.objectweb.cjdbc.common.i18n.Translate; 00032 import org.objectweb.cjdbc.common.jmx.JmxConstants; 00033 import org.objectweb.cjdbc.common.shared.BackendInfo; 00034 import org.objectweb.cjdbc.common.sql.schema.DatabaseSchema; 00035 import org.objectweb.cjdbc.controller.jmx.RmiConnector; 00036 import org.objectweb.cjdbc.controller.requestmanager.RAIDbLevels; 00037 import org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase; 00038 00046 public class VirtualDatabaseConfiguration extends CJDBCGroupMessage 00047 { 00048 private String controllerName; 00049 private String controllerJmxName; 00050 private String vdbName; 00051 private String groupName = null; 00052 private ArrayList vLogins; 00053 private int schedulerRAIDbLevel; 00054 private int loadBalancerRAIDbLevel; 00055 private DatabaseSchema dbs; 00056 private ArrayList backends; 00057 private HashMap backendPolicies; 00058 00059 // Jmx Information 00060 private String rmiHostname; 00061 private String rmiPort; 00062 00066 public String getControllerName() 00067 { 00068 return controllerName; 00069 } 00070 00076 public String getControllerJmxName() 00077 { 00078 return controllerJmxName; 00079 } 00086 public VirtualDatabaseConfiguration(DistributedVirtualDatabase dvdb) 00087 { 00088 this.controllerName = dvdb.getControllerName(); 00089 this.controllerJmxName = dvdb.viewOwningController(); 00090 this.vdbName = dvdb.getName(); 00091 this.groupName = dvdb.getGroupName(); 00092 this.vLogins = dvdb.getAuthenticationManager().getVirtualLogins(); 00093 this.schedulerRAIDbLevel = dvdb.getRequestManager().getScheduler() 00094 .getRAIDbLevel(); 00095 this.loadBalancerRAIDbLevel = dvdb.getRequestManager().getLoadBalancer() 00096 .getRAIDbLevel(); 00097 this.dbs = dvdb.getRequestManager().getDatabaseSchema(); 00098 this.backends = dvdb.getBackendsInfo(dvdb.getBackends()); 00099 this.backendPolicies = dvdb.getBackendRecoveryPolicy(); 00100 00101 List connectors = RmiConnector.getRmiConnectors(); 00102 if (connectors.size() > 0) 00103 { 00104 RmiConnector rmi = (RmiConnector) connectors.get(0); 00105 rmiHostname = rmi.getHostName(); 00106 rmiPort = "" + rmi.getPort(); 00107 } 00108 else 00109 { 00110 rmiHostname = controllerName.substring(0, controllerName.indexOf(":")); 00111 rmiPort = "" + JmxConstants.DEFAULT_JMX_RMI_PORT; 00112 } 00113 } 00114 00118 public String getRmiHostname() 00119 { 00120 return rmiHostname; 00121 } 00122 00126 public String getRmiPort() 00127 { 00128 return rmiPort; 00129 } 00130 00138 public boolean isCompatible(DistributedVirtualDatabase localDvdb) 00139 { 00140 try 00141 { 00142 if (controllerName.equals(localDvdb.getControllerName())) 00143 { 00144 localDvdb.logger 00145 .warn(Translate 00146 .get("virtualdatabase.distributed.configuration.checking.duplicate.controller.name")); 00147 return false; 00148 } 00149 00150 // Sanity checks for virtual database name and group name 00151 if (!vdbName.equals(localDvdb.getName())) 00152 { 00153 localDvdb.logger 00154 .warn(Translate 00155 .get("virtualdatabase.distributed.configuration.checking.mismatch.name")); 00156 return false; 00157 } 00158 if (!groupName.equals(localDvdb.getGroupName())) 00159 { 00160 localDvdb.logger 00161 .warn(Translate 00162 .get("virtualdatabase.distributed.configuration.checking.mismatch.groupname")); 00163 return false; 00164 } 00165 00166 // Authentication managers must contains the same set of elements but 00167 // possibly in different orders (equals require the element to be in the 00168 // same order). 00169 if (!vLogins.containsAll(localDvdb.getAuthenticationManager() 00170 .getVirtualLogins()) 00171 || !localDvdb.getAuthenticationManager().getVirtualLogins() 00172 .containsAll(vLogins)) 00173 { 00174 localDvdb.logger 00175 .warn(Translate 00176 .get("virtualdatabase.distributed.configuration.checking.mismatch.vlogins")); 00177 return false; 00178 } 00179 00180 // Scheduler and Load Balancer checking 00181 if (schedulerRAIDbLevel != localDvdb.getRequestManager().getScheduler() 00182 .getRAIDbLevel()) 00183 { 00184 localDvdb.logger 00185 .warn(Translate 00186 .get("virtualdatabase.distributed.configuration.checking.mismatch.scheduler")); 00187 return false; 00188 } 00189 00190 if (loadBalancerRAIDbLevel != localDvdb.getRequestManager() 00191 .getLoadBalancer().getRAIDbLevel()) 00192 { 00193 localDvdb.logger 00194 .warn(Translate 00195 .get("virtualdatabase.distributed.configuration.checking.mismatch.loadbalancer")); 00196 return false; 00197 } 00198 00199 // Checking backends 00200 int size = backends.size(); 00201 for (int i = 0; i < size; i++) 00202 { 00203 BackendInfo b = (BackendInfo) backends.get(i); 00204 if (!localDvdb.isCompatibleBackend(b)) 00205 { 00206 localDvdb.logger 00207 .warn(Translate 00208 .get( 00209 "virtualdatabase.distributed.configuration.checking.mismatch.backend.shared", 00210 b.getName())); 00211 return false; 00212 } 00213 } 00214 00215 // Database schema checking (if any) 00216 if (dbs == null) 00217 { 00218 localDvdb.logger 00219 .warn(Translate 00220 .get("virtualdatabase.distributed.configuration.checking.noschema")); 00221 } 00222 else 00223 { 00224 // Check database schemas compatibility 00225 switch (loadBalancerRAIDbLevel) 00226 { 00227 case RAIDbLevels.RAIDb0 : 00228 // There must be no overlap between schemas 00229 if (dbs.equals(localDvdb.getRequestManager().getDatabaseSchema())) 00230 { 00231 localDvdb.logger 00232 .warn(Translate 00233 .get("virtualdatabase.distributed.configuration.checking.mismatch.databaseschema")); 00234 return false; 00235 } 00236 break; 00237 case RAIDbLevels.SingleDB : 00238 case RAIDbLevels.RAIDb1 : 00239 // Schemas must be identical 00240 if (!dbs.equals(localDvdb.getRequestManager().getDatabaseSchema())) 00241 { 00242 localDvdb.logger 00243 .warn(Translate 00244 .get("virtualdatabase.distributed.configuration.checking.mismatch.databaseschema")); 00245 return false; 00246 } 00247 break; 00248 case RAIDbLevels.RAIDb2 : 00249 // Common parts of the schema must be identical 00250 if (!dbs.isCompatibleWith(localDvdb.getRequestManager() 00251 .getDatabaseSchema())) 00252 { 00253 localDvdb.logger 00254 .warn(Translate 00255 .get("virtualdatabase.distributed.configuration.checking.mismatch.databaseschema")); 00256 return false; 00257 } 00258 break; 00259 default : 00260 localDvdb.logger.error("Unsupported RAIDb level: " 00261 + loadBalancerRAIDbLevel); 00262 return false; 00263 } 00264 } 00265 00266 // Ok, all tests succeeded, configuration is compatible 00267 return true; 00268 } 00269 catch (Exception e) 00270 { 00271 localDvdb.logger.error(Translate 00272 .get("virtualdatabase.distributed.configuration.checking.error"), e); 00273 return false; 00274 } 00275 } 00276 00282 public HashMap getBackendPolicies() 00283 { 00284 return backendPolicies; 00285 } 00286 00287 }

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