Public Member Functions | |
DatabaseBackend (String name, String driverPath, String driverClassName, String url, String vdbName, boolean writeCanBeEnabled, String connectionTestStatement) throws NotCompliantMBeanException | |
DatabaseBackend (BackendInfo info) throws NotCompliantMBeanException | |
DatabaseBackend (String name, String driverPath, String driverClassName, String url, String vdbName, String connectionTestStatement, String dynamicSchemaLevel) throws NotCompliantMBeanException | |
void | setSqlShortFormLength (int sqlShortFormLength) |
int | getSQLShortFormLength () |
boolean | equals (Object other) |
boolean | hasTables (ArrayList tables) |
boolean | hasTable (String table) |
ArrayList | getTables () |
boolean | hasStoredProcedure (String procedureName) |
synchronized void | initializeConnections () throws SQLException |
synchronized void | finalizeConnections () throws SQLException |
boolean | isValidConnection (Connection connection) |
void | addConnectionManager (String vLogin, AbstractConnectionManager connectionManager) |
synchronized Connection | getConnectionForTransactionAndLazyBeginIfNeeded (Long tid, AbstractConnectionManager cm) throws UnreachableBackendException, NoTransactionStartWhenDisablingException, SQLException |
void | startTransaction (Long tid) |
void | stopTransaction (Long tid) |
void | waitForAllTransactionsToComplete () |
boolean | isStartedTransaction (Long tid) |
synchronized boolean | isInitialized () throws SQLException |
synchronized boolean | isJDBCConnected () |
synchronized boolean | isReadEnabled () |
synchronized boolean | isWriteEnabled () |
boolean | isRecovering () |
boolean | isDisabling () |
boolean | isDisabled () |
boolean | isKilled () |
String | getState () |
int | getStateValue () |
synchronized void | enableRead () |
synchronized void | disableRead () |
synchronized void | disableWrite () |
synchronized void | enableWrite () |
void | setDisabling () |
synchronized void | disable () |
AbstractConnectionManager | getConnectionManager (String vLogin) |
HashMap | getConnectionManagers () |
String | getConnectionTestStatement () |
String | getDriverPath () |
String | getAssociatedString () |
String | getDriverClassName () |
String | getName () |
String | getVirtualDatabaseName () |
Vector | getPendingRequests () |
ArrayList | getPendingRequestsDescription (int count, boolean fromFirst, boolean clone) |
void | addPendingReadRequest (Object request) |
void | addPendingWriteRequest (Object request) |
boolean | removePendingRequest (Object request) |
DatabaseSchema | getDatabaseSchema () |
void | setDatabaseSchema (DatabaseSchema databaseSchema, boolean isStatic) |
void | refreshSchema () |
MetadataContainer | getDatabaseStaticMetadata () |
boolean | checkDatabaseSchema () |
DriverCompliance | getDriverCompliance () |
void | checkDriverCompliance () throws SQLException |
String | getURL () |
void | addRewritingRule (AbstractRewritingRule rule) |
String | rewriteQuery (String sqlQuery) |
String | getXml () |
String | getSchemaXml (boolean expandSchema) |
ArrayList | getActiveTransactions () |
boolean | isSchemaStatic () |
String[] | getBackendData () |
long | getTotalActiveConnections () |
int | getDynamicPrecision () |
void | setDynamicPrecision (int dynamicPrecision, boolean gatherSystemTables, String schemaName) |
int | getTotalTransactions () |
int | getTotalReadRequest () |
int | getTotalWriteRequest () |
int | getTotalRequest () |
void | setLastKnownCheckpoint (String checkpoint) |
String | getLastKnownCheckpoint () |
String | getDatabaseProductName () |
ArrayList | getRewritingRules () |
void | setRewritingRules (ArrayList rewritingRules) |
DatabaseBackend | copy (String newName, Map parameters) throws Exception |
boolean | isBackuping () |
synchronized void | setState (int state) |
void | notifyStateChange () |
void | notifyJmx (String type) |
void | notifyJmxError (String type, Exception e) |
boolean | isWriteCanBeEnabled () |
void | setStateListener (BackendStateListener stateListener) |
String | toString () |
Protected Attributes | |
transient Trace | logger |
DatabaseBackend
represents a real database backend that will have to be bound to a virtual C-JDBC database. All connections opened will use the same url but possibly different login/password.
Definition at line 80 of file DatabaseBackend.java.
|
Creates a new
Definition at line 182 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackend.logger. 00186 { 00187 super(DatabaseBackendMBean.class); 00188 if (name == null) 00189 throw new IllegalArgumentException(Translate 00190 .get("backend.null.backend.name")); 00191 00192 if (driverClassName == null) 00193 throw new IllegalArgumentException(Translate.get("backend.null.driver")); 00194 00195 if (url == null) 00196 throw new IllegalArgumentException(Translate.get("backend.null.url")); 00197 00198 if (vdbName == null) 00199 throw new IllegalArgumentException(Translate 00200 .get("backend.null.virtualdatabase.name")); 00201 00202 if (connectionTestStatement == null) 00203 throw new IllegalArgumentException(Translate 00204 .get("backend.null.connection.test")); 00205 00206 this.name = name; 00207 this.writeCanBeEnabled = writeCanBeEnabled; 00208 this.driverPath = driverPath; 00209 this.driverClassName = driverClassName; 00210 this.url = url; 00211 this.virtualDatabaseName = vdbName; 00212 this.connectionTestStatement = connectionTestStatement; 00213 this.connectionManagers = new HashMap(); 00214 logger = Trace 00215 .getLogger("org.objectweb.cjdbc.controller.backend.DatabaseBackend." 00216 + name); 00217 this.driverCompliance = new DriverCompliance(logger); 00218 totalRequest = 0; 00219 dynamicPrecision = DatabaseBackendSchemaConstants.DynamicPrecisionAll; 00220 }
|
|
Creates a new
Definition at line 229 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackend.logger. 00230 { 00231 this(info.getName(), info.getDriverPath(), info.getDriverClassName(), info 00232 .getUrl(), info.getVirtualDatabaseName(), true, info 00233 .getConnectionTestStatement()); 00234 try 00235 { 00236 String xml = info.getXml(); 00237 StringReader sreader = new StringReader(xml); 00238 SAXReader reader = new SAXReader(); 00239 Document document = reader.read(sreader); 00240 Element root = document.getRootElement(); 00241 Iterator iter1 = root.elementIterator(); 00242 while (iter1.hasNext()) 00243 { 00244 Element elem = (Element) iter1.next(); 00245 if (elem.getName().equals(DatabasesXmlTags.ELT_ConnectionManager)) 00246 { 00247 String vuser = elem.valueOf("@" + DatabasesXmlTags.ATT_vLogin); 00248 String rlogin = elem.valueOf("@" + DatabasesXmlTags.ATT_rLogin); 00249 String rpassword = elem.valueOf("@" + DatabasesXmlTags.ATT_rPassword); 00250 Iterator iter2 = elem.elementIterator(); 00251 while (iter2.hasNext()) 00252 { 00253 Element connectionManager = (Element) iter2.next(); 00254 String cname = connectionManager.getName(); 00255 if (cname 00256 .equals(DatabasesXmlTags.ELT_VariablePoolConnectionManager)) 00257 { 00258 int minPoolSize = Integer.parseInt(connectionManager.valueOf("@" 00259 + DatabasesXmlTags.ATT_minPoolSize)); 00260 int maxPoolSize = Integer.parseInt(connectionManager.valueOf("@" 00261 + DatabasesXmlTags.ATT_maxPoolSize)); 00262 int idleTimeout = Integer.parseInt(connectionManager.valueOf("@" 00263 + DatabasesXmlTags.ATT_idleTimeout)); 00264 int waitTimeout = Integer.parseInt(connectionManager.valueOf("@" 00265 + DatabasesXmlTags.ATT_waitTimeout)); 00266 this.addConnectionManager(vuser, 00267 new VariablePoolConnectionManager(url, name, rlogin, 00268 rpassword, driverPath, driverClassName, minPoolSize, 00269 maxPoolSize, idleTimeout, waitTimeout)); 00270 } 00271 else if (cname.equals(DatabasesXmlTags.ELT_SimpleConnectionManager)) 00272 { 00273 this.addConnectionManager(vuser, new SimpleConnectionManager(url, 00274 name, rlogin, rpassword, driverPath, driverClassName)); 00275 } 00276 else if (cname 00277 .equals(DatabasesXmlTags.ELT_RandomWaitPoolConnectionManager)) 00278 { 00279 int poolSize = Integer.parseInt(connectionManager.valueOf("@" 00280 + DatabasesXmlTags.ATT_poolSize)); 00281 int timeout = Integer.parseInt(connectionManager.valueOf("@" 00282 + DatabasesXmlTags.ATT_timeout)); 00283 this 00284 .addConnectionManager(vuser, 00285 new RandomWaitPoolConnectionManager(url, name, rlogin, 00286 rpassword, driverPath, driverClassName, poolSize, 00287 timeout)); 00288 } 00289 else if (cname 00290 .equals(DatabasesXmlTags.ELT_FailFastPoolConnectionManager)) 00291 { 00292 int poolSize = Integer.parseInt(connectionManager.valueOf("@" 00293 + DatabasesXmlTags.ATT_poolSize)); 00294 this.addConnectionManager(vuser, 00295 new FailFastPoolConnectionManager(url, name, rlogin, 00296 rpassword, driverPath, driverClassName, poolSize)); 00297 } 00298 } 00299 } 00300 } 00301 00302 } 00303 catch (Exception e) 00304 { 00305 logger 00306 .error(Translate.get("backend.add.connection.manager.failed", e), e); 00307 } 00308 }
|
|
Additionnal constructor for setting a different dynamic schema level. Default was to gather all information Creates a new
Definition at line 327 of file DatabaseBackend.java. 00331 { 00332 this(name, driverPath, driverClassName, url, vdbName, true, 00333 connectionTestStatement); 00334 this.dynamicPrecision = DatabaseBackendSchemaConstants 00335 .getDynamicSchemaLevel(dynamicSchemaLevel); 00336 }
|
|
Adds a
Definition at line 546 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy(). 00548 { 00549 if (connectionManager == null) 00550 throw new IllegalArgumentException(Translate.get( 00551 "backend.null.connection.manager", new String[]{name, url})); 00552 if (logger.isInfoEnabled()) 00553 logger.info(Translate.get("backend.add.connection.manager.for.user", 00554 vLogin)); 00555 connectionManager.setVLogin(vLogin); 00556 connectionManagers.put(vLogin, connectionManager); 00557 }
|
|
Adds a pending request (or task) to this backend. Note that the underlying vector is synchronized.
Definition at line 1036 of file DatabaseBackend.java. 01037 { 01038 synchronized (this) 01039 { 01040 totalRequest++; 01041 totalReadRequest++; 01042 } 01043 pendingRequests.add(request); 01044 }
|
|
Adds a pending request (or task) to this backend. Note that the underlying vector is synchronized.
Definition at line 1052 of file DatabaseBackend.java. 01053 { 01054 synchronized (this) 01055 { 01056 totalRequest++; 01057 totalWriteRequest++; 01058 } 01059 pendingRequests.add(request); 01060 }
|
|
Add a
Definition at line 1269 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.rewriting.AbstractRewritingRule.getQueryPattern(), and org.objectweb.cjdbc.controller.backend.rewriting.AbstractRewritingRule.getRewrite(). 01270 { 01271 if (rewritingRules == null) 01272 rewritingRules = new ArrayList(); 01273 if (logger.isDebugEnabled()) 01274 logger.debug(Translate.get("backend.rewriting.rule.add", new String[]{ 01275 rule.getQueryPattern(), rule.getRewrite()})); 01276 rewritingRules.add(rule); 01277 }
|
|
Definition at line 1149 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackendMetaData.getDatabaseSchema(), and org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getLogin(). Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(). 01150 { 01151 if (logger.isDebugEnabled()) 01152 logger.debug(Translate.get("backend.dynamic.schema", 01153 DatabaseBackendSchemaConstants 01154 .getDynamicSchemaLevel(dynamicPrecision))); 01155 boolean checked = true; 01156 AbstractConnectionManager connectionMananger; 01157 Iterator iter = connectionManagers.values().iterator(); 01158 while (iter.hasNext()) 01159 { 01160 connectionMananger = (AbstractConnectionManager) iter.next(); 01161 01162 // Gather the database schema from this connection manager 01163 DatabaseBackendMetaData meta = new DatabaseBackendMetaData( 01164 connectionMananger, logger, dynamicPrecision, gatherSystemTables, 01165 schemaName); 01166 01167 DatabaseSchema metaSchema; 01168 try 01169 { 01170 if (logger.isInfoEnabled()) 01171 logger.info(Translate.get("backend.gathering.database.schema")); 01172 metaSchema = meta.getDatabaseSchema(); 01173 } 01174 catch (SQLException e) 01175 { 01176 if (logger.isWarnEnabled()) 01177 logger.warn(Translate.get("backend.gather.schema.failed", e)); 01178 return false; 01179 } 01180 if (schema == null) 01181 { 01182 if (logger.isDebugEnabled()) 01183 logger.debug(Translate.get("backend.use.gathered.schema.as.new")); 01184 schema = metaSchema; 01185 } 01186 else 01187 { 01188 if (dynamicPrecision == DatabaseBackendSchemaConstants.DynamicPrecisionStatic) 01189 { 01190 if (logger.isInfoEnabled()) 01191 logger.info(Translate.get("backend.schema.static.no.check", name)); 01192 } 01193 else 01194 { 01195 if (logger.isInfoEnabled()) 01196 logger.info(Translate.get("backend.check.schema.compatibility")); 01197 if (schema.isCompatibleSubset(metaSchema)) 01198 logger.info(Translate.get("backend.schema.compatible.for.login", 01199 connectionMananger.getLogin())); 01200 else 01201 { 01202 checked = false; 01203 logger.warn(Translate.get( 01204 "backend.schema.not.compatible.for.login", connectionMananger 01205 .getLogin())); 01206 } 01207 } 01208 } 01209 } 01210 return checked; 01211 }
|
|
Check if the driver used by this backend is compliant with C-JDBC needs.
Definition at line 1226 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(). 01227 { 01228 if (connectionManagers.isEmpty()) 01229 throw new SQLException(Translate.get("backend.null.connection.manager", 01230 new String[]{name, url})); 01231 01232 AbstractConnectionManager connectionManager; 01233 Iterator iter = connectionManagers.values().iterator(); 01234 connectionManager = (AbstractConnectionManager) iter.next(); 01235 01236 try 01237 { 01238 if (!driverCompliance.complianceTest(url, connectionManager.getLogin(), 01239 connectionManager.getPassword(), connectionManager.getDriverPath(), 01240 connectionManager.getDriverClassName(), connectionTestStatement)) 01241 throw new SQLException(Translate.get("backend.driver.not.compliant", 01242 driverClassName)); 01243 } 01244 catch (ConnectException e) 01245 { 01246 throw new SQLException(Translate.get("backend.cannot.connect.to", e)); 01247 } 01248 }
|
|
Returns a deeply copied clone of this backend Will use the same rewriting rules and will get new instance of connection managers with the same configuration
Definition at line 1593 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackend.addConnectionManager(), org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.copy(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionManagers(), org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getDriverClassName(), org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getDriverPath(), and org.objectweb.cjdbc.controller.backend.DatabaseBackend.setRewritingRules(). Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.replicateBackend(). 01594 { 01595 // Get the parameters from the backend if they are not specified, or take 01596 // them from the map of parameters otherwise. 01597 String driverPath = parameters.containsKey(DatabasesXmlTags.ATT_driverPath) 01598 ? (String) parameters.get(DatabasesXmlTags.ATT_driverPath) 01599 : this.getDriverPath(); 01600 01601 String driverClassName = parameters 01602 .containsKey(DatabasesXmlTags.ATT_driver) ? (String) parameters 01603 .get(DatabasesXmlTags.ATT_driver) : this.getDriverClassName(); 01604 01605 String url = parameters.containsKey(DatabasesXmlTags.ATT_url) 01606 ? (String) parameters.get(DatabasesXmlTags.ATT_url) 01607 : this.getURL(); 01608 01609 String connectionTestStatement = parameters 01610 .containsKey(DatabasesXmlTags.ATT_connectionTestStatement) 01611 ? (String) parameters.get(DatabasesXmlTags.ATT_connectionTestStatement) 01612 : this.getConnectionTestStatement(); 01613 01614 // Create the new backend object 01615 DatabaseBackend newBackend = new DatabaseBackend(newName, driverPath, 01616 driverClassName, url, virtualDatabaseName, writeCanBeEnabled, 01617 connectionTestStatement); 01618 01619 // Set the rewriting rules and the connection managers as the backend we 01620 // are copying 01621 newBackend.setRewritingRules(this.getRewritingRules()); 01622 01623 // Set Connection managers 01624 HashMap connectionManagers = this.getConnectionManagers(); 01625 Iterator iter = connectionManagers.keySet().iterator(); 01626 01627 String vlogin = null; 01628 AbstractConnectionManager connectionManager; 01629 while (iter.hasNext()) 01630 { 01631 vlogin = (String) iter.next(); 01632 connectionManager = (AbstractConnectionManager) connectionManagers 01633 .get(vlogin); 01634 newBackend.addConnectionManager(vlogin, connectionManager.copy(url, 01635 newName)); 01636 } 01637 01638 return newBackend; 01639 01640 }
|
|
Sets the database backend state to disable. This state is just an indication and it has no semantic effect. It is up to the request manager (especially the load balancer) to ensure that no more requests are sent to this backend. Definition at line 904 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer(), and org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.disableBackend(). 00905 { 00906 setState(BackendState.DISABLED); 00907 }
|
|
Definition at line 850 of file DatabaseBackend.java. 00851 { 00852 if (isWriteEnabled()) 00853 setState(BackendState.READ_DISABLED_WRITE_ENABLED); 00854 else 00855 setState(BackendState.DISABLED); 00856 }
|
|
Definition at line 861 of file DatabaseBackend.java. 00862 { 00863 if (isReadEnabled()) 00864 setState(BackendState.READ_ENABLED_WRITE_DISABLED); 00865 else 00866 setState(BackendState.DISABLED); 00867 }
|
|
Enables the database backend for reads. This method should only be called when the backend is synchronized with the others. Definition at line 839 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.enableBackend(). 00840 { 00841 if (isWriteEnabled()) 00842 setState(BackendState.READ_ENABLED_WRITE_ENABLED); 00843 else 00844 setState(BackendState.READ_ENABLED_WRITE_DISABLED); 00845 }
|
|
Enables the database backend for writes. This method should only be called when the backend is synchronized with the others. Definition at line 873 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.enableBackend(). 00874 { 00875 if (isReadEnabled()) 00876 setState(BackendState.READ_ENABLED_WRITE_ENABLED); 00877 else 00878 setState(BackendState.READ_DISABLED_WRITE_ENABLED); 00879 }
|
|
|
Releases all the connections to the database held by the connection managers.
Definition at line 484 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.disableBackend(). 00485 { 00486 if (connectionManagers.isEmpty()) 00487 throw new SQLException(Translate.get("backend.not.defined", new String[]{ 00488 name, url})); 00489 00490 AbstractConnectionManager connectionManager; 00491 Iterator iter = connectionManagers.values().iterator(); 00492 while (iter.hasNext()) 00493 { 00494 connectionManager = (AbstractConnectionManager) iter.next(); 00495 if (connectionManager.isInitialized()) 00496 connectionManager.finalizeConnections(); 00497 } 00498 }
|
|
Definition at line 1377 of file DatabaseBackend.java. 01378 {
01379 return activeTransactions;
01380 }
|
|
Definition at line 955 of file DatabaseBackend.java. 00956 { 00957 return "backend"; 00958 }
|
|
Get data about this backend. Format is:
data[0] = this.name; data[1] = this.driverClassName; data[2] = this.url; data[3] = String.valueOf(this.activeTransactions.size()); data[4] = String.valueOf(this.pendingRequests.size()); data[5] = String.valueOf(this.isReadEnabled()); data[6] = String.valueOf(this.isWriteEnabled()); data[7] = String.valueOf(this.isInitialized()); data[8] = String.valueOf(this.schemaIsStatic); data[9] = String.valueOf(this.connectionManagers.size()); data[10] = String.valueOf(getTotalActiveConnections()); data[11] = String.valueOf(totalRequest); data[12] = String.valueOf(totalTransactions); data[13] = lastKnownCheckpoint; *
Definition at line 1412 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.driverClassName. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.viewBackendInformation(). 01413 { 01414 String[] data = new String[14]; 01415 data[0] = this.name; 01416 data[1] = this.driverClassName; 01417 data[2] = this.url; 01418 data[3] = String.valueOf(this.activeTransactions.size()); 01419 data[4] = String.valueOf(this.pendingRequests.size()); 01420 data[5] = String.valueOf(this.isReadEnabled()); 01421 data[6] = String.valueOf(this.isWriteEnabled()); 01422 try 01423 { 01424 data[7] = String.valueOf(this.isInitialized()); 01425 } 01426 catch (Exception e) 01427 { 01428 data[7] = "unknown"; 01429 } 01430 data[8] = String.valueOf(this.schemaIsStatic); 01431 01432 data[9] = String.valueOf(this.connectionManagers.size()); 01433 data[10] = String.valueOf(getTotalActiveConnections()); 01434 data[11] = String.valueOf(totalRequest); 01435 data[12] = String.valueOf(totalTransactions); 01436 if (lastKnownCheckpoint == null || lastKnownCheckpoint.equalsIgnoreCase("")) 01437 data[13] = "<unknown>"; 01438 else 01439 data[13] = lastKnownCheckpoint; 01440 return data; 01441 }
|
|
Retrieve a connection for a given transaction or create a new connection and start a new transaction.
Definition at line 574 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.SelectRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.ReadStoredProcedureTask.executeTask(), and org.objectweb.cjdbc.controller.loadbalancer.tasks.BeginTask.executeTask(). 00578 { 00579 if (isStartedTransaction(tid)) 00580 { // Transaction has already been started, retrieve connection 00581 return cm.retrieveConnection(tid.longValue()); 00582 } 00583 else 00584 { 00585 if (isDisabling()) 00586 throw new NoTransactionStartWhenDisablingException(); 00587 00588 // begin transaction 00589 startTransaction(tid); 00590 00591 // Transaction has not been started yet, this is a lazy begin 00592 return AbstractLoadBalancer.getConnectionAndBeginTransaction(this, cm, 00593 tid.longValue()); 00594 } 00595 }
|
|
Returns the
Definition at line 918 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.commit(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.SelectRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.RollbackTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.ReadStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.CommitTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.BeginTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(), and org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.rollback(). 00919 {
00920 return (AbstractConnectionManager) connectionManagers.get(vLogin);
00921 }
|
|
Returns a
Definition at line 929 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy(). 00930 { 00931 return this.connectionManagers; 00932 }
|
|
Returns the SQL statement to use to check the connection validity.
Definition at line 939 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(). 00940 {
00941 return connectionTestStatement;
00942 }
|
|
Returns the databaseProductName value.
Definition at line 1548 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackendFromCheckpoint(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames(). 01549 {
01550 return driverCompliance.getDatabaseProductName();
01551 }
|
|
Returns the schema of this database.
Definition at line 1081 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames(). 01082 {
01083 return schema;
01084 }
|
|
Get the Database static metadata from this backend using a connection from the first available connection manager.
Definition at line 1122 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackendMetaData.retrieveDatabaseMetadata(). Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabaseStaticMetaData.gatherStaticMetadata(). 01123 { 01124 AbstractConnectionManager connectionMananger; 01125 Iterator iter = connectionManagers.values().iterator(); 01126 if (iter.hasNext()) 01127 { 01128 connectionMananger = (AbstractConnectionManager) iter.next(); 01129 // Gather the static metadata from the first connection manager 01130 DatabaseBackendMetaData meta = new DatabaseBackendMetaData( 01131 connectionMananger, logger, dynamicPrecision, gatherSystemTables, 01132 schemaName); 01133 try 01134 { 01135 return meta.retrieveDatabaseMetadata(); 01136 } 01137 catch (SQLException e) 01138 { 01139 return null; 01140 } 01141 } 01142 else 01143 return null; 01144 }
|
|
Returns the database native JDBC driver class name.
Definition at line 965 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), and org.objectweb.cjdbc.controller.backend.DatabaseBackend.equals(). 00966 {
00967 return driverClassName;
00968 }
|
|
Definition at line 1216 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), and org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(). 01217 {
01218 return driverCompliance;
01219 }
|
|
Definition at line 947 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(). 00948 {
00949 return driverPath;
00950 }
|
|
Definition at line 1462 of file DatabaseBackend.java. 01463 {
01464 return dynamicPrecision;
01465 }
|
|
Returns the lastKnownCheckpoint value.
Definition at line 1538 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.BackendStateListener.changeState(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackendFromCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.removeBackend(), and org.objectweb.cjdbc.controller.requestmanager.RequestManager.storeBackendsInfo(). 01539 {
01540 return lastKnownCheckpoint;
01541 }
|
|
Returns the backend logical name.
Definition at line 975 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer(), org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(), org.objectweb.cjdbc.controller.backend.BackendStateListener.changeState(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.commit(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableAllBackends(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableBackend(), org.objectweb.cjdbc.controller.requestmanager.RequestManager.disableBackendsForCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableAllBackendsFromCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.equals(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadOnlyReadStoredProcedure(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadOnlyReadStoredProcedure(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.SelectRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.RollbackTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.ReadStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.CommitTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.BeginTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.forceEnableAllBackendsFromCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabaseStaticMetaData.gatherStaticMetadata(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackendInformation(), org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule.getBackends(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.handleMessageMultiThreaded(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.handleMessageSingleThreaded(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.removeBackend(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.rollback(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.setBackendLastKnownCheckpoint(), and org.objectweb.cjdbc.controller.requestmanager.RequestManager.storeBackendsInfo(). 00976 {
00977 return name;
00978 }
|
|
Returns the list of pending requests for this backend.
Definition at line 996 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadOnlyReadStoredProcedure(), and org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadRequest(). 00997 {
00998 return pendingRequests;
00999 }
|
|
Definition at line 1005 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.clone(). 01007 { 01008 int size = pendingRequests.size(); 01009 int limit = (count == 0 || count > size) ? size : Math.min(size, count); 01010 ArrayList list = new ArrayList(limit); 01011 int start = (fromFirst) ? 0 : Math.min(limit - count, 0); 01012 if (!clone) 01013 { 01014 synchronized (pendingRequests) 01015 { 01016 for (int i = start; i < limit; i++) 01017 list.add(pendingRequests.get(i).toString()); 01018 } 01019 return list; 01020 } 01021 else 01022 { 01023 Vector cloneVector = (Vector) pendingRequests.clone(); 01024 for (int i = start; i < limit; i++) 01025 list.add(cloneVector.get(i).toString()); 01026 return list; 01027 } 01028 }
|
|
Returns the rewritingRules value.
Definition at line 1558 of file DatabaseBackend.java. 01559 {
01560 return rewritingRules;
01561 }
|
|
Definition at line 1356 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackendSchema(). 01357 { 01358 StringBuffer info = new StringBuffer(); 01359 info.append("<" 01360 + DatabasesXmlTags.ELT_DatabaseSchema 01361 + " " 01362 + DatabasesXmlTags.ATT_dynamicPrecision 01363 + "=\"" 01364 + DatabaseBackendSchemaConstants 01365 .getDynamicSchemaLevel(dynamicPrecision) + "\" " 01366 + DatabasesXmlTags.ATT_gatherSystemTables + "=\"" 01367 + (gatherSystemTables ? "true" : "false") + "\">"); 01368 if (expandSchema) 01369 info.append(schema.getXml()); 01370 info.append("</" + DatabasesXmlTags.ELT_DatabaseSchema + ">"); 01371 return info.toString(); 01372 }
|
|
Return the sql short form length to use when reporting an error.
Definition at line 354 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.SelectRequestTask.executeTask(), and org.objectweb.cjdbc.controller.loadbalancer.tasks.ReadStoredProcedureTask.executeTask(). 00355 {
00356 return sqlShortFormLength;
00357 }
|
|
Retrieve the state of the backend.
Definition at line 796 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackendState(). 00797 { 00798 switch (state) 00799 { 00800 case BackendState.READ_ENABLED_WRITE_DISABLED : 00801 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_ENABLED; 00802 case BackendState.READ_ENABLED_WRITE_ENABLED : 00803 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_ENABLED_WRITE; 00804 case BackendState.READ_DISABLED_WRITE_ENABLED : 00805 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_ENABLED_WRITE; 00806 case BackendState.DISABLING : 00807 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_DISABLING; 00808 case BackendState.BACKUPING : 00809 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_BACKINGUP; 00810 case BackendState.RECOVERING : 00811 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_RECOVERING; 00812 case BackendState.REPLAYING : 00813 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_REPLAYING; 00814 case BackendState.DISABLED : 00815 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_DISABLED; 00816 case BackendState.UNKNOWN : 00817 return CjdbcNotificationList.VIRTUALDATABASE_BACKEND_UNKNOWN; 00818 default : 00819 throw new IllegalArgumentException("Unknown backend state:" + state); 00820 } 00821 }
|
|
Return the integer value corresponding to the state of the backend. The values are defined in
Definition at line 830 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.BackendStateListener.changeState(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.setBackendLastKnownCheckpoint(), and org.objectweb.cjdbc.controller.requestmanager.RequestManager.storeBackendsInfo(). 00831 {
00832 return state;
00833 }
|
|
Get all the names of tables of this database
Definition at line 430 of file DatabaseBackend.java. 00431 { 00432 if (schema == null) 00433 throw new NullPointerException(Translate.get("backend.schema.not.set")); 00434 return schema.getTables(); 00435 }
|
|
Get the total number of active connections for this backend
Definition at line 1449 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getCurrentNumberOfConnections(). 01450 { 01451 int activeConnections = 0; 01452 Iterator iter = connectionManagers.keySet().iterator(); 01453 while (iter.hasNext()) 01454 activeConnections += ((AbstractConnectionManager) connectionManagers 01455 .get(iter.next())).getCurrentNumberOfConnections(); 01456 return activeConnections; 01457 }
|
|
Returns the total number of read requests executed by this backend.
Definition at line 1498 of file DatabaseBackend.java. 01499 {
01500 return totalReadRequest;
01501 }
|
|
Returns the total number of requests executed by this backend.
Definition at line 1518 of file DatabaseBackend.java. 01519 {
01520 return totalRequest;
01521 }
|
|
Returns the total number of transactions executed by this backend.
Definition at line 1488 of file DatabaseBackend.java. 01489 {
01490 return totalTransactions;
01491 }
|
|
Returns the total number of write requests executed by this backend.
Definition at line 1508 of file DatabaseBackend.java. 01509 {
01510 return totalWriteRequest;
01511 }
|
|
Returns the JDBC URL used to access the database.
Definition at line 1255 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.equals(), and org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.isCompatibleBackend(). 01256 {
01257 return url;
01258 }
|
|
Returns the virtual database name this backend belongs to.
Definition at line 985 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo(). 00986 {
00987 return virtualDatabaseName;
00988 }
|
|
Get xml information about this backend.
Definition at line 1315 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getXml(). Referenced by org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.createBackendInfo(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackendInformation(). 01316 { 01317 StringBuffer info = new StringBuffer(); 01318 info.append("<" + DatabasesXmlTags.ELT_DatabaseBackend + " " 01319 + DatabasesXmlTags.ATT_name + "=\"" + name + "\" " 01320 + DatabasesXmlTags.ATT_driver + "=\"" + driverClassName + "\" " 01321 + DatabasesXmlTags.ATT_url + "=\"" + url + "\" " 01322 + DatabasesXmlTags.ATT_connectionTestStatement + "=\"" 01323 + connectionTestStatement + "\">"); 01324 01325 boolean expandSchema = this.schema != null 01326 && dynamicPrecision == DatabaseBackendSchemaConstants.DynamicPrecisionStatic; 01327 01328 info.append(getSchemaXml(expandSchema)); 01329 01330 if (rewritingRules != null) 01331 { 01332 int size = rewritingRules.size(); 01333 for (int i = 0; i < size; i++) 01334 info.append(((AbstractRewritingRule) rewritingRules.get(i)).getXml()); 01335 } 01336 if (connectionManagers != null) 01337 { 01338 if (connectionManagers.isEmpty() == false) 01339 { 01340 AbstractConnectionManager connectionManager; 01341 Iterator iter = connectionManagers.values().iterator(); 01342 while (iter.hasNext()) 01343 { 01344 connectionManager = (AbstractConnectionManager) iter.next(); 01345 info.append(connectionManager.getXml()); 01346 } 01347 } 01348 } 01349 info.append("</" + DatabasesXmlTags.ELT_DatabaseBackend + ">"); 01350 return info.toString(); 01351 }
|
|
Returns
Definition at line 446 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadOnlyReadStoredProcedure(), and org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadOnlyReadStoredProcedure(). 00447 { 00448 if (schema == null) 00449 throw new NullPointerException(Translate.get("backend.schema.not.set")); 00450 00451 return schema.hasProcedure(procedureName); 00452 }
|
|
Returns
Definition at line 417 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequest(), and org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(). 00418 { 00419 if (schema == null) 00420 throw new NullPointerException(Translate.get("backend.schema.not.set")); 00421 00422 return schema.hasTable(table); 00423 }
|
|
Returns
Definition at line 391 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadRequest(), and org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execReadRequest(). 00392 { 00393 if (schema == null) 00394 throw new NullPointerException(Translate.get("backend.schema.not.set")); 00395 00396 if (tables == null) 00397 throw new IllegalArgumentException(Translate.get("backend.null.tables")); 00398 00399 int size = tables.size(); 00400 for (int i = 0; i < size; i++) 00401 { 00402 if (!schema.hasTable((String) tables.get(i))) 00403 return false; 00404 } 00405 return true; 00406 }
|
|
Initializes the connection managers' connections. The caller must ensure that the driver has already been loaded else an exception will be thrown.
Definition at line 462 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.enableBackend(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(). 00463 { 00464 if (connectionManagers.isEmpty()) 00465 throw new SQLException(Translate.get("backend.not.defined", new String[]{ 00466 name, url})); 00467 00468 AbstractConnectionManager connectionManager; 00469 Iterator iter = connectionManagers.values().iterator(); 00470 while (iter.hasNext()) 00471 { 00472 connectionManager = (AbstractConnectionManager) iter.next(); 00473 if (!connectionManager.isInitialized()) 00474 connectionManager.initializeConnections(); 00475 } 00476 }
|
|
Returns the isBackuping value.
Definition at line 1647 of file DatabaseBackend.java. 01648 {
01649 return state == BackendState.BACKUPING;
01650 }
|
|
Definition at line 769 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.setBackendLastKnownCheckpoint(). 00770 {
00771 return state == BackendState.DISABLED;
00772 }
|
|
Returns the isDisabling value.
Definition at line 761 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_RR.chooseBackendForWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteStoredProcedureTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestWithKeysTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.WriteRequestTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.BeginTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequest(), and org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(). 00762 {
00763 return state == BackendState.DISABLING;
00764 }
|
|
Tests if this backend is enabled (active and synchronized).
Definition at line 679 of file DatabaseBackend.java. 00680 { 00681 if (connectionManagers.isEmpty()) 00682 throw new SQLException(Translate.get("backend.null.connection.manager", 00683 new String[]{name, url})); 00684 Iterator iter = connectionManagers.values().iterator(); 00685 while (iter.hasNext()) 00686 { 00687 if (!((AbstractConnectionManager) iter.next()).isInitialized()) 00688 return false; 00689 } 00690 return true; 00691 }
|
|
Is the backend accessible ?
Definition at line 699 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.connection.AbstractConnectionManager.getConnectionFromDriver(). 00700 { 00701 try 00702 { 00703 if (connectionManagers.isEmpty()) 00704 throw new SQLException(Translate.get("backend.null.connection.manager", 00705 new String[]{name, url})); 00706 00707 AbstractConnectionManager connectionManager; 00708 Iterator iter = connectionManagers.values().iterator(); 00709 connectionManager = (AbstractConnectionManager) iter.next(); 00710 00711 Connection con = connectionManager.getConnectionFromDriver(); 00712 con.createStatement().execute(this.connectionTestStatement); 00713 return true; 00714 } 00715 catch (Exception e) 00716 { 00717 String msg = Translate.get("loadbalancer.backend.unreacheable", name); 00718 logger.warn(msg, e); 00719 return false; 00720 } 00721 }
|
|
Returns true if the backend cannot be used anymore
Definition at line 780 of file DatabaseBackend.java. 00781 {
00782 return state == BackendState.UNKNOWN;
00783 }
|
|
Tests if this backend is read enabled (active and synchronized).
Definition at line 728 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_RR.chooseBackendForReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForReadRequest(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableAllBackends(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableAllBackends(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableAllBackendsFromCheckpoint(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadOnlyReadStoredProcedure(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadOnlyReadStoredProcedure(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_RR.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2_LPRF.execReadRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execReadRequest(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.forceEnableAllBackendsFromCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(), org.objectweb.cjdbc.controller.loadbalancer.policies.errorchecking.ErrorCheckingRoundRobin.getBackends(), org.objectweb.cjdbc.controller.loadbalancer.policies.errorchecking.ErrorCheckingRandom.getBackends(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames(). 00729 {
00730 return state == BackendState.READ_ENABLED_WRITE_DISABLED
00731 || state == BackendState.READ_ENABLED_WRITE_ENABLED;
00732 }
|
|
Returns the isRecovering value.
Definition at line 751 of file DatabaseBackend.java. 00752 {
00753 return state == BackendState.RECOVERING;
00754 }
|
|
Definition at line 1385 of file DatabaseBackend.java. 01386 {
01387 return schemaIsStatic;
01388 }
|
|
Returns
Definition at line 665 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2.commit(), org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1.commit(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.commit(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2.rollback(), org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1.rollback(), and org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.rollback(). 00666 { 00667 synchronized (activeTransactions) 00668 { 00669 return activeTransactions.contains(tid); 00670 } 00671 }
|
|
Check if the given connection is valid or not. This function issues the connectionTestStatement query on the connection and if it succeeds then the connection is declared valid. If an exception occurs, the connection is declared invalid.
Definition at line 509 of file DatabaseBackend.java. References java.sql.Statement.executeQuery(). 00510 { 00511 try 00512 { 00513 Statement s = connection.createStatement(); 00514 s.executeQuery(connectionTestStatement); 00515 } 00516 catch (SQLException e) 00517 { 00518 if ("25P02".equals(e.getSQLState()) 00519 || (e.getMessage() != null && e 00520 .getMessage() 00521 .indexOf( 00522 "current transaction is aborted, queries ignored until end of transaction block") > 0)) 00523 { 00524 // see bug item #300873 on the forge for details 00525 // postgres throws an exception if a query is issued after a request has 00526 // failed within a transaction, we now have to check for this exception 00527 // as it is means the connection is valid 00528 // 00529 // postgres versions after 7.4 will return the SQLState, whereas 00530 // postgres versions prior to 7.4 will have to be checked for the 00531 // message text 00532 return true; 00533 } 00534 return false; 00535 } 00536 return true; 00537 }
|
|
Returns the writeCanBeEnabled value.
Definition at line 1746 of file DatabaseBackend.java. 01747 {
01748 return writeCanBeEnabled;
01749 }
|
|
Tests if this backend is write enabled (active and synchronized).
Definition at line 739 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer.AbstractLoadBalancer(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_RR.chooseBackendForWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB_LPRF.chooseBackendForWriteRequest(), org.objectweb.cjdbc.controller.requestmanager.RequestManager.disableBackendsForCheckpoint(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequest(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.execWriteRequestWithKeys(), org.objectweb.cjdbc.controller.loadbalancer.policies.errorchecking.ErrorCheckingRoundRobin.getBackends(), org.objectweb.cjdbc.controller.loadbalancer.policies.errorchecking.ErrorCheckingRandom.getBackends(), and org.objectweb.cjdbc.controller.loadbalancer.policies.createtable.CreateTableRule.getBackends(). 00740 {
00741 return state == BackendState.READ_ENABLED_WRITE_ENABLED
00742 || state == BackendState.READ_DISABLED_WRITE_ENABLED
00743 || state == BackendState.DISABLING;
00744 }
|
|
Sends JMX notification
Definition at line 1704 of file DatabaseBackend.java. 01705 { 01706 notifyJmx(type, CjdbcNotificationList.NOTIFICATION_LEVEL_INFO, Translate 01707 .get(type, getName())); 01708 }
|
|
Sends JMX error notification
Definition at line 1717 of file DatabaseBackend.java. 01718 { 01719 notifyJmx(type, CjdbcNotificationList.NOTIFICATION_LEVEL_ERROR, Translate 01720 .get(type, new String[]{getName(), e.getMessage()})); 01721 01722 }
|
|
Notify the state of the backend has changed. This does two things: 1. Change the state of the backend stored in the recovery log 2. Sends a jmx notification. This method has all the data prefilled because we know all the parameters in advance, except the type of the notification.
Definition at line 1691 of file DatabaseBackend.java. 01692 { 01693 if (stateListener != null) 01694 stateListener.changeState(this); 01695 notifyJmx(getState()); 01696 }
|
|
Erase the current schema and force a re-fetch of all the meta data Definition at line 1110 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames(). 01111 { 01112 setDatabaseSchema(null, isSchemaStatic()); 01113 checkDatabaseSchema(); 01114 }
|
|
Removes a pending request from this backend. Note that the underlying vector is synchronized.
Definition at line 1069 of file DatabaseBackend.java. 01070 {
01071 return pendingRequests.remove(request);
01072 }
|
|
Rewrite the current query according to the rewriting rules.
Definition at line 1285 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.rewriting.AbstractRewritingRule.hasMatched, org.objectweb.cjdbc.controller.backend.rewriting.AbstractRewritingRule.isStopOnMatch(), and org.objectweb.cjdbc.controller.backend.rewriting.AbstractRewritingRule.rewrite. 01286 { 01287 if (rewritingRules == null) 01288 return sqlQuery; 01289 int size = rewritingRules.size(); 01290 for (int i = 0; i < size; i++) 01291 { 01292 AbstractRewritingRule rule = (AbstractRewritingRule) rewritingRules 01293 .get(i); 01294 sqlQuery = rule.rewrite(sqlQuery); 01295 if (rule.hasMatched()) 01296 { // Rule matched, query rewriten 01297 if (logger.isDebugEnabled()) 01298 logger.debug(Translate.get("backend.rewriting.query", sqlQuery)); 01299 if (rule.isStopOnMatch()) 01300 break; // Ok, stop here. 01301 } 01302 } 01303 return sqlQuery; 01304 }
|
|
Sets the database schema.
Definition at line 1093 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.disableBackendWithCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.enableBackendFromCheckpoint(), and org.objectweb.cjdbc.controller.requestmanager.RequestManager.setDatabaseSchema(). 01094 { 01095 if (schema == null) 01096 { 01097 schemaIsStatic = isStatic; 01098 schema = databaseSchema; 01099 } 01100 else 01101 { 01102 if (!isStatic) 01103 schema = databaseSchema; 01104 } 01105 }
|
|
This is used when the backend must be disabled but currently open transactions must terminate. This is a transitional state. When disabling is complete the caller must set the backend state to disabled. Reads are no more allowed on the backend and the state is updated so that isReadEnabled() returns false.
Definition at line 893 of file DatabaseBackend.java. 00894 { 00895 setState(BackendState.DISABLING); 00896 }
|
|
Set the amount of information that must be gathered when fetching database schema information.
Definition at line 1475 of file DatabaseBackend.java. 01477 { 01478 this.dynamicPrecision = dynamicPrecision; 01479 this.gatherSystemTables = gatherSystemTables; 01480 this.schemaName = schemaName; 01481 }
|
|
setLastKnownCheckpoint for this backend
Definition at line 1528 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.requestmanager.RequestManager.disableBackendsForCheckpoint(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.forceEnableAllBackendsFromCheckpoint(), and org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.setBackendLastKnownCheckpoint(). 01529 {
01530 this.lastKnownCheckpoint = checkpoint;
01531 }
|
|
Sets the rewritingRules value.
Definition at line 1568 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy(). 01569 {
01570 this.rewritingRules = rewritingRules;
01571 }
|
|
Sets the sqlShortFormLength value.
Definition at line 343 of file DatabaseBackend.java. 00344 {
00345 this.sqlShortFormLength = sqlShortFormLength;
00346 }
|
|
Set the state of a backend
Definition at line 1658 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackend.state. Referenced by org.objectweb.cjdbc.controller.requestmanager.RequestManager.disableBackendsForCheckpoint(). 01659 { 01660 switch (state) 01661 { 01662 case BackendState.UNKNOWN : 01663 lastKnownCheckpoint = null; 01664 case BackendState.READ_ENABLED_WRITE_DISABLED : 01665 case BackendState.READ_ENABLED_WRITE_ENABLED : 01666 case BackendState.READ_DISABLED_WRITE_ENABLED : 01667 case BackendState.DISABLING : 01668 case BackendState.BACKUPING : 01669 case BackendState.RECOVERING : 01670 case BackendState.REPLAYING : 01671 case BackendState.DISABLED : 01672 this.state = state; 01673 if (logger.isDebugEnabled()) 01674 logger.debug(Translate.get("backend.state.changed", new String[]{ 01675 name, getState()})); 01676 notifyStateChange(); 01677 break; 01678 default : 01679 throw new IllegalArgumentException("Unknown backend state:" + state); 01680 } 01681 }
|
|
Sets the stateListener value.
Definition at line 1756 of file DatabaseBackend.java. References org.objectweb.cjdbc.controller.backend.DatabaseBackend.stateListener. Referenced by org.objectweb.cjdbc.controller.requestmanager.RequestManager.setRecoveryLog(). 01757 {
01758 this.stateListener = stateListener;
01759 }
|
|
Signals that a transaction has been started on this backend. It means that a connection has been allocated for this transaction.
Definition at line 605 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.begin(). 00606 {
00607 synchronized (activeTransactions)
00608 {
00609 totalTransactions++;
00610 activeTransactions.add(tid);
00611 }
00612 }
|
|
Signals that a transaction has been stopped on this backend. It means that the connection has been released for this transaction.
Definition at line 620 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.commit(), org.objectweb.cjdbc.controller.loadbalancer.tasks.RollbackTask.executeTask(), org.objectweb.cjdbc.controller.loadbalancer.tasks.CommitTask.executeTask(), and org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.rollback(). 00621 { 00622 synchronized (activeTransactions) 00623 { 00624 if (!activeTransactions.remove(tid)) 00625 throw new IllegalArgumentException(Translate.get( 00626 "backend.transaction.not.started", new String[]{"" + tid, name})); 00627 // If this was the last open transaction, we notify people possibly 00628 // waiting on waitForAllTransactionsToComplete() 00629 if (activeTransactions.isEmpty()) 00630 { 00631 activeTransactions.notifyAll(); 00632 } 00633 } 00634 }
|
|
String description
Definition at line 1766 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getXml(), org.objectweb.cjdbc.controller.requestmanager.RequestManager.getXml(), and org.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB.getXmlImpl(). 01767 { 01768 return "Backend: Name[" + this.name + "] State[" + this.state 01769 + "] JDBCConnected[" + isJDBCConnected() + "] ActiveTransactions[" 01770 + activeTransactions.size() + "] PendingRequests[" 01771 + pendingRequests.size() + "]"; 01772 }
|
|
This method waits until all currently open transactions on this backend complete. If no transaction are currently running on this backend, this method immediately returns. Definition at line 641 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.requestmanager.RequestManager.disableBackendsForCheckpoint(). 00642 { 00643 synchronized (activeTransactions) 00644 { 00645 if (activeTransactions.isEmpty()) 00646 return; 00647 else 00648 try 00649 { 00650 activeTransactions.wait(); 00651 } 00652 catch (InterruptedException ignore) 00653 { 00654 } 00655 } 00656 }
|
|
Logger instance. Definition at line 131 of file DatabaseBackend.java. Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.DatabaseBackend(). |