org.objectweb.cjdbc.controller.virtualdatabase
Class VirtualDatabase

java.lang.Object
  extended byjavax.management.StandardMBean
      extended byorg.objectweb.cjdbc.controller.jmx.AbstractStandardMBean
          extended byorg.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase
All Implemented Interfaces:
javax.management.DynamicMBean, javax.management.NotificationBroadcaster, javax.management.NotificationEmitter, java.io.Serializable, VirtualDatabaseMBean, XmlComponent
Direct Known Subclasses:
DistributedVirtualDatabase

public class VirtualDatabase
extends AbstractStandardMBean
implements java.io.Serializable, VirtualDatabaseMBean, XmlComponent

A VirtualDatabase represents a database from client point of view and hide the complexity of the cluster distribution to the client. The client always uses the virtual database name and the C-JDBC Controller will use the real connections when an SQL request comes in.

Version:
1.0
Author:
Emmanuel Cecchet , Mathieu Peltier , Nicolas Modrzyk , Vadim Kassin
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.management.StandardMBean
 
Field Summary
private  java.util.ArrayList activeThreads
           
protected  AuthenticationManager authenticationManager
          Authentification manager matching virtual database login/password to backends login/password
protected  java.util.ArrayList backends
          ArrayList of DatabaseBackend objects
private  AbstractBlobFilter blobFilter
          The filter used to store blobs in the database
static int CHECK_BACKEND_DISABLE
          Use for method getAndCheck
static int CHECK_BACKEND_ENABLE
          Use for method getAndCheck
(package private)  Controller controller
          The controller we belong to
protected  int currentNbOfThreads
          Current number of worker threads
private  java.lang.String databaseProductNames
          Comma separated list of database product names (one instance per name)
private  int idleThreads
           
 Trace logger
          Virtual database logger
protected  int maxNbOfConnections
          Maximum number of concurrent accepted for this virtual database
protected  int maxNbOfThreads
          Maximum number of worker threads to fork
protected  long maxThreadIdleTime
          Maximum time a worker thread can remain idle before dying
protected  VirtualDatabaseMetaData metadata
          Virtual Database MetaData
protected  int minNbOfThreads
          Minimum number of worker threads to keep in the pool if poolConnectionThreads is true
protected  java.lang.String name
          Virtual database name
static int NO_CHECK_BACKEND
          Use for method getAndCheck
private  java.util.ArrayList pendingConnections
           
protected  boolean poolConnectionThreads
          If false one worker thread is forked per connection else
protected  Trace requestLogger
           
protected  RequestManager requestManager
          The request manager to use for this database
protected  ReadPrioritaryFIFOWriteLock rwLock
          Read/Write lock for backend list
private  boolean shuttingDown
          Marker to see if the database is shutting down
private  SQLMonitoring sqlMonitor
           
private  int sqlShortFormLength
          Short form of SQL statements to include in traces and exceptions
 
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_DB, XML_VERSION
 
Constructor Summary
VirtualDatabase(Controller controller, java.lang.String name, int maxConnections, boolean pool, int minThreads, int maxThreads, long maxThreadIdleTime, int sqlShortFormLength, AbstractBlobFilter blobFilter)
          Creates a new VirtualDatabase instance.
 
Method Summary
 void abort(long transactionId)
          Abort a transaction that has been started but in which no query was executed.
 void acquireReadLockBackendLists()
          Acquires a read lock on the backend lists (both enabled and disabled backends).
 void addBackend(DatabaseBackend db)
          Add a backend to this virtual database.
 void addBackend(DatabaseBackend db, boolean checkForCompliance)
          Add a backend to this virtual database.
 void addCurrentNbOfThread()
          Adds one to currentNbOfThreads.
 void addIdleThread()
          Method add an idle thread.
 void backupBackendWithCheckpoint(java.lang.String backendName, java.lang.String checkpointName, java.util.ArrayList tables)
          Create a back up of a specific backend Note the backend will be disabled during backup, and will be put back to its previous state after backup.
 long begin(java.lang.String login)
          Begins a new transaction and returns the corresponding transaction identifier.
 void callBackupManager(boolean backup, java.lang.String backendName, java.lang.String checkpoint, java.util.ArrayList tables, boolean enableAfter, BackupListener listener)
          Call the backup manager on the given backend.
 boolean checkAdminAuthentication(java.lang.String adminLogin, java.lang.String adminPassword)
          Checks if a given admin login/password is ok.
 boolean checkUserAuthentication(java.lang.String virtualLogin, java.lang.String virtualPassword)
          Checks if a given virtual login/password is ok.
 void cleanMonitoringData()
          Clean data collected by the current monitoring system, to avoid memory problems.
 void commit(long transactionId)
          Commits a transaction given its id.
 void disableAllBackend()
          Prepare this virtual database for shutdown.
 void disableAllBackendForCheckpoint(java.lang.String checkpoint)
          Disable all backends and store a checkpoint
 void disableBackend(java.lang.String backendName)
          Disables a backend that is currently enabled on this virtual database (without further check).
 void disableBackendForCheckpoint(java.lang.String backendName, java.lang.String checkpointName)
          Disables a backend once all the pending write queries are executed.
 void enableAllBackend()
          Prepare this virtual database for startup.
 void enableAllBackend(java.lang.String checkpoint)
          Prepare this virtual database for startup.
 void enableAllBackendsFromRecovery(java.lang.String checkpoint)
          This emulates the method enableAllBackend() except it tries to get previous backend states from the recovery log, and enable only the backends with a recorded state of enable.
 void enableBackend(java.lang.String backendName)
          Enables a backend that has been previously added to this virtual database and that is in the disabled state.
 void enableBackendFromCheckpoint(java.lang.String backendName, java.lang.String checkpointName)
          Plays all the queries since the given checkpoint and enables the backend when it is completely synchronized.
 void enableBackendFromCheckpoint(java.lang.String backendName, java.lang.String checkpointName, boolean threaded)
          Plays all the queries since the given checkpoint and enables the backend when it is completely synchronized.
 void enableBackendFromLastCheckpoint(java.lang.String backendName)
          Enable the given backend from its last known checkpoint
 boolean equals(java.lang.Object other)
          Two virtual databases are equal if they have the same name and group.
 ControllerResultSet execReadRequest(SelectRequest request)
          Performs a read request and returns the reply.
 ControllerResultSet execReadStoredProcedure(StoredProcedure proc)
          Call a stored procedure that returns a ResultSet.
 int execWriteRequest(AbstractWriteRequest request)
          Performs a write request and returns the number of rows affected.
 ControllerResultSet execWriteRequestWithKeys(AbstractWriteRequest request)
          Performs a write request and returns the auto generated keys.
