org.apache.derby.impl.services.monitor
Class StorageFactoryService

java.lang.Object
  extended by org.apache.derby.impl.services.monitor.StorageFactoryService
All Implemented Interfaces:
PersistentService

final class StorageFactoryService
extends java.lang.Object
implements PersistentService

This class implements the PersistentService interface using a StorageFactory class. It handles all subSubProtocols except for cache.


Nested Class Summary
(package private)  class StorageFactoryService.DirectoryList
           
private static class StorageFactoryService.FileOperationHelper
          Helper class for common file operations on the service properties files.
 
Field Summary
private  java.lang.String canonicalHome
           
private  java.lang.String home
           
private  StorageFactory rootStorageFactory
           
private  char separatorChar
           
private static java.lang.String SERVICE_PROPERTIES_EOF_TOKEN
          Marker printed as the last line of the service properties file.
private  java.lang.Class storageFactoryClass
           
private  java.lang.String subSubProtocol
           
 
Fields inherited from interface org.apache.derby.iapi.services.monitor.PersistentService
CLASSPATH, DB_README_FILE_NAME, DIRECTORY, HTTP, HTTPS, INMEMORY, JAR, PROPERTIES_NAME, ROOT, TYPE
 
Constructor Summary
StorageFactoryService(java.lang.String subSubProtocol, java.lang.Class storageFactoryClass)
           
 
Method Summary
 void createDataWarningFile(StorageFactory sf)
          Put a readme file in database directory which will caution users against touching any files in the directory.
 java.lang.String createServiceRoot(java.lang.String name, boolean deleteExisting)
          Properties cannot be saved
private  boolean fileExists(java.io.File file)
          Checks if the specified file exists.
 java.util.Enumeration getBootTimeServices()
          Return a list of all the directoies in the system directory.
 java.lang.String getCanonicalServiceName(java.lang.String name)
          Convert a service name into its canonical form.
private  java.lang.String getDirectoryPath(java.lang.String name)
           
private static java.lang.String getMostAccuratePath(StorageFile file)
          Helper method returning the "best-effort-most-accurate" path.
private  java.lang.String getProtocolLeadIn()
          Returns the protocol lead in for this service.
 java.util.Properties getServiceProperties(java.lang.String serviceName, java.util.Properties defaultProperties)
          Open the service properties in the directory identified by the service name.
 java.lang.Class getStorageFactoryClass()
          Get the StorageFactory implementation for this PersistentService
 StorageFactory getStorageFactoryInstance(boolean useHome, java.lang.String databaseName, java.lang.String tempDirName, java.lang.String uniqueName)
          Get an initialized StorageFactoryInstance
 java.lang.String getType()
          The type of the service is 'directory'
 java.lang.String getUserServiceName(java.lang.String serviceName)
          Return the user form of a service name.
 boolean hasStorageFactory()
           
 boolean isSameService(java.lang.String serviceName1, java.lang.String serviceName2)
           
private  StorageFactory privGetStorageFactoryInstance(boolean useHome, java.lang.String databaseName, java.lang.String tempDirName, java.lang.String uniqueName)
           
protected  java.lang.String recreateServiceRoot(java.lang.String serviceName, java.util.Properties properties)
           
 boolean removeServiceRoot(java.lang.String serviceName)
          Remove a service's root and its contents.
private  void resolveServicePropertiesFiles(StorageFactory sf, StorageFile spf)
          Resolves situations where a failure condition left the service properties file, and/or the service properties file backup, in an inconsistent state.
 void saveServiceProperties(java.lang.String serviceName, java.util.Properties properties)
          Save service.properties during backup
 void saveServiceProperties(java.lang.String serviceName, StorageFactory sf, java.util.Properties properties, boolean replace)
           
private  void vetService(StorageFactory storageFactory, java.lang.String serviceName)
          Verify that the service directory looks ok before objecting that the database already exists.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SERVICE_PROPERTIES_EOF_TOKEN

private static final java.lang.String SERVICE_PROPERTIES_EOF_TOKEN
Marker printed as the last line of the service properties file.

See Also:
Constant Field Values

home

private java.lang.String home

canonicalHome

private java.lang.String canonicalHome

subSubProtocol

private final java.lang.String subSubProtocol

storageFactoryClass

private final java.lang.Class storageFactoryClass

rootStorageFactory

private StorageFactory rootStorageFactory

separatorChar

private char separatorChar
Constructor Detail

StorageFactoryService

StorageFactoryService(java.lang.String subSubProtocol,
                      java.lang.Class storageFactoryClass)
                throws StandardException
Throws:
StandardException
Method Detail

hasStorageFactory

public boolean hasStorageFactory()
Specified by:
hasStorageFactory in interface PersistentService
Returns:
true if the PersistentService has a StorageFactory, false if not.

getStorageFactoryInstance

public StorageFactory getStorageFactoryInstance(boolean useHome,
                                                java.lang.String databaseName,
                                                java.lang.String tempDirName,
                                                java.lang.String uniqueName)
                                         throws StandardException,
                                                java.io.IOException
Get an initialized StorageFactoryInstance

Specified by:
getStorageFactoryInstance in interface PersistentService
Parameters:
useHome - If true and the database name is not absolute then the database directory will be relative to the home directory, if one is defined in the properties file.
databaseName - 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 - 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. If null then temporary files will not be created in this StorageFactory instance.
Returns:
An initialized StorageFactory.
Throws:
java.io.IOException - if create, the database directory does not exist, and it cannot be created; if !create and the database does not exist as a directory.
StandardException

