Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.backend.DatabaseBackend Class Reference

Collaboration diagram for org.objectweb.cjdbc.controller.backend.DatabaseBackend:

Collaboration graph
[legend]
List of all members.

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

Detailed Description

A 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.

Author:
Emmanuel Cecchet

Mathieu Peltier

Sara Bouchenak

Nicolas Modrzyk

Version:
1.0

Definition at line 80 of file DatabaseBackend.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.backend.DatabaseBackend.DatabaseBackend String  name,
String  driverPath,
String  driverClassName,
String  url,
String  vdbName,
boolean  writeCanBeEnabled,
String  connectionTestStatement
throws NotCompliantMBeanException
 

Creates a new DatabaseBackend instance.

Parameters:
name logical name assigned to this backend
driverPath path for driver
driverClassName class name of the database native JDBC driver to load
url URL to access the database
vdbName Name of the virtual database this backend is attached to
writeCanBeEnabled if writes can be enabled on this backend
connectionTestStatement SQL statement used to check if a connection is still valid
Exceptions:
NotCompliantMBeanException if the mbean can not be created (unless we refactor the code this cannot happend)

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   }

org.objectweb.cjdbc.controller.backend.DatabaseBackend.DatabaseBackend BackendInfo  info  )  throws NotCompliantMBeanException
 

Creates a new DatabaseBackend object

Parameters:
info a backend info object to create a database backend object from
Exceptions:
NotCompliantMBeanException if mbean is not compliant (unless we refactor the code this cannot happend)

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   }

org.objectweb.cjdbc.controller.backend.DatabaseBackend.DatabaseBackend String  name,
String  driverPath,
String  driverClassName,
String  url,
String  vdbName,
String  connectionTestStatement,
String  dynamicSchemaLevel
throws NotCompliantMBeanException
 

Additionnal constructor for setting a different dynamic schema level. Default was to gather all information Creates a new DatabaseBackend instance.

Parameters:
name logical name assigned to this backend
driverPath path for driver
driverClassName class name of the database native JDBC driver to load
url URL to access the database
vdbName Name of the virtual database this backend is attached to
connectionTestStatement SQL statement used to check if a connection is still valid
dynamicSchemaLevel for dynamically gathering schema from backend
Exceptions:
NotCompliantMBeanException (unless we refactor the code this cannot happend)

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   }


Member Function Documentation

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.addConnectionManager String  vLogin,
AbstractConnectionManager  connectionManager
 

Adds a ConnectionManager to this backend. Note that the ConnectionManager is not initialized in this method.

Parameters:
vLogin the virtual login corresponding to this connection manager
connectionManager the ConnectionManager to add

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.addPendingReadRequest Object  request  ) 
 

Adds a pending request (or task) to this backend. Note that the underlying vector is synchronized.

Parameters:
request the request to add

Definition at line 1036 of file DatabaseBackend.java.

01037   {
01038     synchronized (this)
01039     {
01040       totalRequest++;
01041       totalReadRequest++;
01042     }
01043     pendingRequests.add(request);
01044   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.addPendingWriteRequest Object  request  ) 
 

Adds a pending request (or task) to this backend. Note that the underlying vector is synchronized.

Parameters:
request the request to add

Definition at line 1052 of file DatabaseBackend.java.

01053   {
01054     synchronized (this)
01055     {
01056       totalRequest++;
01057       totalWriteRequest++;
01058     }
01059     pendingRequests.add(request);
01060   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.addRewritingRule AbstractRewritingRule  rule  ) 
 

Add a AbstractRewritingRule at the end of the rule list.

Parameters:
rule a AbstractRewritingRule

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.checkDatabaseSchema  ) 
 

See also:
DatabaseBackendMBean#checkDatabaseSchema()

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.checkDriverCompliance  )  throws SQLException
 

Check if the driver used by this backend is compliant with C-JDBC needs.

Exceptions:
SQLException if the driver is not compliant

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   }

DatabaseBackend org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy String  newName,
Map  parameters
throws Exception
 

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

Parameters:
newName the new name for this new backend
parameters a set of parameters to use to replace values from the copied backend.
The different parameters are:
  • driverPath: the path to the driver
  • driver: the driver class name
  • url: the url to connect to the database
  • connectionTestStatement: the query to test the connection