protected  int execWriteStoredProcedure(StoredProcedure proc)
          Call a stored procedure that performs an update.
 java.util.ArrayList getActiveThreads()
          Returns the activeThreads.
 java.util.ArrayList getAllBackendNames()
           
 DatabaseBackend getAndCheckBackend(java.lang.String backendName, int testEnable)
          Find the DatabaseBackend corresponding to the given backend name and check if it is possible to disable this backend.
 java.lang.String getAssociatedString()
          Allow to retrieve internationalization description on mbeans as well
 AuthenticationManager getAuthenticationManager()
          Returns the authentication manager of this virtual database.
 java.lang.String getBackendInformation(java.lang.String backendName)
          Return information about the specified backend.
 java.util.ArrayList getBackends()
          Return the list of all backends
 java.lang.String getBackendSchema(java.lang.String backendName)
          The getXml() method does not return the schema if it is not static anymore, to avoid confusion between static and dynamic schema.
 java.lang.String getBackendState(java.lang.String backendName)
          Return the state of a given database backend
 AbstractBlobFilter getBlobFilter()
          Returns the blobFilter associated to this virtual database
 int getCurrentNbOfThreads()
          Returns the currentNbOfThreads.
 java.lang.String getDatabaseName()
          Gets the virtual database name to be used by the client (C-JDBC driver) This method should be used for local references only (it is faster).
 java.lang.String getDatabaseProductName()
           
 DatabaseSchema getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames()
          Get the current database schema from merging the schemas of all active backends.
protected  java.lang.String getDistributionXml()
          Get the XML dump of the Distribution element if any.
 int getIdleThreads()
          Returns the number of idle zorker threads.
 int getMaxNbOfConnections()
          Returns the maxNbOfConnections.
 int getMaxNbOfThreads()
          Returns the maxNbOfThreads.
 long getMaxThreadIdleTime()
          Returns the maxThreadIdleTime.
 VirtualDatabaseMetaData getMetaData()
           
 int getMinNbOfThreads()
          Returns the minNbOfThreads.
 java.lang.String getName()
          Gets the virtual database name to be used by the client (C-JDBC driver)
 java.util.ArrayList getPendingConnections()
          Returns the pendingConnections.
 RequestManager getRequestManager()
          Gets the request manager associated to this database.
 SQLMonitoring getSQLMonitor()
          Returns the current SQL monitor
 int getSQLShortFormLength()
          Return the sql short form length to use when reporting an error.
 java.lang.String getVirtualDatabaseName()
          Gets the virtual database name to be used by the client (C-JDBC driver)
 java.lang.String getXml()
          Retrieves this VirtualDatabase object in xml format
 boolean hasRecoveryLog()
          Indicate whether there is a recovery log defined for this virtual database
 boolean isDistributed()
          Is this virtual database distributed ?
 boolean isPoolConnectionThreads()
          Returns the poolConnectionThreads.
 void releaseReadLockBackendLists()
          Releases the read lock on the backend lists (both enabled and disabled backends).
 void removeBackend(DatabaseBackend db)
          Remove a backend from this virtual database.
 void removeBackend(java.lang.String backend)
          Remove a backend from the virtual database list.
 void removeCheckpoint(java.lang.String checkpointName)
          Remove a checkpoint from the recovery log of this virtual database
 void removeCurrentNbOfThread()
          Substract one to currentNbOfThreads.
 void removeIdleThread()
          Remove an idle thread.
 void replicateBackend(java.lang.String backendName, java.lang.String newBackendName, java.util.Map parameters)
          Add an additionnal backend to the virtual database with connection managers identical to the backend replicated.
 void restoreBackendFromBackupCheckpoint(java.lang.String databaseBackendName, java.lang.String checkpointName)
          Recopy all the data of a previous dump recorded by octopus into the named backend.
 java.lang.String[][] retrieveBackendsData()
          Retrieves an array of data on the backends for this virtual database
 void rollback(long transactionId)
          Rollbacks a transaction given its id.
 void setAuthenticationManager(AuthenticationManager authenticationManager)
          Sets the authentication manager for this virtual database.
 void setBackendLastKnownCheckpoint(java.lang.String backendName, java.lang.String checkpoint)
          Sets the last known checkpoint of a backend.
 void setBlobFilter(AbstractBlobFilter filter)
          Sets the blob encoder
 void setDatabaseSchema(DatabaseSchema schema, boolean isStatic)
          Sets a new database schema for this database if no one exist or merge the given schema to the existing one.
 void setMaxNbOfConnections(int maxNbOfConnections)
          Sets the maxNbOfConnections.
 void setMaxNbOfThreads(int maxNbOfThreads)
          Sets the maxNbOfThreads.
 void setMaxThreadIdleTime(long maxThreadIdleTime)
          Sets the maxThreadIdleTime.
 void setMinNbOfThreads(int minNbOfThreads)
          Sets the minNbOfThreads.
 void setMonitoringToActive(boolean active)
          If a monitoring section exists, we can set the monitoring on or off by calling this method.
 void setPoolConnectionThreads(boolean poolConnectionThreads)
          Sets the poolConnectionThreads.
 void setRequestManager(RequestManager requestManager)
          Sets a new request manager for this database.
 void setSQLMonitor(SQLMonitoring sqlMonitor)
          Sets a new SQL Monitor
 void shutdown()
          Shutdown this virtual database in fast mode, disconnect clients
 void shutdown(int level)
          Shutdown this virtual database.
 void storeBackendsInfo()
          Write the checkpoints for all backends on the recovery log
 void transferBackend(java.lang.String backend, java.lang.String controllerDestination)
          Transfer the backend to the destinated controller.
 java.util.ArrayList viewAllBackendNames()
          Get the name of all DatabaseBackend names.
 java.util.ArrayList viewAllClientNames()
          Get all users connected to that database
 java.lang.String[] viewBackendInformation(java.lang.String backendName)
          Returns an array of information on this backend The method above is not used at the moment ...
 java.util.ArrayList viewCheckpointNames()
          Returns an array of names of all the checkpoint available in the recovery log of this virtual dabase.
 java.lang.String[] viewControllerList()
          Return the list of controllers defining this virtual database.
 java.util.Hashtable viewGroupBackends()
          Returns a mapping of controller jmx names with their backends Note the method is only useful in distributed environment
 java.lang.String viewOwningController()
          Name of the controller owning this virtual database
 
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, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

