org.objectweb.cjdbc.controller.loadbalancer.paralleldb
Class ParallelDB

java.lang.Object
  extended byjavax.management.StandardMBean
      extended byorg.objectweb.cjdbc.controller.jmx.AbstractStandardMBean
          extended byorg.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer
              extended byorg.objectweb.cjdbc.controller.loadbalancer.paralleldb.ParallelDB
All Implemented Interfaces:
AbstractLoadBalancerMBean, javax.management.DynamicMBean, javax.management.NotificationBroadcaster, javax.management.NotificationEmitter, XmlComponent
Direct Known Subclasses:
ParallelDB_LPRF, ParallelDB_RR

public abstract class ParallelDB
extends AbstractLoadBalancer

These are generic functions for all ParallelDB load balancers.

Read and write queries are load balanced on the backends without any replication (assuming that the underlying parallel database takes care of data replication). The load balancers provide failover for reads and writes.

Version:
1.0
Author:
Emmanuel Cecchet , Jaco Swart

Nested Class Summary
 
Nested classes inherited from class javax.management.StandardMBean
 
Field Summary
private  java.util.Hashtable backendPerTransactionId
           
private  int numberOfEnabledBackends
           
 
Fields inherited from class org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer
logger, macroHandler, parsingGranularity, raidbLevel, totalOrderQueue, vdb
 
Fields inherited from class org.objectweb.cjdbc.controller.jmx.AbstractStandardMBean
 
Fields inherited from class javax.management.StandardMBean
 
Fields inherited from interface org.objectweb.cjdbc.common.xml.XmlComponent
DOCTYPE_CONTROLLER, DOCTYPE_DB, XML_VERSION
 
Constructor Summary
ParallelDB(VirtualDatabase vdb)
          Creates a new ParallelDB load balancer with NO_PARSING and a SingleDB RAIDb level.
 
Method Summary
 void begin(TransactionMarkerMetaData tm)
          Begin a new transaction.
abstract  DatabaseBackend chooseBackendForReadRequest(AbstractRequest request)
          Choose a backend using the implementation specific load balancing algorithm for read request execution.
abstract  DatabaseBackend chooseBackendForWriteRequest(AbstractWriteRequest request)
          Choose a backend using the implementation specific load balancing algorithm for write request execution.
 void commit(TransactionMarkerMetaData tm)
          Commit a transaction.
 void disableBackend(DatabaseBackend db)
          Disables a backend that was previously enabled.
 void enableBackend(DatabaseBackend db, boolean writeEnabled)
          Enables a backend that was previously disabled.
 ControllerResultSet execReadOnlyReadStoredProcedure(StoredProcedure proc, MetadataCache metadataCache)
          Call a read-only stored procedure that returns a ResultSet.
 ControllerResultSet execReadRequest(SelectRequest request, MetadataCache metadataCache)
          Perform a read request.
 ControllerResultSet execReadStoredProcedure(StoredProcedure proc, MetadataCache metadataCache)
          Call a stored procedure that returns a ResultSet.
private  ControllerResultSet executeReadRequestOnBackend(SelectRequest request, DatabaseBackend backend, MetadataCache metadataCache)
          Execute a read request on the selected backend.
private  ControllerResultSet executeReadStoredProcedureOnBackend(StoredProcedure proc, DatabaseBackend backend, MetadataCache metadataCache)
          Execute a stored procedure on the selected backend.
private  int executeWriteRequestOnBackend(AbstractWriteRequest request, DatabaseBackend backend)
          Execute a write request on the selected backend.
private  ControllerResultSet executeWriteRequestWithKeysOnBackend(AbstractWriteRequest request, DatabaseBackend backend, MetadataCache metadataCache)
          Execute a write request on the selected backend and return the autogenerated keys.
private  int executeWriteStoredProcedureOnBackend(StoredProcedure proc, DatabaseBackend backend)
          Execute a stored procedure on the selected backend.
 int execWriteRequest(AbstractWriteRequest request)
          Perform a write request.
 ControllerResultSet execWriteRequestWithKeys(AbstractWriteRequest request, MetadataCache metadataCache)
          Perform a write request and return a ResultSet containing the auto generated keys.
 int execWriteStoredProcedure(StoredProcedure proc)
          Call a stored procedure that performs an update.
 int getNumberOfEnabledBackends()
          Get the number of currently enabled backends. 0 means that no backend is available.