Returns:
DatabaseBackend instance
Exceptions:
Exception if cannot proceed the copy

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.disable  ) 
 

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.disableRead  ) 
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.disableRead()

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.disableWrite  ) 
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.disableWrite()

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.enableRead  ) 
 

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.enableWrite  ) 
 

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.equals Object  other  ) 
 

Two database backends are considered equal if they have the same name, URL and driver class name.

Parameters:
other an object
Returns:
a boolean value

Definition at line 368 of file DatabaseBackend.java.

References org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDriverClassName(), org.objectweb.cjdbc.controller.backend.DatabaseBackend.getName(), and org.objectweb.cjdbc.controller.backend.DatabaseBackend.getURL().

Referenced by org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2ec.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1ec.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb0.RAIDb0.disableBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getAndCheckBackend(), org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.getBackendInformation(), org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.handleMessageMultiThreaded(), and org.objectweb.cjdbc.controller.virtualdatabase.DistributedVirtualDatabase.isCompatibleBackend().

00369   {
00370     if ((other == null) || (!(other instanceof DatabaseBackend)))
00371       return false;
00372     else
00373     {
00374       DatabaseBackend b = (DatabaseBackend) other;
00375       return name.equals(b.getName())
00376           && driverClassName.equals(b.getDriverClassName())
00377           && url.equals(b.getURL());
00378     }
00379   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.finalizeConnections  )  throws SQLException
 

Releases all the connections to the database held by the connection managers.

Exceptions:
SQLException if an error occurs

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   }

ArrayList org.objectweb.cjdbc.controller.backend.DatabaseBackend.getActiveTransactions  ) 
 

Returns:
Returns the activeTransactions.

Definition at line 1377 of file DatabaseBackend.java.

01378   {
01379     return activeTransactions;
01380   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getAssociatedString  ) 
 

See also:
org.objectweb.cjdbc.controller.jmx.AbstractStandardMBean.getAssociatedString()

Definition at line 955 of file DatabaseBackend.java.

00956   {
00957     return "backend";
00958   }

String [] org.objectweb.cjdbc.controller.backend.DatabaseBackend.getBackendData  ) 
 

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;
   *

Returns:
an array of strings

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   }

synchronized Connection org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionForTransactionAndLazyBeginIfNeeded Long  tid,
AbstractConnectionManager  cm
throws UnreachableBackendException, NoTransactionStartWhenDisablingException, SQLException
 

Retrieve a connection for a given transaction or create a new connection and start a new transaction.
This method is synchronized so that concurrent writes within the same transaction that are allowed to execute out of order will not open separate connection if they race on transaction begin.

Parameters:
tid transaction identifier
cm connection manager to get the connection from
Returns:
the connection for the given transaction id
Exceptions:
UnreachableBackendException if the backend is no more reachable
NoTransactionStartWhenDisablingException if a new transaction needed to be started but the backend is in the disabling state
SQLException if another error occurs

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   }

AbstractConnectionManager org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionManager String  vLogin  ) 
 

Returns the ConnectionManager associated to this backend for a given virtual login.

Parameters:
vLogin the virtual login
Returns:
an AbstractConnectionManager instance

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   }

HashMap org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionManagers  ) 
 

Returns a HashMap of all the ConnectionManager associated with this DatabaseBackend

Returns:
the hashmap of connection managers

Definition at line 929 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy().

00930   {
00931     return this.connectionManagers;
00932   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getConnectionTestStatement  ) 
 

Returns the SQL statement to use to check the connection validity.

Returns:
a String containing a SQL statement

Definition at line 939 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo().

00940   {
00941     return connectionTestStatement;
00942   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDatabaseProductName  ) 
 

Returns the databaseProductName value.

Returns:
Returns the databaseProductName.

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   }

DatabaseSchema org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDatabaseSchema  ) 
 

Returns the schema of this database.

Returns:
the schema of this database. Returns null if the schema has not been set.
See also:
setDatabaseSchema

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   }

MetadataContainer org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDatabaseStaticMetadata  ) 
 

Get the Database static metadata from this backend using a connection from the first available connection manager.

Returns:
Static metadata information

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   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDriverClassName  ) 
 

Returns the database native JDBC driver class name.

Returns:
the 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   }