name

protected java.lang.String name
Virtual database name


authenticationManager

protected AuthenticationManager authenticationManager
Authentification manager matching virtual database login/password to backends login/password


backends

protected java.util.ArrayList backends
ArrayList of DatabaseBackend objects


rwLock

protected ReadPrioritaryFIFOWriteLock rwLock
Read/Write lock for backend list


requestManager

protected RequestManager requestManager
The request manager to use for this database


logger

public Trace logger
Virtual database logger


requestLogger

protected Trace requestLogger

activeThreads

private java.util.ArrayList activeThreads

idleThreads

private int idleThreads

pendingConnections

private java.util.ArrayList pendingConnections

maxNbOfConnections

protected int maxNbOfConnections
Maximum number of concurrent accepted for this virtual database


poolConnectionThreads

protected boolean poolConnectionThreads
If false one worker thread is forked per connection else


maxThreadIdleTime

protected long maxThreadIdleTime
Maximum time a worker thread can remain idle before dying


minNbOfThreads

protected int minNbOfThreads
Minimum number of worker threads to keep in the pool if poolConnectionThreads is true


maxNbOfThreads

protected int maxNbOfThreads
Maximum number of worker threads to fork


currentNbOfThreads

protected int currentNbOfThreads
Current number of worker threads


metadata

protected VirtualDatabaseMetaData metadata
Virtual Database MetaData


sqlMonitor

private SQLMonitoring sqlMonitor

CHECK_BACKEND_ENABLE

public static final int CHECK_BACKEND_ENABLE
Use for method getAndCheck

See Also:
Constant Field Values

CHECK_BACKEND_DISABLE

public static final int CHECK_BACKEND_DISABLE
Use for method getAndCheck

See Also:
Constant Field Values

NO_CHECK_BACKEND

public static final int NO_CHECK_BACKEND
Use for method getAndCheck

See Also:
Constant Field Values

sqlShortFormLength

private int sqlShortFormLength
Short form of SQL statements to include in traces and exceptions


blobFilter

private AbstractBlobFilter blobFilter
The filter used to store blobs in the database


controller

Controller controller
The controller we belong to


databaseProductNames

private java.lang.String databaseProductNames
Comma separated list of database product names (one instance per name)


shuttingDown

private boolean shuttingDown
Marker to see if the database is shutting down

Constructor Detail

VirtualDatabase

public VirtualDatabase(Controller controller,
                       java.lang.String name,
                       int maxConnections,
                       boolean pool,
                       int minThreads,
                       int maxThreads,
                       long maxThreadIdleTime,
                       int sqlShortFormLength,
                       AbstractBlobFilter blobFilter)
                throws javax.management.NotCompliantMBeanException,
                       JmxException
Creates a new VirtualDatabase instance.

Parameters:
name - the virtual database name.
maxConnections - maximum number of concurrent connections.
pool - should we use a pool of threads for handling connections?
minThreads - minimum number of threads in the pool
maxThreads - maximum number of threads in the pool
maxThreadIdleTime - maximum time a thread can remain idle before being removed from the pool.
sqlShortFormLength - maximum number of characters of an SQL statement to diplay in traces or exceptions
blobFilter - encoding method for blobs
controller - the controller we belong to
Throws:
javax.management.NotCompliantMBeanException - in case the bean does not comply with jmx
JmxException - could not register mbean
Method Detail

getAssociatedString

public java.lang.String getAssociatedString()
Description copied from class: AbstractStandardMBean
Allow to retrieve internationalization description on mbeans as well

Specified by:
getAssociatedString in class AbstractStandardMBean
Returns:
part of the key to look for in the translation file.
See Also:
AbstractStandardMBean.getAssociatedString()

isDistributed

public boolean isDistributed()
Is this virtual database distributed ?

Specified by:
isDistributed in interface VirtualDatabaseMBean
Returns:
false

checkUserAuthentication