abstract  java.lang.String getParallelDBXml()
          Return the XML tags of the ParallelDB load balancer implementation.
 java.lang.String getXmlImpl()
          Get information about the Request Load Balancer in xml
 void releaseSavepoint(TransactionMarkerMetaData tm, java.lang.String name)
          Release a savepoint from a transaction
 void rollback(TransactionMarkerMetaData tm)
          Rollback a transaction.
 void rollback(TransactionMarkerMetaData tm, java.lang.String savepointName)
          Rollback a transaction to a savepoint
 void setSavepoint(TransactionMarkerMetaData tm, java.lang.String name)
          Set a savepoint to a transaction.
 
Methods inherited from class org.objectweb.cjdbc.controller.loadbalancer.AbstractLoadBalancer
executeReadStoredProcedureOnBackend, executeSelectRequestOnBackend, executeUpdateRequestOnBackend, executeUpdateRequestOnBackendWithKeys, executeWriteStoredProcedureOnBackend, getAssociatedString, getConnectionAndBeginTransaction, getInformation, getParsingGranularity, getRAIDbLevel, getXml, handleMacros, removeHeadFromAndNotifyTotalOrderQueue, setMacroHandler, setParsingGranularity, setRAIDbLevel, setWeight, waitForTotalOrder
 
Methods inherited from class org.objectweb.cjdbc.controller.jmx.AbstractStandardMBean
addNotificationListener, getDescription, getDescription, getDescription, getDescription, getDescription, getDescription, getNotificationInfo, getParameterName, getParameterName, removeNotificationListener, removeNotificationListener, sendNotification
 
Methods inherited from class javax.management.StandardMBean
cacheMBeanInfo, getAttribute, getAttributes, getCachedMBeanInfo, getClassName, getConstructors, getDescription, getImpact, getImplementation, getImplementationClass, getMBeanInfo, getMBeanInterface, invoke, setAttribute, setAttributes, setImplementation
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

backendPerTransactionId

private java.util.Hashtable backendPerTransactionId

numberOfEnabledBackends

private int numberOfEnabledBackends
Constructor Detail

ParallelDB

public ParallelDB(VirtualDatabase vdb)
           throws java.sql.SQLException,
                  javax.management.NotCompliantMBeanException
Creates a new ParallelDB load balancer with NO_PARSING and a SingleDB RAIDb level.

Parameters:
vdb - the virtual database this load balancer belongs to.
Throws:
java.sql.SQLException - if an error occurs
javax.management.NotCompliantMBeanException - if the MBean is not JMX compliant
Method Detail

chooseBackendForReadRequest

public abstract DatabaseBackend chooseBackendForReadRequest(AbstractRequest request)
                                                     throws java.sql.SQLException
Choose a backend using the implementation specific load balancing algorithm for read request execution.

Parameters:
request - request to execute
Returns:
the chosen backend
Throws:
java.sql.SQLException - if an error occurs

chooseBackendForWriteRequest

public abstract DatabaseBackend chooseBackendForWriteRequest(AbstractWriteRequest request)
                                                      throws java.sql.SQLException
Choose a backend using the implementation specific load balancing algorithm for write request execution.

Parameters:
request - request to execute
Returns:
the chosen backend
Throws:
java.sql.SQLException - if an error occurs

execReadRequest

public ControllerResultSet execReadRequest(SelectRequest request,
                                           MetadataCache metadataCache)
                                    throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Perform a read request. It is up to the implementation to choose to which backend node(s) this request should be sent.

Specified by:
execReadRequest in class AbstractLoadBalancer
Parameters:
request - an SelectRequest
metadataCache - MetadataCache (null if none)
Returns:
the corresponding ControllerResultSet
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execReadRequest(SelectRequest, MetadataCache)

execReadOnlyReadStoredProcedure

public ControllerResultSet execReadOnlyReadStoredProcedure(StoredProcedure proc,
                                                           MetadataCache metadataCache)
                                                    throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Call a read-only stored procedure that returns a ResultSet. The stored procedure will be executed by one node only.