DriverCompliance org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDriverCompliance  ) 
 

Returns:
the driver compliance to C-JDBC requirements.

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   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDriverPath  ) 
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.getDriverPath()

Definition at line 947 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo().

00948   {
00949     return driverPath;
00950   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getDynamicPrecision  ) 
 

Returns:
Returns the dynamicPrecision.

Definition at line 1462 of file DatabaseBackend.java.

01463   {
01464     return dynamicPrecision;
01465   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getLastKnownCheckpoint  ) 
 

Returns the lastKnownCheckpoint value.

Returns:
Returns the lastKnownCheckpoint.

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   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getName  ) 
 

Returns the backend logical name.

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   }

Vector org.objectweb.cjdbc.controller.backend.DatabaseBackend.getPendingRequests  ) 
 

Returns the list of pending requests for this backend.

Returns:
Vector of AbstractRequests or AbstractTask objects

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   }

ArrayList org.objectweb.cjdbc.controller.backend.DatabaseBackend.getPendingRequestsDescription int  count,
boolean  fromFirst,
boolean  clone
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.getPendingRequestsDescription(int, boolean, boolean)

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   }

ArrayList org.objectweb.cjdbc.controller.backend.DatabaseBackend.getRewritingRules  ) 
 

Returns the rewritingRules value.

Returns:
Returns the rewritingRules.

Definition at line 1558 of file DatabaseBackend.java.

01559   {
01560     return rewritingRules;
01561   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getSchemaXml boolean  expandSchema  ) 
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.getSchemaXml(boolean)

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   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getSQLShortFormLength  ) 
 

Return the sql short form length to use when reporting an error.

Returns:
sql short form length
See also:
org.objectweb.cjdbc.common.sql.AbstractRequest.getSQLShortForm(int)

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   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getState  ) 
 

Retrieve the state of the backend.

See also:
CjdbcNotificationList#VIRTUALDATABASE_BACKEND_DISABLED

CjdbcNotificationList#VIRTUALDATABASE_BACKEND_RECOVERING

CjdbcNotificationList#VIRTUALDATABASE_BACKEND_BACKINGUP

CjdbcNotificationList#VIRTUALDATABASE_BACKEND_DISABLING

CjdbcNotificationList#VIRTUALDATABASE_BACKEND_ENABLED

CjdbcNotificationList#VIRTUALDATABASE_BACKEND_DISABLED

Returns:
one of the above

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   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getStateValue  ) 
 

Return the integer value corresponding to the state of the backend. The values are defined in BackendState

Returns:
int value
See also:
BackendState

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   }

ArrayList org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTables  ) 
 

Get all the names of tables of this database

Returns:
ArrayList of DatabaseTable

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   }

long org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTotalActiveConnections  ) 
 

Get the total number of active connections for this backend

Returns:
number of active connections for all AbstractConnectionManager connected to 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   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTotalReadRequest  ) 
 

Returns the total number of read requests executed by this backend.

Returns:
Returns the totalReadRequest.

Definition at line 1498 of file DatabaseBackend.java.

01499   {
01500     return totalReadRequest;
01501   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTotalRequest  ) 
 

Returns the total number of requests executed by this backend.

Returns:
Returns the totalRequest.

Definition at line 1518 of file DatabaseBackend.java.

01519   {
01520     return totalRequest;
01521   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTotalTransactions  ) 
 

Returns the total number of transactions executed by this backend.

Returns:
Total number of transactions.

Definition at line 1488 of file DatabaseBackend.java.

01489   {
01490     return totalTransactions;
01491   }

int org.objectweb.cjdbc.controller.backend.DatabaseBackend.getTotalWriteRequest  ) 
 

Returns the total number of write requests executed by this backend.

Returns:
Returns the totalWriteRequest.

Definition at line 1508 of file DatabaseBackend.java.

01509   {
01510     return totalWriteRequest;
01511   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getURL  ) 
 

Returns the JDBC URL used to access the database.

Returns:
a JDBC URL

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   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getVirtualDatabaseName  ) 
 

Returns the virtual database name this backend belongs to.

Returns:
Returns the virtual database name.

Definition at line 985 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.common.shared.BackendInfo.BackendInfo().

00986   {
00987     return virtualDatabaseName;
00988   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.getXml  ) 
 