public boolean checkUserAuthentication(java.lang.String virtualLogin,
                                       java.lang.String virtualPassword)
Checks if a given virtual login/password is ok.

Parameters:
virtualLogin - the virtual user login
virtualPassword - the virtual user password
Returns:
true if the login/password is known from the AuthenticationManager. Returns false if no AuthenticationManager is defined.

checkAdminAuthentication

public boolean checkAdminAuthentication(java.lang.String adminLogin,
                                        java.lang.String adminPassword)
Checks if a given admin login/password is ok.

Specified by:
checkAdminAuthentication in interface VirtualDatabaseMBean
Parameters:
adminLogin - admin user login
adminPassword - admin user password
Returns:
true if the login/password is known from the AuthenticationManager. Returns false if no AuthenticationManager is defined.

execReadRequest

public ControllerResultSet execReadRequest(SelectRequest request)
                                    throws java.sql.SQLException
Performs a read request and returns the reply.

Parameters:
request - the request to execute
Returns:
a ControllerResultSet value
Throws:
java.sql.SQLException - if the request fails

execWriteRequest

public int execWriteRequest(AbstractWriteRequest request)
                     throws java.sql.SQLException
Performs a write request and returns the number of rows affected.

Parameters:
request - the request to execute
Returns:
number of rows affected
Throws:
java.sql.SQLException - if the request fails

execWriteRequestWithKeys

public ControllerResultSet execWriteRequestWithKeys(AbstractWriteRequest request)
                                             throws java.sql.SQLException
Performs a write request and returns the auto generated keys.

Parameters:
request - the request to execute
Returns:
auto generated keys
Throws:
java.sql.SQLException - if the request fails

execReadStoredProcedure

public ControllerResultSet execReadStoredProcedure(StoredProcedure proc)
                                            throws java.sql.SQLException
Call a stored procedure that returns a ResultSet.

Parameters:
proc - the stored procedure call
Returns:
a java.sql.ResultSet value
Throws:
java.sql.SQLException - if an error occurs

execWriteStoredProcedure

protected int execWriteStoredProcedure(StoredProcedure proc)
                                throws java.sql.SQLException
Call a stored procedure that performs an update.

Parameters:
proc - the stored procedure call
Returns:
number of rows affected
Throws:
java.sql.SQLException - if an error occurs

begin

public long begin(java.lang.String login)
           throws java.sql.SQLException
Begins a new transaction and returns the corresponding transaction identifier. This method is called from the driver when Connection.setAutoCommit(boolean)is called with false argument.

Parameters:
login - the login used by the connection
Returns:
an unique transaction identifier
Throws:
java.sql.SQLException - if an error occurs

abort

public void abort(long transactionId)
           throws java.sql.SQLException
Abort a transaction that has been started but in which no query was executed. As we use lazy transaction begin, there is no need to rollback such transaction but just to cleanup the metadata associated with this not effectively started transaction.

Parameters:
transactionId - id of the transaction to abort
Throws:
java.sql.SQLException - if an error occurs

commit

public void commit(long transactionId)
            throws java.sql.SQLException
Commits a transaction given its id.

Parameters:
transactionId - the transaction id
Throws:
java.sql.SQLException - if an error occurs

rollback

public void rollback(long transactionId)
              throws java.sql.SQLException
Rollbacks a transaction given its id.

Parameters:
transactionId - the transaction id
Throws:
java.sql.SQLException - if an error occurs

backupBackendWithCheckpoint

public void backupBackendWithCheckpoint(java.lang.String backendName,
                                        java.lang.String checkpointName,
                                        java.util.ArrayList tables)
                                 throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Create a back up of a specific backend Note the backend will be disabled during backup, and will be put back to its previous state after backup.

Specified by:
backupBackendWithCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - to backup
checkpointName - to associate this backup with
tables - to copy or null if copy all
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.backupBackendWithCheckpoint(String, String, ArrayList)

callBackupManager

public void callBackupManager(boolean backup,
                              java.lang.String backendName,
                              java.lang.String checkpoint,
                              java.util.ArrayList tables,
                              boolean enableAfter,
                              BackupListener listener)
                       throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Call the backup manager on the given backend. Start a fire and forget thread for backup or recovery. The only two ways to get the results is to wait for jmx notifications, or the listener given as a parameter.

Specified by:
callBackupManager in interface VirtualDatabaseMBean
Parameters:
backup - true if this is a backup, false if this is a restore process
backendName - the name of the backend
checkpoint - the name of the checkpoint associated with the process
tables - the tables to consider while performing the copy
enableAfter - should be enable the backend automatically after
listener - callback object to notify of the end of the process
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.callBackupManager(boolean, String, String, ArrayList, boolean, BackupListener)

addBackend

public void addBackend(DatabaseBackend db)
                throws VirtualDatabaseException
Add a backend to this virtual database.

Parameters:
db - the database backend to add
Throws:
VirtualDatabaseException - if an error occurs

addBackend

public void addBackend(DatabaseBackend db,
                       boolean checkForCompliance)
                throws VirtualDatabaseException
Add a backend to this virtual database.

Parameters:
db - the database backend to add
checkForCompliance - should load the driver ?
Throws:
VirtualDatabaseException - if an error occurs

removeCheckpoint

public void removeCheckpoint(java.lang.String checkpointName)
                      throws VirtualDatabaseException
Remove a checkpoint from the recovery log of this virtual database

Specified by:
removeCheckpoint in interface VirtualDatabaseMBean
Parameters:
checkpointName - to remove
Throws:
VirtualDatabaseException - if an error occurs

removeBackend

public void removeBackend(java.lang.String backend)
                   throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Remove a backend from the virtual database list. Do not check whether it is enabled or not, and do not perform backup operation

