Package org.apache.derby.impl.io
Class BaseStorageFactory
- java.lang.Object
-
- org.apache.derby.impl.io.BaseStorageFactory
-
- All Implemented Interfaces:
StorageFactory
- Direct Known Subclasses:
CPStorageFactory
,DirStorageFactory
,JarStorageFactory
,URLStorageFactory
abstract class BaseStorageFactory extends java.lang.Object implements StorageFactory
This class provides a base for implementations of the StorageFactory interface. It is used by the database engine to access persistent data and transaction logs under the directory (default) subsubprotocol.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
canonicalName
protected java.lang.String
dataDirectory
(package private) java.lang.String
home
protected java.lang.String
separatedDataDirectory
private static java.lang.String
TEMP_DIR_PREFIX
protected StorageFile
tempDir
protected java.lang.String
tempDirPath
protected java.lang.String
uniqueName
-
Fields inherited from interface org.apache.derby.io.StorageFactory
VERSION_NUMBER
-
-
Constructor Summary
Constructors Constructor Description BaseStorageFactory()
Most of the initialization is done in the init method.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description (package private) void
createTempDir()
StorageFile
createTemporaryFile(java.lang.String prefix, java.lang.String suffix)
Create and returns a temporary file in temporary file system of database.(package private) abstract void
doInit()
java.lang.String
getCanonicalName()
Get the canonical name of the database.char
getSeparator()
Get the pathname separator character used by the StorageFile implementation.int
getStorageFactoryVersion()
StorageFile
getTempDir()
Get the abstract name of the directory that holds temporary files.void
init(java.lang.String home, java.lang.String databaseName, java.lang.String tempDirName, java.lang.String uniqueName)
Classes implementing the StorageFactory interface must have a null constructor.boolean
isFast()
This method is used to determine whether the storage is fast (RAM based) or slow (disk based).boolean
isReadOnlyDatabase()
Determine whether the database is read only.(package private) abstract StorageFile
newPersistentFile(java.lang.String path)
Construct a persistent StorageFile from a path name.(package private) abstract StorageFile
newPersistentFile(java.lang.String directoryName, java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.(package private) abstract StorageFile
newPersistentFile(StorageFile directoryName, java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.StorageFile
newStorageFile(java.lang.String path)
Construct a StorageFile from a path name.StorageFile
newStorageFile(java.lang.String directoryName, java.lang.String fileName)
Construct a StorageFile from a directory and file name.StorageFile
newStorageFile(StorageFile directoryName, java.lang.String fileName)
Construct a StorageFile from a directory and file name.private java.lang.String
readOnlyTempRoot()
void
setCanonicalName(java.lang.String name)
Set the canonicalName.void
shutdown()
The shutdown method is called during the normal shutdown of the database.boolean
supportsRandomAccess()
Determine whether the storage supports random access.
-
-
-
Field Detail
-
home
java.lang.String home
-
tempDir
protected StorageFile tempDir
-
tempDirPath
protected java.lang.String tempDirPath
-
dataDirectory
protected java.lang.String dataDirectory
-
separatedDataDirectory
protected java.lang.String separatedDataDirectory
-
uniqueName
protected java.lang.String uniqueName
-
canonicalName
protected java.lang.String canonicalName
-
TEMP_DIR_PREFIX
private static final java.lang.String TEMP_DIR_PREFIX
- See Also:
- Constant Field Values
-
-
Method Detail
-
init
public void init(java.lang.String home, java.lang.String databaseName, java.lang.String tempDirName, java.lang.String uniqueName) throws java.io.IOException
Classes implementing the StorageFactory interface must have a null constructor. This method is called when the database is booted up to initialize the class. It should perform all actions necessary to start the basic storage, such as creating a temporary file directory. The init method will be called once, before any other method is called, and will not be called again.- Specified by:
init
in interfaceStorageFactory
- Parameters:
home
- The name of the directory containing the database. It comes from the system.home system property. It may be null. A storage factory may decide to ignore this parameter. (For instance the classpath storage factory ignores it.databaseName
- The name of the database (directory). All relative pathnames are relative to this directory. If null then the storage factory will only be used to deal with the directory containing the databases.tempDirName
- The name of the temporary file directory set in properties. If null then a default directory should be used. Each database should get a separate temporary file directory within this one to avoid collisions.uniqueName
- A unique name that can be used to create the temporary file directory for this database.- Throws:
java.io.IOException
- on an error (unexpected).
-
doInit
abstract void doInit() throws java.io.IOException
- Throws:
java.io.IOException
-
shutdown
public void shutdown()
Description copied from interface:StorageFactory
The shutdown method is called during the normal shutdown of the database. However, the database engine cannot guarantee that shutdown will be called. If the JVM terminates abnormally then it will not be called.- Specified by:
shutdown
in interfaceStorageFactory
-
getCanonicalName
public java.lang.String getCanonicalName() throws java.io.IOException
Get the canonical name of the database. This is a name that uniquely identifies it. It is system dependent. The normal, disk based implementation uses method java.io.File.getCanonicalPath on the directory holding the database to construct the canonical name.- Specified by:
getCanonicalName
in interfaceStorageFactory
- Returns:
- the canonical name
- Throws:
java.io.IOException
- if an IO error occurred during the construction of the name.
-
setCanonicalName
public void setCanonicalName(java.lang.String name)
Set the canonicalName. May need adjustment due to DERBY-5096- Specified by:
setCanonicalName
in interfaceStorageFactory
- Parameters:
name
- uniquely identifiable name for this database
-
newStorageFile
public StorageFile newStorageFile(java.lang.String path)
Construct a StorageFile from a path name.- Specified by:
newStorageFile
in interfaceStorageFactory
- Parameters:
path
- The path name of the file- Returns:
- A corresponding StorageFile object
-
newStorageFile
public StorageFile newStorageFile(java.lang.String directoryName, java.lang.String fileName)
Construct a StorageFile from a directory and file name.- Specified by:
newStorageFile
in interfaceStorageFactory
- Parameters:
directoryName
- The directory part of the path name.fileName
- The name of the file within the directory.- Returns:
- A corresponding StorageFile object
-
newStorageFile
public StorageFile newStorageFile(StorageFile directoryName, java.lang.String fileName)
Construct a StorageFile from a directory and file name.- Specified by:
newStorageFile
in interfaceStorageFactory
- Parameters:
directoryName
- The directory part of the path name.fileName
- The name of the file within the directory.- Returns:
- A corresponding StorageFile object
-
newPersistentFile
abstract StorageFile newPersistentFile(java.lang.String path)
Construct a persistent StorageFile from a path name.- Parameters:
path
- The path name of the file. Guaranteed not to be in the temporary file directory. If null then the database directory should be returned.- Returns:
- A corresponding StorageFile object
-
newPersistentFile
abstract StorageFile newPersistentFile(java.lang.String directoryName, java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.- Parameters:
directoryName
- The path name of the directory. Guaranteed not to be in the temporary file directory. Guaranteed not to be nullfileName
- The name of the file within the directory. Guaranteed not to be null.- Returns:
- A corresponding StorageFile object
-
newPersistentFile
abstract StorageFile newPersistentFile(StorageFile directoryName, java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.- Parameters:
directoryName
- The path name of the directory. Guaranteed not to be to be null. Guaranteed to be created by a call to one of the newPersistentFile methods.fileName
- The name of the file within the directory. Guaranteed not to be null.- Returns:
- A corresponding StorageFile object
-
getSeparator
public char getSeparator()
Get the pathname separator character used by the StorageFile implementation.- Specified by:
getSeparator
in interfaceStorageFactory
- Returns:
- the pathname separator character. (Normally '/' or '\').
-
getTempDir
public StorageFile getTempDir()
Get the abstract name of the directory that holds temporary files.- Specified by:
getTempDir
in interfaceStorageFactory
- Returns:
- a directory name
-
isFast
public boolean isFast()
This method is used to determine whether the storage is fast (RAM based) or slow (disk based). It may be used by the database engine to determine the default size of the page cache.- Specified by:
isFast
in interfaceStorageFactory
- Returns:
- true if the storage is fast, false if it is slow.
-
isReadOnlyDatabase
public boolean isReadOnlyDatabase()
Description copied from interface:StorageFactory
Determine whether the database is read only. The database engine supports read-only databases, even in file systems that are writable.- Specified by:
isReadOnlyDatabase
in interfaceStorageFactory
- Returns:
- true if the storage is read only, false if it is writable.
-
supportsRandomAccess
public boolean supportsRandomAccess()
Determine whether the storage supports random access. If random access is not supported then it will only be accessed using InputStreams and OutputStreams (if the database is writable).- Specified by:
supportsRandomAccess
in interfaceStorageFactory
- Returns:
- true if the storage supports random access, false if it is writable.
-
createTempDir
void createTempDir() throws java.io.IOException
- Throws:
java.io.IOException
-
readOnlyTempRoot
private java.lang.String readOnlyTempRoot() throws java.io.IOException
- Throws:
java.io.IOException
-
getStorageFactoryVersion
public int getStorageFactoryVersion()
- Specified by:
getStorageFactoryVersion
in interfaceStorageFactory
- Returns:
- the StorageFactory version supported by this implementation
-
createTemporaryFile
public StorageFile createTemporaryFile(java.lang.String prefix, java.lang.String suffix) throws java.io.IOException
Create and returns a temporary file in temporary file system of database.- Specified by:
createTemporaryFile
in interfaceStorageFactory
- Parameters:
prefix
- String to prefix the random name generator.suffix
- String to suffix the random name generator.- Returns:
- StorageFile
- Throws:
java.io.IOException
-
-