Get xml information about this backend.

Returns:
xml formatted information on this database 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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.hasStoredProcedure String  procedureName  ) 
 

Returns true if this backend has the given stored procedure in its schema. The caller must ensure that the database schema has been defined, using the setDatabaseSchema(DatabaseSchema, boolean)or checkDatabaseSchema()

Parameters:
procedureName The stored procedure name to look for
Returns:
true if procedure name is found in the schema

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.hasTable String  table  ) 
 

Returns true if this backend has the given table in its schema. The caller must ensure that the database schema has been defined, using the setDatabaseSchema(DatabaseSchema, boolean)or checkDatabaseSchema()

Parameters:
table The table name to look for
Returns:
true if tables is found in the schema

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.hasTables ArrayList  tables  ) 
 

Returns true if this backend has the given list of tables in its schema. The caller must ensure that the database schema has been defined, using the setDatabaseSchema(DatabaseSchema, boolean)or checkDatabaseSchema()methods.

Parameters:
tables the list of table names (ArrayList of String) to look for
Returns:
true if all the tables are found

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   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.initializeConnections  )  throws SQLException
 

Initializes the connection managers' connections. The caller must ensure that the driver has already been loaded else an exception will be thrown.

Exceptions:
SQLException if an error occurs

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isBackuping  ) 
 

Returns the isBackuping value.

Returns:
Returns the isBackuping.

Definition at line 1647 of file DatabaseBackend.java.

01648   {
01649     return state == BackendState.BACKUPING;
01650   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isDisabled  ) 
 

See also:
org.objectweb.cjdbc.common.jmx.mbeans.DatabaseBackendMBean.isDisabled()

Definition at line 769 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase.setBackendLastKnownCheckpoint().

00770   {
00771     return state == BackendState.DISABLED;
00772   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isDisabling  ) 
 

Returns the isDisabling value.

Returns:
Returns the isDisabling.

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   }

synchronized boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isInitialized  )  throws SQLException
 

Tests if this backend is enabled (active and synchronized).

Returns:
true if this backend is enabled
Exceptions:
SQLException if an error occurs

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   }

synchronized boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isJDBCConnected  ) 
 

Is the backend accessible ?

Returns:
true if a jdbc connection is still possible from the controller

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isKilled  ) 
 

Returns true if the backend cannot be used anymore

Returns:
Returns true if the backend was removed from activity by the load balancer

Definition at line 780 of file DatabaseBackend.java.

00781   {
00782     return state == BackendState.UNKNOWN;
00783   }

synchronized boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isReadEnabled  ) 
 

Tests if this backend is read enabled (active and synchronized).

Returns:
true if this backend is enabled.

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isRecovering  ) 
 

Returns the isRecovering value.

Returns:
Returns the isRecovering.

Definition at line 751 of file DatabaseBackend.java.

00752   {
00753     return state == BackendState.RECOVERING;
00754   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isSchemaStatic  ) 
 

Returns:
Returns the schemaIsStatic.

Definition at line 1385 of file DatabaseBackend.java.

01386   {
01387     return schemaIsStatic;
01388   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isStartedTransaction Long  tid  ) 
 

Returns true if the specified transaction has been started on this backend (a connection has been allocated for this transaction).

Parameters:
tid transaction identifier
Returns:
true if the transaction has been started

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isValidConnection Connection  connection  ) 
 

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.

Parameters:
connection the connection to test
Returns:
true if the connection is valid

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isWriteCanBeEnabled  ) 
 

Returns the writeCanBeEnabled value.

Returns:
Returns the writeCanBeEnabled.

Definition at line 1746 of file DatabaseBackend.java.

01747   {
01748     return writeCanBeEnabled;
01749   }

synchronized boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.isWriteEnabled  ) 
 

Tests if this backend is write enabled (active and synchronized).

Returns:
true if this backend is enabled.

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.notifyJmx String  type  ) 
 

Sends JMX notification

Parameters:
type notification type
See also:
CjdbcNotificationList

Definition at line 1704 of file DatabaseBackend.java.

01705   {
01706     notifyJmx(type, CjdbcNotificationList.NOTIFICATION_LEVEL_INFO, Translate
01707         .get(type, getName()));
01708   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.notifyJmxError String  type,
Exception  e
 

Sends JMX error notification

Parameters:
e Exception object. Only the message will be used
type notification type
See also:
CjdbcNotificationList

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.notifyStateChange  ) 
 

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.