Specified by:
removeBackend in interface VirtualDatabaseMBean
Parameters:
backend - the name of the backend to remove
Throws:
VirtualDatabaseException - if the backend does not exist
See Also:
VirtualDatabaseMBean.removeBackend(java.lang.String)

removeBackend

public void removeBackend(DatabaseBackend db)
                   throws VirtualDatabaseException
Remove a backend from this virtual database.

Parameters:
db - the database backend to remove
Throws:
VirtualDatabaseException - if an error occurs

viewCheckpointNames

public java.util.ArrayList viewCheckpointNames()
Description copied from interface: VirtualDatabaseMBean
Returns an array of names of all the checkpoint available in the recovery log of this virtual dabase.

Specified by:
viewCheckpointNames in interface VirtualDatabaseMBean
Returns:
ArrayList of checkpoint names. Can be empty
See Also:
VirtualDatabaseMBean.viewCheckpointNames()

enableBackend

public void enableBackend(java.lang.String backendName)
                   throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Enables a backend that has been previously added to this virtual database and that is in the disabled state. The backend is enabled without further check.

Specified by:
enableBackend in interface VirtualDatabaseMBean
Parameters:
backendName - The database backend logical name to enable
Throws:
VirtualDatabaseException - in case of communication-related error
See Also:
VirtualDatabaseMBean.enableBackend(String)

enableBackendFromCheckpoint

public void enableBackendFromCheckpoint(java.lang.String backendName,
                                        java.lang.String checkpointName)
                                 throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Plays all the queries since the given checkpoint and enables the backend when it is completely synchronized. The backend must have been previously added to this virtual database and be in the disabled state

Specified by:
enableBackendFromCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - The database backend logical name to enable
checkpointName - the checkpoint name to restart from
Throws:
VirtualDatabaseException - in case of communication-related error
See Also:
VirtualDatabaseMBean.enableBackendFromCheckpoint(String, String)

enableBackendFromLastCheckpoint

public void enableBackendFromLastCheckpoint(java.lang.String backendName)
                                     throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Enable the given backend from its last known checkpoint

Specified by:
enableBackendFromLastCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - the name of the backend to enable
Throws:
VirtualDatabaseException - if enable failed, or if there is no last known checkpoint
See Also:
VirtualDatabaseMBean.enableBackendFromLastCheckpoint(java.lang.String)

getAndCheckBackend

public DatabaseBackend getAndCheckBackend(java.lang.String backendName,
                                          int testEnable)
                                   throws VirtualDatabaseException
Find the DatabaseBackend corresponding to the given backend name and check if it is possible to disable this backend. In the case enable, this method also updates the virtual database schema by merging it with the one provided by this backend.

Parameters:
backendName - backend to look for
testEnable - NO_CHECK_BACKEND no check is done, if CHECK_BACKEND_DISABLE check for disable, if CHECK_BACKEND_ENABLE check for enable, else do not check
Returns:
the backend to disable
Throws:
VirtualDatabaseException - if an error occurs

disableBackend

public void disableBackend(java.lang.String backendName)
                    throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Disables a backend that is currently enabled on this virtual database (without further check).

Specified by:
disableBackend in interface VirtualDatabaseMBean
Parameters:
backendName - The database backend logical name to enable
Throws:
VirtualDatabaseException - in case of communication-related error
See Also:
VirtualDatabaseMBean.disableBackend(String)

disableAllBackend

public void disableAllBackend()
                       throws VirtualDatabaseException
Prepare this virtual database for shutdown. This turns off all the backends by cutting communication from this database. This does not prevents other virtual database to use shared backends. This doesn't create checkpoints either.

Specified by:
disableAllBackend in interface VirtualDatabaseMBean
Throws:
VirtualDatabaseException - if an error occurs

enableAllBackend

public void enableAllBackend()
                      throws VirtualDatabaseException
Prepare this virtual database for startup. This turns on all the backends

Specified by:
enableAllBackend in interface VirtualDatabaseMBean
Throws:
VirtualDatabaseException - if fails

enableAllBackend

public void enableAllBackend(java.lang.String checkpoint)
                      throws VirtualDatabaseException
Prepare this virtual database for startup. This turns on all the backends

Specified by:
enableAllBackend in interface VirtualDatabaseMBean
Parameters:
checkpoint - checkpoint for recovery log
Throws:
VirtualDatabaseException - if fails

enableAllBackendsFromRecovery

public void enableAllBackendsFromRecovery(java.lang.String checkpoint)
                                   throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
This emulates the method enableAllBackend() except it tries to get previous backend states from the recovery log, and enable only the backends with a recorded state of enable.

Specified by:
enableAllBackendsFromRecovery in interface VirtualDatabaseMBean
Parameters:
checkpoint - the checkpoint for the recovery log
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.enableAllBackendsFromRecovery(java.lang.String)

disableBackendForCheckpoint

public void disableBackendForCheckpoint(java.lang.String backendName,
                                        java.lang.String checkpointName)
                                 throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Disables a backend once all the pending write queries are executed. A checkpoint is inserted in the recovery log. The backend must belong to this virtual database and be in the enabled state.

Specified by:
disableBackendForCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - The database backend logical name to disable
checkpointName - the checkpoint name to store
Throws:
VirtualDatabaseException - in case of communication-related error
See Also:
VirtualDatabaseMBean.disableBackendForCheckpoint(String, String)

acquireReadLockBackendLists

public final void acquireReadLockBackendLists()
                                       throws java.lang.InterruptedException
Acquires a read lock on the backend lists (both enabled and disabled backends). This should be called prior traversing the backend ArrayList.

Throws:
java.lang.InterruptedException - if an error occurs

