Class BasicDatabase
- java.lang.Object
-
- org.apache.derby.impl.db.BasicDatabase
-
- All Implemented Interfaces:
Database,Database,LocaleFinder,JarReader,ModuleControl,ModuleSupportable,PropertySetCallback
- Direct Known Subclasses:
SlaveDatabase
public class BasicDatabase extends java.lang.Object implements ModuleControl, ModuleSupportable, PropertySetCallback, Database, JarReader
The Database interface provides control over the physical database (that is, the stored data and the files the data are stored in), connections to the database, operations on the database such as backup and recovery, and all other things that are associated with the database itself.The Database interface does not provide control over things that are part of the Domain, such as users.
I'm not sure what this will hold in a real system, for now it simply provides connection-creation for us. Perhaps when it boots, it creates the datadictionary object for the database, which all users will then interact with?
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanactiveprotected AccessFactoryafprivate AuthenticationServiceauthenticationServiceprotected ClassFactorycfDBprivate java.util.LocaledatabaseLocaleprivate java.text.DateFormatdateFormatprivate DataDictionaryddDataDictionary for this database.protected booleanlastToBootprotected LanguageConnectionFactorylcfprotected LanguageFactorylfprivate UUIDmyUUIDprotected PropertyFactorypfprotected java.lang.ObjectresourceAdapterprivate java.text.DateFormattimeFormatprivate java.text.DateFormattimestampFormat-
Fields inherited from interface org.apache.derby.database.Database
LUCENE_DIR
-
-
Constructor Summary
Constructors Constructor Description BasicDatabase()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Serviceableapply(java.lang.String key, java.io.Serializable value, java.util.Dictionary p)Apply a property change.voidbackup(java.lang.String backupDir, boolean wait)Backup the database to a backup directory.voidbackupAndEnableLogArchiveMode(java.lang.String backupDir, boolean deleteOnlineArchivedLogFiles, boolean wait)Backup the database to a backup directory and enable the log archive mode that will keep the archived log files required for roll-forward from this version backup.private voidbackupLucene(java.lang.String backupDir)Backup Lucene indexes to the backup directory.voidboot(boolean create, java.util.Properties startParams)Boot this module with the given properties.protected AuthenticationServicebootAuthenticationService(boolean create, java.util.Properties props)protected voidbootClassFactory(boolean create, java.util.Properties startParams)protected voidbootResourceAdapter(boolean create, java.util.Properties allParams)private static java.lang.ObjectbootServiceModule(boolean create, java.lang.Object serviceModule, java.lang.String factoryInterface, java.util.Properties properties)Privileged startup.protected voidbootStore(boolean create, java.util.Properties startParams)protected voidbootValidation(boolean create, java.util.Properties startParams)booleancanSupport(java.util.Properties startParams)See if this implementation can support any attributes that are listed in properties.voidcheckpoint()Checkpoints the database, that is, flushes all dirty data to disk.protected voidcreateFinished()voiddisableLogArchiveMode(boolean deleteOnlineArchivedLogFiles)Disables the log archival process, i.e No old log files will be kept around for a roll-forward recovery.voidfailover(java.lang.String dbname)Start failover for the given database.private static java.lang.ObjectfindServiceModule(java.lang.Object serviceModule, java.lang.String factoryInterface)Privileged startup.voidfreeze()Freeze the database temporarily so a backup can be taken.protected java.util.PropertiesgetAllDatabaseProperties()Get the set of database properties from the set stored on disk outside of service.properties.AuthenticationServicegetAuthenticationService()This method returns the authentication service handle for the database.protected java.lang.StringgetClasspath(java.util.Properties startParams)protected TransactionControllergetConnectionTransaction(ContextManager cm)private static ContextServicegetContextService()Privileged lookup of the ContextService.java.util.LocalegetCurrentLocale()DataDictionarygetDataDictionary()Return the DataDictionary for this database, set up at boot time.java.text.DateFormatgetDateFormat()Get a formatter for formatting dates.intgetEngineType()Return the engine type that this Database implementation supports.UUIDgetId()Deprecated.StorageFilegetJarFile(java.lang.String schemaName, java.lang.String sqlName)Get the StorageFile for an installed jar file.java.util.LocalegetLocale()Get the Locale for this database.private StorageFilegetLuceneDir()Get the location of the Lucene indexesprivate static ModuleFactorygetMonitor()Privileged Monitor lookup.java.lang.ObjectgetResourceAdapter()Get a Resource Adapter - only used by XA system.private StorageFactorygetStorageFactory()Get the database StorageFactory.java.text.DateFormatgetTimeFormat()Get a formatter for formatting times.java.text.DateFormatgetTimestampFormat()Get a formatter for formatting timestamps.voidinit(boolean dbOnly, java.util.Dictionary p)Initialize the properties for this callback.booleanisActive()Is the database active (open).booleanisInSlaveMode()Used to indicated whether the database is in the replication slave mode.booleanisReadOnly()Tells whether the Database is configured as read-only, or the Database was started in read-only mode.private booleanluceneLoaded()Return true if the Lucene plugin is loaded.protected UUIDmakeDatabaseID(boolean create, java.util.Properties startParams)java.io.Serializablemap(java.lang.String key, java.io.Serializable value, java.util.Dictionary p)Map a proposed new value for a property to an official value.private static StandardExceptionnoLocale()protected voidpushClassFactoryContext(ContextManager cm, ClassFactory cf)voidpushDbContext(ContextManager cm)Push a DbContext onto the provided context stack.voidsetLocale(java.util.Locale locale)Set the Locale that is returned by this LocaleFinderLanguageConnectionContextsetupConnection(ContextManager cm, java.lang.String user, java.lang.String drdaID, java.lang.String dbname)Sets up a connection to the Database, owned by the given user.voidstartReplicationMaster(java.lang.String dbmaster, java.lang.String host, int port, java.lang.String replicationMode)Start the replication master role for this databasevoidstop()Stop the module.voidstopReplicationMaster()Stop the replication master role for this database.voidstopReplicationSlave()Only a SlaveDatabase can be in replication slave mode.voidunfreeze()Unfreeze the database after a backup has been taken.booleanvalidate(java.lang.String key, java.io.Serializable value, java.util.Dictionary p)Validate a property change.
-
-
-
Field Detail
-
active
protected boolean active
-
authenticationService
private AuthenticationService authenticationService
-
af
protected AccessFactory af
-
pf
protected PropertyFactory pf
-
cfDB
protected ClassFactory cfDB
-
dd
private DataDictionary dd
DataDictionary for this database.
-
lcf
protected LanguageConnectionFactory lcf
-
lf
protected LanguageFactory lf
-
resourceAdapter
protected java.lang.Object resourceAdapter
-
databaseLocale
private java.util.Locale databaseLocale
-
dateFormat
private java.text.DateFormat dateFormat
-
timeFormat
private java.text.DateFormat timeFormat
-
timestampFormat
private java.text.DateFormat timestampFormat
-
myUUID
private UUID myUUID
-
lastToBoot
protected boolean lastToBoot
-
-
Method Detail
-
canSupport
public boolean canSupport(java.util.Properties startParams)
Description copied from interface:ModuleSupportableSee if this implementation can support any attributes that are listed in properties. This call may be made on a newly created instance before the boot() method has been called, or after the boot method has been called for a running module.The module can check for attributes in the properties to see if it can fulfill the required behaviour. E.g. the raw store may define an attribute called RawStore.Recoverable. If a temporary raw store is required the property RawStore.recoverable=false would be added to the properties before calling bootServiceModule. If a raw store cannot support this attribute its canSupport method would return null. Also see the Monitor class's prologue to see how the identifier is used in looking up properties.
Actually a better way maybe to have properties of the form RawStore.Attributes.mandatory=recoverable,smallfootprint and RawStore.Attributes.requested=oltp,fast- Specified by:
canSupportin interfaceModuleSupportable- Returns:
- true if this instance can be used, false otherwise.
-
boot
public void boot(boolean create, java.util.Properties startParams) throws StandardExceptionDescription copied from interface:ModuleControlBoot this module with the given properties. Creates a module instance that can be found using the findModule() methods of Monitor. The module can only be found using one of these findModule() methods once this method has returned.An implementation's boot method can throw StandardException. If it is thrown the module is not registered by the monitor and therefore cannot be found through a findModule(). In this case the module's stop() method is not called, thus throwing this exception must free up any resources.
When create is true the contents of the properties object will be written to the service.properties of the persistent service. Thus any code that requires an entry in service.properties must explicitly place the value in this properties set using the put method.
Typically the properties object contains one or more default properties sets, which are not written out to service.properties. These default sets are how callers modify the create process. In a JDBC connection database create the first set of defaults is a properties object that contains the attributes that were set on the jdbc:derby: URL. This attributes properties set has the second default properties set as its default. This set (which could be null) contains the properties that the user set on their DriverManager.getConnection() call, and are thus not owned by Derby code, and thus must not be modified by Derby code.When create is false the properties object contains all the properties set in the service.properties file plus a limited number of attributes from the JDBC URL attributes or connection properties set. This avoids properties set by the user compromising the boot process. An example of a property passed in from the JDBC world is the bootPassword for encrypted databases.
Code should not hold onto the passed in properties reference after boot time as its contents may change underneath it. At least after the complete boot is completed, the links to all the default sets will be removed.
- Specified by:
bootin interfaceModuleControl- Throws:
StandardException- Module cannot be started.- See Also:
Monitor,ModuleFactory
-
stop
public void stop()
Description copied from interface:ModuleControlStop the module. The module may be found via a findModule() method until some time after this method returns. Therefore the factory must be prepared to reject requests to it once it has been stopped. In addition other modules may cache a reference to the module and make requests of it after it has been stopped, these requests should be rejected as well.- Specified by:
stopin interfaceModuleControl- See Also:
Monitor,ModuleFactory
-
getEngineType
public int getEngineType()
Return the engine type that this Database implementation supports. This implementation supports the standard database.- Specified by:
getEngineTypein interfaceDatabase
-
isReadOnly
public boolean isReadOnly()
Description copied from interface:DatabaseTells whether the Database is configured as read-only, or the Database was started in read-only mode.- Specified by:
isReadOnlyin interfaceDatabase- Returns:
- TRUE means the Database is read-only, FALSE means it is not read-only.
-
setupConnection
public LanguageConnectionContext setupConnection(ContextManager cm, java.lang.String user, java.lang.String drdaID, java.lang.String dbname) throws StandardException
Description copied from interface:DatabaseSets up a connection to the Database, owned by the given user. The JDBC version of getConnection takes a URL. The purpose of the URL is to tell the driver where the database system is. By the time we get here, we have found the database system (that's how we're making this method call), so the URL is not necessary to establish the connection here. The driver should remember the URL that was used to establish the connection, so it can implement the DatabaseMetaData.getURL() method.- Specified by:
setupConnectionin interfaceDatabaseuser- The UserID of the user getting the connectiondrdaID- The drda id of the connection (from network server)dbname- The database name- Returns:
- A new LanguageConnectionContext
- Throws:
StandardException- thrown if unable to create the connection.
-
getDataDictionary
public final DataDictionary getDataDictionary()
Return the DataDictionary for this database, set up at boot time.- Specified by:
getDataDictionaryin interfaceDatabase
-
pushDbContext
public void pushDbContext(ContextManager cm)
Description copied from interface:DatabasePush a DbContext onto the provided context stack. This conext will shut down the database in case of a DatabaseException being cleaned up.- Specified by:
pushDbContextin interfaceDatabase
-
getAuthenticationService
public AuthenticationService getAuthenticationService() throws StandardException
Description copied from interface:DatabaseThis method returns the authentication service handle for the database. NOTE: There is always a Authentication Service per database and at the system level.- Specified by:
getAuthenticationServicein interfaceDatabase- Returns:
- The authentication service handle for the database
- Throws:
StandardException- standard Derby exception policy
-
startReplicationMaster
public void startReplicationMaster(java.lang.String dbmaster, java.lang.String host, int port, java.lang.String replicationMode) throws java.sql.SQLExceptionStart the replication master role for this database- Specified by:
startReplicationMasterin interfaceDatabase- Parameters:
dbmaster- The master database that is being replicated.host- The hostname for the slaveport- The port the slave is listening onreplicationMode- The type of replication contract. Currently only asynchronous replication is supported, but 1-safe/2-safe/very-safe modes may be added later.- Throws:
java.sql.SQLException- Thrown on error
-
stopReplicationMaster
public void stopReplicationMaster() throws java.sql.SQLExceptionStop the replication master role for this database.- Specified by:
stopReplicationMasterin interfaceDatabase- Throws:
java.sql.SQLException- Thrown on error
-
stopReplicationSlave
public void stopReplicationSlave() throws java.sql.SQLExceptionOnly a SlaveDatabase can be in replication slave mode. Always throws an exception- Specified by:
stopReplicationSlavein interfaceDatabase- Throws:
java.sql.SQLException- Always thrown because BasicDatabase cannot be in replication slave mode
-
isInSlaveMode
public boolean isInSlaveMode()
Description copied from interface:DatabaseUsed to indicated whether the database is in the replication slave mode.- Specified by:
isInSlaveModein interfaceDatabase- Returns:
- true if this database is in replication slave mode, false otherwise.
-
failover
public void failover(java.lang.String dbname) throws StandardExceptionDescription copied from interface:DatabaseStart failover for the given database.- Specified by:
failoverin interfaceDatabase- Parameters:
dbname- the replication database that is being failed over.- Throws:
StandardException- 1) If the failover succeeds, an exception is thrown to indicate that the master database was shutdown after a successful failover 2) If a failure occurs during network communication with slave.- See Also:
Database.failover(String)
-
freeze
public void freeze() throws java.sql.SQLExceptionDescription copied from interface:DatabaseFreeze the database temporarily so a backup can be taken.Please see the Derby documentation on backup and restore.
-
unfreeze
public void unfreeze() throws java.sql.SQLExceptionDescription copied from interface:DatabaseUnfreeze the database after a backup has been taken.Please see the Derby documentation on backup and restore.
-
backup
public void backup(java.lang.String backupDir, boolean wait) throws java.sql.SQLExceptionDescription copied from interface:DatabaseBackup the database to a backup directory. See online documentation for more detail about how to use this feature.- Specified by:
backupin interfaceDatabase- Parameters:
backupDir- the directory name where the database backup should go. This directory will be created if not it does not exist.wait- if true, waits for all the backup blocking operations in progress to finish.- Throws:
java.sql.SQLException- Thrown on error
-
backupAndEnableLogArchiveMode
public void backupAndEnableLogArchiveMode(java.lang.String backupDir, boolean deleteOnlineArchivedLogFiles, boolean wait) throws java.sql.SQLExceptionDescription copied from interface:DatabaseBackup the database to a backup directory and enable the log archive mode that will keep the archived log files required for roll-forward from this version backup.- Specified by:
backupAndEnableLogArchiveModein interfaceDatabase- Parameters:
backupDir- The directory name where the database backup should go. This directory will be created if it does not exist.deleteOnlineArchivedLogFiles- If true deletes online archived log files that exist before this backup; otherwise they will not be deleted. Deletion will occur only after backup is complete.wait- if true, waits for all the backup blocking operations in progress to finish.- Throws:
java.sql.SQLException- Thrown on error
-
disableLogArchiveMode
public void disableLogArchiveMode(boolean deleteOnlineArchivedLogFiles) throws java.sql.SQLExceptionDescription copied from interface:DatabaseDisables the log archival process, i.e No old log files will be kept around for a roll-forward recovery. Only restore that can be performed after disabling log archive mode is version recovery.- Specified by:
disableLogArchiveModein interfaceDatabase- Parameters:
deleteOnlineArchivedLogFiles- If true deletes all online archived log files that exist before this call immediately; otherwise they will not be deleted.- Throws:
java.sql.SQLException- Thrown on error
-
checkpoint
public void checkpoint() throws java.sql.SQLExceptionDescription copied from interface:DatabaseCheckpoints the database, that is, flushes all dirty data to disk. Records a checkpoint in the transaction log, if there is a log.- Specified by:
checkpointin interfaceDatabase- Throws:
java.sql.SQLException- Thrown on error
-
getLocale
public java.util.Locale getLocale()
Description copied from interface:DatabaseGet the Locale for this database.
-
getId
public final UUID getId()
Deprecated.Return the UUID of this database.
-
getCurrentLocale
public java.util.Locale getCurrentLocale() throws StandardException- Specified by:
getCurrentLocalein interfaceLocaleFinder- Throws:
StandardException- Thrown on error
-
getDateFormat
public java.text.DateFormat getDateFormat() throws StandardExceptionDescription copied from interface:LocaleFinderGet a formatter for formatting dates. The implementation may cache this value, since it never changes for a given Locale.- Specified by:
getDateFormatin interfaceLocaleFinder- Throws:
StandardException- Thrown on error
-
getTimeFormat
public java.text.DateFormat getTimeFormat() throws StandardExceptionDescription copied from interface:LocaleFinderGet a formatter for formatting times. The implementation may cache this value, since it never changes for a given Locale.- Specified by:
getTimeFormatin interfaceLocaleFinder- Throws:
StandardException- Thrown on error
-
getTimestampFormat
public java.text.DateFormat getTimestampFormat() throws StandardExceptionDescription copied from interface:LocaleFinderGet a formatter for formatting timestamps. The implementation may cache this value, since it never changes for a given Locale.- Specified by:
getTimestampFormatin interfaceLocaleFinder- Throws:
StandardException- Thrown on error
-
noLocale
private static StandardException noLocale()
-
setLocale
public void setLocale(java.util.Locale locale)
Description copied from interface:DatabaseSet the Locale that is returned by this LocaleFinder
-
isActive
public boolean isActive()
Is the database active (open).
-
makeDatabaseID
protected UUID makeDatabaseID(boolean create, java.util.Properties startParams) throws StandardException
- Throws:
StandardException
-
getResourceAdapter
public java.lang.Object getResourceAdapter()
Description copied from interface:DatabaseGet a Resource Adapter - only used by XA system. There is one and only one resource adapter per Derby database.- Specified by:
getResourceAdapterin interfaceDatabase- Returns:
- the resource Adapter for the database, null if no resource adapter is available for this database. Returned as an Object so that non-XA aggressive JVMs such as Chai don't get ClassNotFound. caller must cast result to ResourceAdapter.
-
init
public void init(boolean dbOnly, java.util.Dictionary p)Description copied from interface:PropertySetCallbackInitialize the properties for this callback. Called when addPropertySetNotification() is called with a non-null transaction controller. This allows code to set read its initial property values at boot time.Code within an init() method should use the 3 argument PropertyUtil method getPropertyFromSet() to obtain a property's value.
- Specified by:
initin interfacePropertySetCallback- Parameters:
dbOnly- true if only per-database properties are to be looked atp- the complete set of per-database properties.
-
validate
public boolean validate(java.lang.String key, java.io.Serializable value, java.util.Dictionary p) throws StandardExceptionDescription copied from interface:PropertySetCallbackValidate a property change.- Specified by:
validatein interfacePropertySetCallback- Parameters:
key- Property key for the property being setvalue- proposed new value for the property being set or null if the property is being dropped.p- Property set before the change. SettingProperty may read but must never change p.- Returns:
- true if this object was interested in this property, false otherwise.
- Throws:
StandardException- Thrown on error.- See Also:
PropertySetCallback.validate(java.lang.String, java.io.Serializable, java.util.Dictionary)
-
apply
public Serviceable apply(java.lang.String key, java.io.Serializable value, java.util.Dictionary p) throws StandardException
Description copied from interface:PropertySetCallbackApply a property change. Will only be called after validate has been called and only if validate returned true. If this method is called then the new value is the value to be used, ie. the property is not set in the overriding JVM system set.- Specified by:
applyin interfacePropertySetCallback- Parameters:
key- Property key for the property being setvalue- proposed new value for the property being set or null if the property is being dropped.p- Property set before the change. SettingProperty may read but must never change p.- Returns:
- post commit work for the property change.
- Throws:
StandardException- Thrown on error.- See Also:
PropertySetCallback.apply(java.lang.String, java.io.Serializable, java.util.Dictionary)
-
map
public java.io.Serializable map(java.lang.String key, java.io.Serializable value, java.util.Dictionary p)Description copied from interface:PropertySetCallbackMap a proposed new value for a property to an official value. Will only be called after apply() has been called.- Specified by:
mapin interfacePropertySetCallback- Parameters:
key- Property key for the property being setvalue- proposed new value for the property being set or null if the property is being dropped.p- Property set before the change. SettingProperty may read but must never change p.- Returns:
- new value for the change
- See Also:
PropertySetCallback.map(java.lang.String, java.io.Serializable, java.util.Dictionary)
-
createFinished
protected void createFinished() throws StandardException- Throws:
StandardException
-
getClasspath
protected java.lang.String getClasspath(java.util.Properties startParams)
-
bootClassFactory
protected void bootClassFactory(boolean create, java.util.Properties startParams) throws StandardException- Throws:
StandardException
-
getConnectionTransaction
protected TransactionController getConnectionTransaction(ContextManager cm) throws StandardException
- Throws:
StandardException
-
bootAuthenticationService
protected AuthenticationService bootAuthenticationService(boolean create, java.util.Properties props) throws StandardException
- Throws:
StandardException
-
bootValidation
protected void bootValidation(boolean create, java.util.Properties startParams) throws StandardException- Throws:
StandardException
-
bootStore
protected void bootStore(boolean create, java.util.Properties startParams) throws StandardException- Throws:
StandardException
-
getAllDatabaseProperties
protected java.util.Properties getAllDatabaseProperties() throws StandardExceptionGet the set of database properties from the set stored on disk outside of service.properties.- Throws:
StandardException
-
bootResourceAdapter
protected void bootResourceAdapter(boolean create, java.util.Properties allParams)
-
pushClassFactoryContext
protected void pushClassFactoryContext(ContextManager cm, ClassFactory cf)
-
getJarFile
public StorageFile getJarFile(java.lang.String schemaName, java.lang.String sqlName) throws StandardException
Description copied from interface:JarReaderGet the StorageFile for an installed jar file.- Specified by:
getJarFilein interfaceJarReader- Throws:
StandardException
-
luceneLoaded
private boolean luceneLoaded() throws StandardExceptionReturn true if the Lucene plugin is loaded.
- Throws:
StandardException
-
getLuceneDir
private StorageFile getLuceneDir() throws StandardException
Get the location of the Lucene indexes- Throws:
StandardException
-
getStorageFactory
private StorageFactory getStorageFactory() throws StandardException
Get the database StorageFactory.
- Throws:
StandardException
-
backupLucene
private void backupLucene(java.lang.String backupDir) throws StandardExceptionBackup Lucene indexes to the backup directory. This assumes that the rest of the database has been backup up and sanity checks have been run.
- Throws:
StandardException
-
getContextService
private static ContextService getContextService()
Privileged lookup of the ContextService. Must be private so that user code can't call this entry point.
-
getMonitor
private static ModuleFactory getMonitor()
Privileged Monitor lookup. Must be private so that user code can't call this entry point.
-
bootServiceModule
private static java.lang.Object bootServiceModule(boolean create, java.lang.Object serviceModule, java.lang.String factoryInterface, java.util.Properties properties) throws StandardExceptionPrivileged startup. Must be private so that user code can't call this entry point.- Throws:
StandardException
-
findServiceModule
private static java.lang.Object findServiceModule(java.lang.Object serviceModule, java.lang.String factoryInterface) throws StandardExceptionPrivileged startup. Must be private so that user code can't call this entry point.- Throws:
StandardException
-
-