Top Description Fields Methods
org.apache.derby.io

public Interface StorageFactory

Known Direct Subinterfaces
org.apache.derby.io.WritableStorageFactory
Known Direct Implementers
org.apache.derby.impl.io.BaseStorageFactory, org.apache.derby.impl.io.VFMemoryStorageFactory
Imports
java.io.IOException

This interface provides basic storage functions needed for read only databases. Most storage implementations will be read-write and implement the WritableStorageFactory extension of this interface.

The database engine uses this interface to access storage. The normal database engine implements this interface using disk files and the standard java.io classes.

The storage factory must implement writable temporary files, even if the database is read-only or if the storage factory is read-only (i.e. it does not implement the WritableStorageFactory extension of this interface). Temporary files are those created under the temporary file directory. See method getTempDir().

The database engine can be turned into a RAM based engine by providing a RAM based implementation of this interface.

There is one instance of the StorageFactory per database if the log files are kept in the database directory. If the log files are kept on a separate device then a second StorageFactory is instantiated to hold the log files. The database or log device name is set when the init method is called. The init method is called once per instance, before any other StorageFactory method.

The class implementing this interface must have a public niladic constructor. The init method will be called before any other method to set the database directory name, to tell the factory to create the database directory if necessary, and to allow the implementation to perform any initializations it requires. The database name set in the init method forms a separate name space. Different StorageFactory instances, with different database directory names, must ensure that their files do not clash. So, for instance, storageFactory1.newStorageFile( "x") must be a separate file from storageFactory2.newStorageFile( "x").

The database engine will call this interface's methods from its own privilege blocks. This does not give a StorageFactory implementation carte blanche: a security manager can still forbid the implemeting class from executing a privileged action. However, the security manager will not look in the calling stack beyond the database engine.

Each StorageFactory instance may be concurrently used by multiple threads. Each StorageFactory implementation must be thread safe.

A StorageFactory implementation is plugged into the database engine via a sub-protocol. Sub-protocol xxx is tied to a StorageFactory implementation class via the derby.subSubProtocol.xxx system property. So, to use StorageFactory implementation class MyStorageFactory with database myDB you would set the system property "derby.subSubProtocol.mysf=MyStorageFactory" and use the URL "jdbc:derby:mysf:myDB" to connect to the database.

See Also
WritableStorageFactory, StorageFile, StorageRandomAccessFile, java.io.File, java.io.RandomAccessFile, java.io.InputStream, java.io.OutputStream

Field Summary

Modifier and TypeField and Description
public static final int
VERSION_NUMBER

The version number of this version of the StorageFactory interface and its subsidiary interfaces.

Method Summary

Modifier and TypeMethod and Description
public StorageFile

Returns:

StorageFile
createTemporaryFile
(String
String to prefix the random name generator. It can be null
prefix
,
String
String to suffix the random name generator. ".tmp" will be used if null.
suffix
)

Create and returns a temporary file in temporary file system of database

public String

Returns:

the canonical name
getCanonicalName
()

Get the canonical name of the database.

public char

Returns:

the pathname separator character. (Normally '/' or '\').
getSeparator
()

Get the pathname separator character used by the StorageFile implementation.

public int

Returns:

the StorageFactory version supported by this implementation
getStorageFactoryVersion
()

public StorageFile

Returns:

a directory name
getTempDir
()

Get the abstract name of the directory that holds temporary files.

public void
init(String
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).
home
,
String
The name of the database (directory). The name does not include the subsubprotocol. If null then the storage factory will only be used to deal with the directory containing the databases.
databaseName
,
String
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.
tempDirName
,
String
A unique name that can be used to create the temporary file directory for this database. If null then temporary files will not be created in this StorageFactory instance, and the temporary file directory should not be created.
uniqueName
)

Classes implementing the StorageFactory interface must have a null constructor.

public boolean

Returns:

true if the storage is fast, false if it is slow.
isFast
()

This method is used to determine whether the storage is fast (RAM based) or slow (disk based).

public boolean

Returns:

true if the storage is read only, false if it is writable.
isReadOnlyDatabase
()

Determine whether the database is read only.

public StorageFile

Returns:

A corresponding StorageFile object
newStorageFile
(String
The path name of the file. If null then return the database directory. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the path must be relative to the database and the resulting StorageFile denotes a regular database file (non-temporary).
path
)

Construct a StorageFile from a path name.

public StorageFile

Returns:

A corresponding StorageFile object
newStorageFile
(String
The directory part of the path name. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the directory name must be relative to the database and the resulting StorageFile denotes a regular database file (non-temporary).
directoryName
,
String
The name of the file within the directory.
fileName
)