privGetStorageFactoryInstance

private StorageFactory privGetStorageFactoryInstance(boolean useHome,
                                                     java.lang.String databaseName,
                                                     java.lang.String tempDirName,
                                                     java.lang.String uniqueName)
                                              throws java.lang.InstantiationException,
                                                     java.lang.IllegalAccessException,
                                                     java.io.IOException
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.io.IOException

getType

public java.lang.String getType()
The type of the service is 'directory'

Specified by:
getType in interface PersistentService
See Also:
PersistentService.getType()

getBootTimeServices

public java.util.Enumeration getBootTimeServices()
Return a list of all the directoies in the system directory.

Specified by:
getBootTimeServices in interface PersistentService
See Also:
PersistentService.getBootTimeServices()

getServiceProperties

public java.util.Properties getServiceProperties(java.lang.String serviceName,
                                                 java.util.Properties defaultProperties)
                                          throws StandardException
Open the service properties in the directory identified by the service name.

Specified by:
getServiceProperties in interface PersistentService
Returns:
A Properties object or null if serviceName does not represent a valid service.
Throws:
StandardException - Service appears valid but the properties cannot be created.

saveServiceProperties

public void saveServiceProperties(java.lang.String serviceName,
                                  StorageFactory sf,
                                  java.util.Properties properties,
                                  boolean replace)
                           throws StandardException
Specified by:
saveServiceProperties in interface PersistentService
Throws:
StandardException - Properties cannot be saved.

createDataWarningFile

public void createDataWarningFile(StorageFactory sf)
                           throws StandardException
Description copied from interface: PersistentService
Put a readme file in database directory which will caution users against touching any files in the directory. This file will be created at database creation time.

Specified by:
createDataWarningFile in interface PersistentService
Parameters:
sf - StorageFactory will be used to create the file
Throws:
StandardException - File can't be created
See Also:
PersistentService.createDataWarningFile(org.apache.derby.io.StorageFactory)

saveServiceProperties

public void saveServiceProperties(java.lang.String serviceName,
                                  java.util.Properties properties)
                           throws StandardException
Save service.properties during backup

Specified by:
saveServiceProperties in interface PersistentService
Parameters:
serviceName - backup location of the service
properties - the properties to save
Throws:
StandardException - Properties cannot be saved.

resolveServicePropertiesFiles

private void resolveServicePropertiesFiles(StorageFactory sf,
                                           StorageFile spf)
                                    throws StandardException
Resolves situations where a failure condition left the service properties file, and/or the service properties file backup, in an inconsistent state.

Note that this method doesn't resolve the situation where both the current service properties file and the backup file are missing.

Parameters:
sf - the storage factory for the service
spf - the service properties file
Throws:
StandardException - if a file operation on a service properties file fails

recreateServiceRoot

protected java.lang.String recreateServiceRoot(java.lang.String serviceName,
                                               java.util.Properties properties)
                                        throws StandardException
Throws:
StandardException

createServiceRoot

public java.lang.String createServiceRoot(java.lang.String name,
                                          boolean deleteExisting)
                                   throws StandardException
Properties cannot be saved

Specified by:
createServiceRoot in interface PersistentService
Throws:
StandardException - Service root cannot be created.

vetService

private void vetService(StorageFactory storageFactory,
                        java.lang.String serviceName)
                 throws StandardException
Verify that the service directory looks ok before objecting that the database already exists.

Throws:
StandardException

getDirectoryPath

private java.lang.String getDirectoryPath(java.lang.String name)

removeServiceRoot

public boolean removeServiceRoot(java.lang.String serviceName)
Description copied from interface: PersistentService
Remove a service's root and its contents.

Specified by:
removeServiceRoot in interface PersistentService

getCanonicalServiceName

public java.lang.String getCanonicalServiceName(java.lang.String name)
                                         throws StandardException
Description copied from interface: PersistentService
Convert a service name into its canonical form. Returns null if the name cannot be converted into a canonical form.

Specified by:
getCanonicalServiceName in interface PersistentService
Throws:
StandardException

getUserServiceName

public java.lang.String getUserServiceName(java.lang.String serviceName)
Description copied from interface: PersistentService
Return the user form of a service name. This name is only valid within this system. The separator character used must be '/'

Specified by:
getUserServiceName in interface PersistentService

isSameService

public boolean isSameService(java.lang.String serviceName1,
                             java.lang.String serviceName2)
Specified by:
isSameService in interface PersistentService

fileExists

private final boolean fileExists(java.io.File file)
Checks if the specified file exists.

Parameters:
file - the file to check
Returns:
true if the file exists, false if not.
Throws:
java.lang.SecurityException - if the required privileges are missing

getStorageFactoryClass

public java.lang.Class getStorageFactoryClass()
Get the StorageFactory implementation for this PersistentService

Returns:
the StorageFactory class.

getProtocolLeadIn

private java.lang.String getProtocolLeadIn()
Returns the protocol lead in for this service.

Returns:
An empty string if the protocol is the default one (PersistentService.DIRECTORY), the subsub protocol name followed by colon otherwise.

getMostAccuratePath

private static java.lang.String getMostAccuratePath(StorageFile file)
Helper method returning the "best-effort-most-accurate" path.

Parameters:
file - the file to get the path to
Returns:
The file path, either ala File.getCanonicalPath or File.getPath.

Built on Wed 2013-06-12 15:21:56+0000, from revision ???

Apache Derby V10.10 Internals - Copyright © 2004,2013 The Apache Software Foundation. All Rights Reserved.