See also:
CjdbcNotificationList

Definition at line 1691 of file DatabaseBackend.java.

01692   {
01693     if (stateListener != null)
01694       stateListener.changeState(this);
01695     notifyJmx(getState());
01696   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.refreshSchema  ) 
 

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   }

boolean org.objectweb.cjdbc.controller.backend.DatabaseBackend.removePendingRequest Object  request  ) 
 

Removes a pending request from this backend. Note that the underlying vector is synchronized.

Parameters:
request the request to remove
Returns:
true if the request has been found and removed

Definition at line 1069 of file DatabaseBackend.java.

01070   {
01071     return pendingRequests.remove(request);
01072   }

String org.objectweb.cjdbc.controller.backend.DatabaseBackend.rewriteQuery String  sqlQuery  ) 
 

Rewrite the current query according to the rewriting rules.

Parameters:
sqlQuery request to rewrite
Returns:
the rewritten SQL query according to 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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setDatabaseSchema DatabaseSchema  databaseSchema,
boolean  isStatic
 

Sets the database schema.

Parameters:
databaseSchema the schema to set
isStatic true if the schema should be static
See also:
getDatabaseSchema

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setDisabling  ) 
 

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.

See also:
disable()

isReadEnabled()

Deprecated:
not used anymore. Please use the setState method instead

Definition at line 893 of file DatabaseBackend.java.

00894   {
00895     setState(BackendState.DISABLING);
00896   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setDynamicPrecision int  dynamicPrecision,
boolean  gatherSystemTables,
String  schemaName
 

Set the amount of information that must be gathered when fetching database schema information.

Parameters:
dynamicPrecision The dynamicPrecision to set.
gatherSystemTables True if we must gather system tables
schemaName Schema name to use to gather tables

Definition at line 1475 of file DatabaseBackend.java.

01477   {
01478     this.dynamicPrecision = dynamicPrecision;
01479     this.gatherSystemTables = gatherSystemTables;
01480     this.schemaName = schemaName;
01481   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setLastKnownCheckpoint String  checkpoint  ) 
 

setLastKnownCheckpoint for this backend

Parameters:
checkpoint the checkpoint

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setRewritingRules ArrayList  rewritingRules  ) 
 

Sets the rewritingRules value.

Parameters:
rewritingRules The rewritingRules to set.

Definition at line 1568 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.copy().

01569   {
01570     this.rewritingRules = rewritingRules;
01571   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setSqlShortFormLength int  sqlShortFormLength  ) 
 

Sets the sqlShortFormLength value.

Parameters:
sqlShortFormLength The sqlShortFormLength to set.

Definition at line 343 of file DatabaseBackend.java.

00344   {
00345     this.sqlShortFormLength = sqlShortFormLength;
00346   }

synchronized void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setState int  state  ) 
 

Set the state of a backend

Parameters:
state see BackendState for a possible list of the different state
See also:
org.objectweb.cjdbc.common.shared.BackendState

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.setStateListener BackendStateListener  stateListener  ) 
 

Sets the stateListener value.

Parameters:
stateListener The stateListener to set.

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.startTransaction Long  tid  ) 
 

Signals that a transaction has been started on this backend. It means that a connection has been allocated for this transaction.

Parameters:
tid transaction identifier

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.stopTransaction Long  tid  ) 
 

Signals that a transaction has been stopped on this backend. It means that the connection has been released for this transaction.

Parameters:
tid transaction identifier

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 org.objectweb.cjdbc.controller.backend.DatabaseBackend.toString  ) 
 

String description

Returns:
a string description of the backend.

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   }

void org.objectweb.cjdbc.controller.backend.DatabaseBackend.waitForAllTransactionsToComplete  ) 
 

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   }


Member Data Documentation

transient Trace org.objectweb.cjdbc.controller.backend.DatabaseBackend.logger [protected]
 

Logger instance.

Definition at line 131 of file DatabaseBackend.java.

Referenced by org.objectweb.cjdbc.controller.backend.DatabaseBackend.DatabaseBackend().


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:03:26 2005 for C-JDBC by  doxygen 1.3.9.1