Construct a non-temporary StorageFile from a directory and file name.

public StorageFile

Returns:

A corresponding StorageFile object
newStorageFile
(StorageFile
The directory part of the path name. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the resulting StorageFile denotes a regular database file (non-temporary).
directoryName
,
String
The name of the file within the directory.
fileName
)

Construct a StorageFile from a directory and file name.

public void
setCanonicalName(String
uniquely identifiable name for this database
name
)

Set the canonicalName.

public void
shutdown()

The shutdown method is called during the normal shutdown of the database.

public boolean

Returns:

true if the storage supports random access, false if it is writable.
supportsRandomAccess
()

Determine whether the storage supports random access.

Field Detail

VERSION_NUMBERback to summary
public static final int VERSION_NUMBER

The version number of this version of the StorageFactory interface and its subsidiary interfaces.

Method Detail

createTemporaryFileback to summary
public StorageFile createTemporaryFile(String prefix, String suffix) throws IOException

Create and returns a temporary file in temporary file system of database

Parameters
prefix:String

String to prefix the random name generator. It can be null

suffix:String

String to suffix the random name generator. ".tmp" will be used if null.

Returns:StorageFile

StorageFile

getCanonicalNameback to summary
public String getCanonicalName() throws 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.

Returns:String

the canonical name

Exceptions
IOException:
if an IO error occurred during the construction of the name.
getSeparatorback to summary
public char getSeparator()

Get the pathname separator character used by the StorageFile implementation. This is the separator that must be used in directory and file name strings.

Returns:char

the pathname separator character. (Normally '/' or '\').

getStorageFactoryVersionback to summary
public int getStorageFactoryVersion()
Returns:int

the StorageFactory version supported by this implementation

getTempDirback to summary
public StorageFile getTempDir()

Get the abstract name of the directory that holds temporary files.

The StorageFactory implementation is not required to make temporary files persistent. That is, files created in the temp directory are not required to survive a shutdown of the database engine.

However, files created in the temp directory must be writable, even if the database is otherwise read-only.

Returns:StorageFile

a directory name

initback to summary
public void init(String home, String databaseName, String tempDirName, String uniqueName) throws IOException

Classes implementing the StorageFactory interface must have a null constructor. The init 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. This method should not create the database directory.

The init method will be called once, before any other method is called, and will not be called again.

Parameters
home:String

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:String

The name of the database (directory). The name does not include the subsubprotocol. If null then the storage factory will only be used to deal with the directory containing the databases.

tempDirName:String

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:String

A unique name that can be used to create the temporary file directory for this database. If null then temporary files will not be created in this StorageFactory instance, and the temporary file directory should not be created.

isFastback to summary
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.

Returns:boolean

true if the storage is fast, false if it is slow.

isReadOnlyDatabaseback to summary
public boolean isReadOnlyDatabase()

Determine whether the database is read only. The database engine supports read-only databases, even in file systems that are writable.

Returns:boolean

true if the storage is read only, false if it is writable.

newStorageFileback to summary
public StorageFile newStorageFile(String path)

Construct a StorageFile from a path name.

Parameters
path:String

The path name of the file. If null then return the database directory. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the path must be relative to the database and the resulting StorageFile denotes a regular database file (non-temporary).

Returns:StorageFile

A corresponding StorageFile object

newStorageFileback to summary
public StorageFile newStorageFile(String directoryName, String fileName)

Construct a non-temporary StorageFile from a directory and file name.

Parameters
directoryName:String

The directory part of the path name. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the directory name must be relative to the database and the resulting StorageFile denotes a regular database file (non-temporary).

fileName:String

The name of the file within the directory.

Returns:StorageFile

A corresponding StorageFile object

newStorageFileback to summary
public StorageFile newStorageFile(StorageFile directoryName, String fileName)

Construct a StorageFile from a directory and file name. The StorageFile may denote a temporary file or a non-temporary database file, depending upon the directoryName parameter.

Parameters
directoryName:StorageFile

The directory part of the path name. If this parameter denotes the temp directory or a directory under the temp directory then the resulting StorageFile denotes a temporary file. Otherwise the resulting StorageFile denotes a regular database file (non-temporary).

fileName:String

The name of the file within the directory.

Returns:StorageFile

A corresponding StorageFile object

setCanonicalNameback to summary
public void setCanonicalName(String name)

Set the canonicalName. May need adjustment due to DERBY-5096

Parameters
name:String

uniquely identifiable name for this database

shutdownback to summary
public void shutdown()

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.

supportsRandomAccessback to summary
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).

Returns:boolean

true if the storage supports random access, false if it is writable.