releaseReadLockBackendLists

public final void releaseReadLockBackendLists()
Releases the read lock on the backend lists (both enabled and disabled backends). This should be called after traversing the backend ArrayList.


getAuthenticationManager

public AuthenticationManager getAuthenticationManager()
Returns the authentication manager of this virtual database.

Returns:
an AuthenticationManager instance

setAuthenticationManager

public void setAuthenticationManager(AuthenticationManager authenticationManager)
Sets the authentication manager for this virtual database.

Parameters:
authenticationManager - the AuthenticationManager to set

getBackends

public java.util.ArrayList getBackends()
Return the list of all backends

Returns:
ArrayList of DatabaseBackend Objects

getAllBackendNames

public java.util.ArrayList getAllBackendNames()
                                       throws VirtualDatabaseException
Throws:
VirtualDatabaseException
See Also:
VirtualDatabaseMBean.viewAllBackendNames()

getDatabaseName

public java.lang.String getDatabaseName()
Gets the virtual database name to be used by the client (C-JDBC driver) This method should be used for local references only (it is faster). For remote RMI calls, use getVirtualDatabaseName().

Returns:
the virtual database name
See Also:
getVirtualDatabaseName()

getDatabaseProductName

public java.lang.String getDatabaseProductName()
See Also:
DatabaseMetaData.getDatabaseProductName()

getSQLShortFormLength

public int getSQLShortFormLength()
Return the sql short form length to use when reporting an error.

Returns:
sql short form length
See Also:
AbstractRequest.getSQLShortForm(int)

getMetaData

public VirtualDatabaseMetaData getMetaData()
Returns:
associated metada for this database
See Also:
DatabaseMetaData

getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames

public DatabaseSchema getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames()
                                                                                 throws java.sql.SQLException
Get the current database schema from merging the schemas of all active backends. This is needed when a backend is disabled.

Returns:
the current database schema dynamically gathered
Throws:
java.sql.SQLException - if an error occurs

setDatabaseSchema

public void setDatabaseSchema(DatabaseSchema schema,
                              boolean isStatic)
Sets a new database schema for this database if no one exist or merge the given schema to the existing one. A static schema can only be replaced by another static schema.

Parameters:
schema - the new database shema
isStatic - true if the schema should be static

getRequestManager

public RequestManager getRequestManager()
Gets the request manager associated to this database.

Returns:
a RequestManager instance

setRequestManager

public void setRequestManager(RequestManager requestManager)
Sets a new request manager for this database.

Parameters:
requestManager - the new request manager.

getVirtualDatabaseName

public java.lang.String getVirtualDatabaseName()
Gets the virtual database name to be used by the client (C-JDBC driver)

Returns:
the virtual database name

getSQLMonitor

public SQLMonitoring getSQLMonitor()
Returns the current SQL monitor

Returns:
a SQLMonitoring instance or null if no monitor is defined

setSQLMonitor

public void setSQLMonitor(SQLMonitoring sqlMonitor)
Sets a new SQL Monitor

Parameters:
sqlMonitor - the new SQL monitor

setMonitoringToActive

public void setMonitoringToActive(boolean active)
                           throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
If a monitoring section exists, we can set the monitoring on or off by calling this method. If monitoring is not defined we throw an exception.

Specified by:
setMonitoringToActive in interface VirtualDatabaseMBean
Parameters:
active - should set the monitor to on or off
Throws:
VirtualDatabaseException - if there is no monitor.
See Also:
VirtualDatabaseMBean.setMonitoringToActive(boolean)

cleanMonitoringData

public void cleanMonitoringData()
                         throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Clean data collected by the current monitoring system, to avoid memory problems. Monitor does not have to be active.

Specified by:
cleanMonitoringData in interface VirtualDatabaseMBean
Throws:
VirtualDatabaseException - if there is no monitor.
See Also:
VirtualDatabaseMBean.cleanMonitoringData()

equals

public boolean equals(java.lang.Object other)
Two virtual databases are equal if they have the same name and group.

Parameters:
other - the object to compare with
Returns:
true if the two virtual databases are equals

getXml

public java.lang.String getXml()
Retrieves this VirtualDatabase object in xml format

Specified by:
getXml in interface XmlComponent
Returns:
xml formatted string that conforms to c-jdbc.dtd

getDistributionXml

protected java.lang.String getDistributionXml()
Get the XML dump of the Distribution element if any.

Returns:
""

getBackendInformation

public java.lang.String getBackendInformation(java.lang.String backendName)
                                       throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Return information about the specified backend.

Specified by:
getBackendInformation in interface VirtualDatabaseMBean
Parameters:
backendName - the backend logical name
Returns:
String the backend information
Throws:
VirtualDatabaseException - if an error occurs
See Also:
VirtualDatabaseMBean.getBackendInformation(String)

getName

public java.lang.String getName()
Gets the virtual database name to be used by the client (C-JDBC driver)

Specified by:
getName in interface VirtualDatabaseMBean
Returns:
the virtual database name

getCurrentNbOfThreads

public int getCurrentNbOfThreads()
Description copied from interface: VirtualDatabaseMBean
Returns the currentNbOfThreads.

Specified by:
getCurrentNbOfThreads in interface VirtualDatabaseMBean
Returns:
int
See Also:
VirtualDatabaseMBean.getCurrentNbOfThreads()

addCurrentNbOfThread

public void addCurrentNbOfThread()
Adds one to currentNbOfThreads. Warning! This method is not synchronized.


removeCurrentNbOfThread

public void removeCurrentNbOfThread()
Substract one to currentNbOfThreads. Warning! This method is not synchronized.


getMinNbOfThreads

