org.apache.derby.impl.io
Class DirStorageFactory

java.lang.Object
  extended byorg.apache.derby.impl.io.BaseStorageFactory
      extended byorg.apache.derby.impl.io.DirStorageFactory
All Implemented Interfaces:
StorageFactory, WritableStorageFactory
Direct Known Subclasses:
DirStorageFactory4

public class DirStorageFactory
extends BaseStorageFactory
implements WritableStorageFactory

This class provides a disk based implementation 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
protected  java.lang.String canonicalName
           
protected  java.lang.String dataDirectory
           
(package private)  java.lang.String home
           
protected  java.lang.String separatedDataDirectory
           
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
DirStorageFactory()
           
 
Method Summary
(package private)  void createTempDir()
           
(package private)  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)  StorageFile newPersistentFile(StorageFile directoryName, java.lang.String fileName)
          Construct a persistent StorageFile from a directory and path name.
(package private)  StorageFile newPersistentFile(java.lang.String path)
          Construct a persistent StorageFile from a path name.
(package private)  StorageFile newPersistentFile(java.lang.String directoryName, java.lang.String fileName)
          Construct a persistent StorageFile from a directory and path name.
 StorageFile newStorageFile(StorageFile directoryName, java.lang.String fileName)
          Construct a StorageFile from a directory and file 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.
 void shutdown()
          The shutdown method is called during the normal shutdown of the database.
 boolean supportsRandomAccess()
          Determine whether the storage supports random access.
 boolean supportsRws()
          This method tests whether the "rws" and "rwd" modes are implemented.
 void sync(java.io.OutputStream stream, boolean metaData)
          Force the data of an output stream out to the underlying storage.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.io.StorageFactory
getCanonicalName, getSeparator, getStorageFactoryVersion, getTempDir, init, isFast, shutdown
 

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
Constructor Detail

DirStorageFactory

public DirStorageFactory()
Method Detail

newStorageFile

public final StorageFile newStorageFile(java.lang.String path)
Construct a StorageFile from a path name.

Specified by:
newStorageFile in interface StorageFactory
Overrides:
newStorageFile in class BaseStorageFactory
Parameters:
path - The path name of the file
Returns:
A corresponding StorageFile object

newStorageFile

public final StorageFile newStorageFile(java.lang.String directoryName,
                                        java.lang.String fileName)
Construct a StorageFile from a directory and file name.

Specified by:
newStorageFile in interface StorageFactory
Overrides:
newStorageFile in class BaseStorageFactory
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 final StorageFile newStorageFile(StorageFile directoryName,
                                        java.lang.String fileName)
Construct a StorageFile from a directory and file name.

Specified by:
newStorageFile in interface StorageFactory
Overrides:
newStorageFile in class BaseStorageFactory
Parameters:
directoryName - The directory part of the path name.
fileName - The name of the file within the directory.
Returns:
A corresponding StorageFile object

newPersistentFile

StorageFile newPersistentFile(java.lang.String path)
Construct a persistent StorageFile from a path name.

Specified by:
newPersistentFile in class BaseStorageFactory
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

StorageFile newPersistentFile(java.lang.String directoryName,
                              java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.

Specified by:
newPersistentFile in class BaseStorageFactory
Parameters:
fileName - The name of the file within the directory. Guaranteed not to be null.
Returns:
A corresponding StorageFile object

newPersistentFile

StorageFile newPersistentFile(StorageFile directoryName,
                              java.lang.String fileName)
Construct a persistent StorageFile from a directory and path name.

Specified by:
newPersistentFile in class BaseStorageFactory
Parameters:
fileName - The name of the file within the directory. Guaranteed not to be null.
Returns:
A corresponding StorageFile object

sync

public void sync(java.io.OutputStream stream,
                 boolean metaData)
          throws java.io.IOException,
                 java.io.SyncFailedException
Force the data of an output stream out to the underlying storage. That is, ensure that it has been made persistent. If the database is to be transient, that is, if the database does not survive a restart, then the sync method implementation need not do anything.

Specified by:
sync in interface WritableStorageFactory
Parameters:
stream - The stream to be synchronized.
metaData - If true then this method must force both changes to the file's contents and metadata to be written to storage; if false, it need only force file content changes to be written. The implementation is allowed to ignore this parameter and always force out metadata changes.
Throws:
java.io.IOException - if an I/O error occurs.
java.io.SyncFailedException - Thrown when the buffers cannot be flushed, or because the system cannot guarantee that all the buffers have been synchronized with physical media.

supportsRws

public boolean supportsRws()
This method tests whether the "rws" and "rwd" modes are implemented. If the "rws" method is supported then the database engine will conclude that the write methods of "rws" mode StorageRandomAccessFiles are slow but the sync method is fast and optimize accordingly.

Specified by:
supportsRws in interface WritableStorageFactory
Returns:
true if an StIRandomAccess file opened with "rws" or "rwd" modes immediately writes data to the underlying storage, false if not.

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 interface StorageFactory
Overrides:
isReadOnlyDatabase in class BaseStorageFactory

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 interface StorageFactory
Overrides:
supportsRandomAccess in class BaseStorageFactory
Returns:
true if the storage supports random access, false if it is writable.

doInit

void doInit()
      throws java.io.IOException
Specified by:
doInit in class BaseStorageFactory
Throws:
java.io.IOException

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 interface StorageFactory
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).

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 interface StorageFactory

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 interface StorageFactory
Returns:
the canonical name
Throws:
java.io.IOException - if an IO error occurred during the construction of the name.

getSeparator

public char getSeparator()
Get the pathname separator character used by the StorageFile implementation.

Specified by:
getSeparator in interface StorageFactory
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 interface StorageFactory
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 interface StorageFactory
Returns:
true if the storage is fast, false if it is slow.

createTempDir

void createTempDir()
             throws java.io.IOException
Throws:
java.io.IOException

getStorageFactoryVersion

public int getStorageFactoryVersion()
Specified by:
getStorageFactoryVersion in interface StorageFactory
Returns:
the StorageFactory version supported by this implementation


Apache Derby V10.0 Engine Documentation - Copyright © 1997,2004 The Apache Software Foundation or its licensors, as applicable.