Specified by:
execReadOnlyReadStoredProcedure in class AbstractLoadBalancer
Parameters:
proc - the stored procedure call
metadataCache - MetadataCache (null if none)
Returns:
a ControllerResultSet value
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execReadOnlyReadStoredProcedure(StoredProcedure, MetadataCache)

execReadStoredProcedure

public ControllerResultSet execReadStoredProcedure(StoredProcedure proc,
                                                   MetadataCache metadataCache)
                                            throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Call a stored procedure that returns a ResultSet. This stored procedure can possibly perform writes and will therefore be executed by all nodes.

Specified by:
execReadStoredProcedure in class AbstractLoadBalancer
Parameters:
proc - the stored procedure call
metadataCache - MetadataCache (null if none)
Returns:
a ControllerResultSet value
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execReadStoredProcedure(StoredProcedure, MetadataCache)

execWriteRequest

public int execWriteRequest(AbstractWriteRequest request)
                     throws AllBackendsFailedException,
                            java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Perform a write request. This request should usually be broadcasted to all nodes.

Specified by:
execWriteRequest in class AbstractLoadBalancer
Parameters:
request - an AbstractWriteRequest
Returns:
number of rows affected by the request
Throws:
AllBackendsFailedException - if all backends failed to execute the request
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execWriteRequest(org.objectweb.cjdbc.common.sql.AbstractWriteRequest)

execWriteRequestWithKeys

public ControllerResultSet execWriteRequestWithKeys(AbstractWriteRequest request,
                                                    MetadataCache metadataCache)
                                             throws AllBackendsFailedException,
                                                    java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Perform a write request and return a ResultSet containing the auto generated keys.

Specified by:
execWriteRequestWithKeys in class AbstractLoadBalancer
Parameters:
request - an AbstractWriteRequest
metadataCache - MetadataCache (null if none)
Returns:
auto generated keys
Throws:
AllBackendsFailedException - if all backends failed to execute the request
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execWriteRequestWithKeys(AbstractWriteRequest, MetadataCache)

execWriteStoredProcedure

public int execWriteStoredProcedure(StoredProcedure proc)
                             throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Call a stored procedure that performs an update.

Specified by:
execWriteStoredProcedure in class AbstractLoadBalancer
Parameters:
proc - the stored procedure call
Returns:
number of rows affected
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.execWriteStoredProcedure(org.objectweb.cjdbc.common.sql.StoredProcedure)

executeReadRequestOnBackend

private ControllerResultSet executeReadRequestOnBackend(SelectRequest request,
                                                        DatabaseBackend backend,
                                                        MetadataCache metadataCache)
                                                 throws java.sql.SQLException,
                                                        UnreachableBackendException
Execute a read request on the selected backend.

Parameters:
request - the request to execute
backend - the backend that will execute the request
metadataCache - MetadataCache (null if none)
Returns:
the ControllerResultSet
Throws:
java.sql.SQLException - if an error occurs
UnreachableBackendException

executeReadStoredProcedureOnBackend

private ControllerResultSet executeReadStoredProcedureOnBackend(StoredProcedure proc,
                                                                DatabaseBackend backend,
                                                                MetadataCache metadataCache)
                                                         throws java.sql.SQLException,
                                                                UnreachableBackendException
Execute a stored procedure on the selected backend.

Parameters:
proc - the stored procedure to execute
backend - the backend that will execute the request
metadataCache - MetadataCache (null if none)
Returns:
the ControllerResultSet
Throws:
java.sql.SQLException - if an error occurs
UnreachableBackendException

executeWriteRequestOnBackend

private int executeWriteRequestOnBackend(AbstractWriteRequest request,
                                         DatabaseBackend backend)
                                  throws java.sql.SQLException,
                                         UnreachableBackendException
Execute a write request on the selected backend.

Parameters:
request - the request to execute
backend - the backend that will execute the request
Returns:
the number of modified rows
Throws:
java.sql.SQLException - if an error occurs
UnreachableBackendException

executeWriteRequestWithKeysOnBackend

private ControllerResultSet executeWriteRequestWithKeysOnBackend(AbstractWriteRequest request,
                                                                 DatabaseBackend backend,
                                                                 MetadataCache metadataCache)
                                                          throws java.sql.SQLException,
                                                                 UnreachableBackendException
Execute a write request on the selected backend and return the autogenerated keys.