public int getMinNbOfThreads()
Returns the minNbOfThreads.

Returns:
int

isPoolConnectionThreads

public boolean isPoolConnectionThreads()
Returns the poolConnectionThreads.

Returns:
boolean

setMinNbOfThreads

public void setMinNbOfThreads(int minNbOfThreads)
Sets the minNbOfThreads.

Parameters:
minNbOfThreads - The minNbOfThreads to set

setPoolConnectionThreads

public void setPoolConnectionThreads(boolean poolConnectionThreads)
Sets the poolConnectionThreads.

Parameters:
poolConnectionThreads - The poolConnectionThreads to set

getMaxThreadIdleTime

public long getMaxThreadIdleTime()
Returns the maxThreadIdleTime.

Returns:
long

setMaxThreadIdleTime

public void setMaxThreadIdleTime(long maxThreadIdleTime)
Sets the maxThreadIdleTime.

Parameters:
maxThreadIdleTime - The maxThreadIdleTime to set

getMaxNbOfConnections

public int getMaxNbOfConnections()
Returns the maxNbOfConnections.

Returns:
int

getMaxNbOfThreads

public int getMaxNbOfThreads()
Returns the maxNbOfThreads.

Returns:
int

getPendingConnections

public java.util.ArrayList getPendingConnections()
Returns the pendingConnections.

Returns:
ArrayList

setMaxNbOfConnections

public void setMaxNbOfConnections(int maxNbOfConnections)
Sets the maxNbOfConnections.

Parameters:
maxNbOfConnections - The maxNbOfConnections to set

setMaxNbOfThreads

public void setMaxNbOfThreads(int maxNbOfThreads)
Sets the maxNbOfThreads.

Parameters:
maxNbOfThreads - The maxNbOfThreads to set

getActiveThreads

public java.util.ArrayList getActiveThreads()
Returns the activeThreads.

Returns:
ArrayList

viewBackendInformation

public java.lang.String[] viewBackendInformation(java.lang.String backendName)
                                          throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Returns an array of information on this backend The method above is not used at the moment ... This one is by the GUI.

Specified by:
viewBackendInformation in interface VirtualDatabaseMBean
Parameters:
backendName - the name of the backend
Returns:
String[]
Throws:
VirtualDatabaseException - if an error occurs
See Also:
VirtualDatabaseMBean.viewBackendInformation(java.lang.String)

addIdleThread

public void addIdleThread()
Method add an idle thread. Warning! This method must be called in a synchronized block on activeThreads.


removeIdleThread

public void removeIdleThread()
Remove an idle thread. Warning! This method must be called in a synchronized block on activeThreads.


getIdleThreads

public int getIdleThreads()
Returns the number of idle zorker threads. Warning! This method must be called in a synchronized block on activeThreads.

Returns:
int

viewAllBackendNames

public java.util.ArrayList viewAllBackendNames()
                                        throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Get the name of all DatabaseBackend names.

Specified by:
viewAllBackendNames in interface VirtualDatabaseMBean
Returns:
ArrayList ArrayList of String representing database backend names
Throws:
VirtualDatabaseException - if an error occurs
See Also:
VirtualDatabaseMBean.viewAllBackendNames()

viewAllClientNames

public java.util.ArrayList viewAllClientNames()
Get all users connected to that database

Returns:
an ArrayList of strings containing the clients username

disableAllBackendForCheckpoint

public void disableAllBackendForCheckpoint(java.lang.String checkpoint)
                                    throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Disable all backends and store a checkpoint

Specified by:
disableAllBackendForCheckpoint in interface VirtualDatabaseMBean
Parameters:
checkpoint - the name of the checkpoitn
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.disableAllBackendForCheckpoint(java.lang.String)

shutdown

public void shutdown(int level)
Shutdown this virtual database. Finish all threads and stop connection to backends

Parameters:
level - Smart or Fast

shutdown

public void shutdown()
              throws VirtualDatabaseException
Shutdown this virtual database in fast mode, disconnect clients

Specified by:
shutdown in interface VirtualDatabaseMBean
Throws:
VirtualDatabaseException - if fails

setBlobFilter

public void setBlobFilter(AbstractBlobFilter filter)
Description copied from interface: VirtualDatabaseMBean
Sets the blob encoder

Specified by:
setBlobFilter in interface VirtualDatabaseMBean
Parameters:
filter - blob encode
See Also:
VirtualDatabaseMBean.setBlobFilter(org.objectweb.cjdbc.common.sql.filters.AbstractBlobFilter)

getBlobFilter

public AbstractBlobFilter getBlobFilter()
Description copied from interface: VirtualDatabaseMBean
Returns the blobFilter associated to this virtual database

Specified by:
getBlobFilter in interface VirtualDatabaseMBean
Returns:
Returns the blobFilter.
See Also:
VirtualDatabaseMBean.getBlobFilter()

setBackendLastKnownCheckpoint

public void setBackendLastKnownCheckpoint(java.lang.String backendName,
                                          java.lang.String checkpoint)
                                   throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Sets the last known checkpoint of a backend. This will also update the value in the recovery log

Specified by:
setBackendLastKnownCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - backend
checkpoint - checkpoint
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.setBackendLastKnownCheckpoint(java.lang.String, java.lang.String)

getBackendState

public java.lang.String getBackendState(java.lang.String backendName)
                                 throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Return the state of a given database backend

Specified by:
getBackendState in interface VirtualDatabaseMBean
Parameters:
backendName - the name of the backend
Returns:
String description of the database backend
Throws:
VirtualDatabaseException - if fails
See Also:
VirtualDatabaseMBean.getBackendState(java.lang.String)

viewOwningController