Parameters:
request - the request to execute
backend - the backend that will execute the request
metadataCache - MetadataCache (null if none)
Returns:
the ResultSet containing the auto-generated keys
Throws:
java.sql.SQLException - if an error occurs
UnreachableBackendException

executeWriteStoredProcedureOnBackend

private int executeWriteStoredProcedureOnBackend(StoredProcedure proc,
                                                 DatabaseBackend backend)
                                          throws java.sql.SQLException,
                                                 UnreachableBackendException
Execute a stored procedure on the selected backend.

Parameters:
proc - the stored procedure to execute
backend - the backend that will execute the request
Returns:
the ResultSet
Throws:
java.sql.SQLException - if an error occurs
UnreachableBackendException

begin

public void begin(TransactionMarkerMetaData tm)
           throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Begin a new transaction.

Specified by:
begin in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.begin(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

commit

public void commit(TransactionMarkerMetaData tm)
            throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Commit a transaction.

Specified by:
commit in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.commit(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

rollback

public void rollback(TransactionMarkerMetaData tm)
              throws java.sql.SQLException
Description copied from class: AbstractLoadBalancer
Rollback a transaction.

Specified by:
rollback in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
Throws:
java.sql.SQLException - if an error occurs
See Also:
AbstractLoadBalancer.rollback(org.objectweb.cjdbc.controller.requestmanager.TransactionMarkerMetaData)

rollback

public void rollback(TransactionMarkerMetaData tm,
                     java.lang.String savepointName)
              throws java.sql.SQLException
Rollback a transaction to a savepoint

Specified by:
rollback in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
savepointName - The name of the savepoint
Throws:
java.sql.SQLException - if an error occurs

releaseSavepoint

public void releaseSavepoint(TransactionMarkerMetaData tm,
                             java.lang.String name)
                      throws java.sql.SQLException
Release a savepoint from a transaction

Specified by:
releaseSavepoint in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
name - The name of the savepoint ro release
Throws:
java.sql.SQLException - if an error occurs

setSavepoint

public void setSavepoint(TransactionMarkerMetaData tm,
                         java.lang.String name)
                  throws java.sql.SQLException
Set a savepoint to a transaction.

Specified by:
setSavepoint in class AbstractLoadBalancer
Parameters:
tm - The transaction marker metadata
name - The name of the new savepoint
Throws:
java.sql.SQLException - if an error occurs

enableBackend

public void enableBackend(DatabaseBackend db,
                          boolean writeEnabled)
                   throws java.sql.SQLException
Enables a backend that was previously disabled. Asks the corresponding connection manager to initialize the connections if needed.

No sanity checks are performed by this function.

Specified by:
enableBackend in class AbstractLoadBalancer
Parameters:
db - the database backend to enable
writeEnabled - True if the backend must be enabled for writes
Throws:
java.sql.SQLException - if an error occurs

disableBackend

public void disableBackend(DatabaseBackend db)
                    throws java.sql.SQLException
Disables a backend that was previously enabled. Asks the corresponding connection manager to finalize the connections if needed.

No sanity checks are performed by this function.

Specified by:
disableBackend in class AbstractLoadBalancer
Parameters:
db - the database backend to disable
Throws:
java.sql.SQLException - if an error occurs

getNumberOfEnabledBackends

public int getNumberOfEnabledBackends()
Description copied from class: AbstractLoadBalancer
Get the number of currently enabled backends. 0 means that no backend is available.

Specified by:
getNumberOfEnabledBackends in class AbstractLoadBalancer
Returns:
number of currently enabled backends
See Also:
AbstractLoadBalancer.getNumberOfEnabledBackends()

getXmlImpl

public java.lang.String getXmlImpl()
Description copied from class: AbstractLoadBalancer
Get information about the Request Load Balancer in xml

Specified by:
getXmlImpl in class AbstractLoadBalancer
Returns:
String containing information, xml formatted
See Also:
AbstractLoadBalancer.getXmlImpl()

getParallelDBXml

public abstract java.lang.String getParallelDBXml()
Return the XML tags of the ParallelDB load balancer implementation.

Returns:
content of ParallelDB xml


Copyright © 2002, 2005 - ObjectWeb Consortium - All Rights Reserved.