public java.lang.String viewOwningController()
Description copied from interface: VirtualDatabaseMBean
Name of the controller owning this virtual database

Specified by:
viewOwningController in interface VirtualDatabaseMBean
Returns:
url of the controller
See Also:
VirtualDatabaseMBean.viewOwningController()

restoreBackendFromBackupCheckpoint

public void restoreBackendFromBackupCheckpoint(java.lang.String databaseBackendName,
                                               java.lang.String checkpointName)
                                        throws VirtualDatabaseException,
                                               BackupException,
                                               OctopusException
Description copied from interface: VirtualDatabaseMBean
Recopy all the data of a previous dump recorded by octopus into the named backend. This disables the backend and leave it disable after recovery process. The user has to call the enableBackendFromCheckpoint after this.

Specified by:
restoreBackendFromBackupCheckpoint in interface VirtualDatabaseMBean
Parameters:
databaseBackendName - the name of the backend to restore
checkpointName - the name of the checkpoint that has a dump
Throws:
OctopusException - if backup failed while in octopus mode
VirtualDatabaseException - if cannot access the backend from its name
BackupException - if backup failed for other reasons
See Also:
VirtualDatabaseMBean.restoreBackendFromBackupCheckpoint(java.lang.String, java.lang.String)

storeBackendsInfo

public void storeBackendsInfo()
Write the checkpoints for all backends on the recovery log


hasRecoveryLog

public boolean hasRecoveryLog()
Description copied from interface: VirtualDatabaseMBean
Indicate whether there is a recovery log defined for this virtual database

Specified by:
hasRecoveryLog in interface VirtualDatabaseMBean
Returns:
true if the recovery log is defined and can be accessed, false otherwise
See Also:
VirtualDatabaseMBean.hasRecoveryLog()

replicateBackend

public void replicateBackend(java.lang.String backendName,
                             java.lang.String newBackendName,
                             java.util.Map parameters)
                      throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Add an additionnal backend to the virtual database with connection managers identical to the backend replicated.

Specified by:
replicateBackend in interface VirtualDatabaseMBean
Parameters:
backendName - the backend to replicate and to use parameters from.
newBackendName - the new backend name.
parameters - parameters to override or modify when replicating to the new backend
Throws:
VirtualDatabaseException - if cannot replicate backend
See Also:
VirtualDatabaseMBean.replicateBackend(java.lang.String, java.lang.String, java.util.Map)

retrieveBackendsData

public java.lang.String[][] retrieveBackendsData()
                                          throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Retrieves an array of data on the backends for this virtual database

Specified by:
retrieveBackendsData in interface VirtualDatabaseMBean
Returns:
String[][] of formatted data for all backends
Throws:
VirtualDatabaseException
See Also:
VirtualDatabaseMBean.retrieveBackendsData()

viewControllerList

public java.lang.String[] viewControllerList()
Description copied from interface: VirtualDatabaseMBean
Return the list of controllers defining this virtual database. If the database is not distributed this returns the same as viewOwningController otherwise returns an array of controller configuring this DistributedVirtualDatabase

Specified by:
viewControllerList in interface VirtualDatabaseMBean
Returns:
String[] of controller names.
See Also:
VirtualDatabaseMBean.viewControllerList()

viewGroupBackends

public java.util.Hashtable viewGroupBackends()
                                      throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Returns a mapping of controller jmx names with their backends Note the method is only useful in distributed environment

Specified by:
viewGroupBackends in interface VirtualDatabaseMBean
Returns:
Hashtable of controllerName --> ArrayList of backend names
Throws:
VirtualDatabaseException - if cannot return the result
See Also:
VirtualDatabaseMBean.viewGroupBackends()

transferBackend

public void transferBackend(java.lang.String backend,
                            java.lang.String controllerDestination)
                     throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Transfer the backend to the destinated controller. Note that this does nothing in a non-distributed environment

Specified by:
transferBackend in interface VirtualDatabaseMBean
Parameters:
backend - the backend to transfer
controllerDestination - the controller to copy the backend to
Throws:
VirtualDatabaseException - if transfer failed
See Also:
VirtualDatabaseMBean.transferBackend(java.lang.String, java.lang.String)

getBackendSchema

public java.lang.String getBackendSchema(java.lang.String backendName)
                                  throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
The getXml() method does not return the schema if it is not static anymore, to avoid confusion between static and dynamic schema. This method returns a static view of the schema, whatever the dynamic precision is.

Specified by:
getBackendSchema in interface VirtualDatabaseMBean
Parameters:
backendName - the name of the backend to get the schema from
Returns:
an xml formatted string
Throws:
VirtualDatabaseException - if an error occurs while accessing the backend, or if the backend does not exist.
See Also:
VirtualDatabaseMBean.getBackendSchema(java.lang.String)

enableBackendFromCheckpoint

public void enableBackendFromCheckpoint(java.lang.String backendName,
                                        java.lang.String checkpointName,
                                        boolean threaded)
                                 throws VirtualDatabaseException
Description copied from interface: VirtualDatabaseMBean
Plays all the queries since the given checkpoint and enables the backend when it is completely synchronized. The backend must have been previously added to this virtual database and be in the disabled state

Specified by:
enableBackendFromCheckpoint in interface VirtualDatabaseMBean
Parameters:
backendName - The database backend logical name to enable
checkpointName - the checkpoint name to restart from
threaded - if true do not wait for the end of the execution before returning, and do not throw any Exception. Any message or error will be reported through jmx notification. if false, the method is blocked until the recovery is finished.
Throws:
VirtualDatabaseException - in case of communication-related error
See Also:
VirtualDatabaseMBean.enableBackendFromCheckpoint(java.lang.String, java.lang.String, boolean)


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