org.apache.jackrabbit.core.fs.db
Class DbFileSystem

java.lang.Object
  extended byorg.apache.jackrabbit.core.fs.db.DbFileSystem
All Implemented Interfaces:
FileSystem
Direct Known Subclasses:
DB2FileSystem, DerbyFileSystem

public class DbFileSystem
extends Object
implements FileSystem

DbFileSystem is a generic JDBC-based FileSystem implementation for Jackrabbit that persists file system entries in a database table.

It is configured through the following properties:

The required schema objects are automatically created by executing the DDL statements read from the [schema].ddl file. The .ddl file is read from the resources by calling getClass().getResourceAsStream(schema + ".ddl"). Every line in the specified .ddl file is executed separatly by calling java.sql.Statement.execute(String) where every occurence of the the string "${schemaObjectPrefix}" has been replaced with the value of the property schemaObjectPrefix.

The following is a fragment from a sample configuration using MySQL:

   <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
       <param name="driver" value="com.mysql.jdbc.Driver"/>
       <param name="url" value="jdbc:mysql:///test"/>
       <param name="schema" value="mysql"/>
       <param name="schemaObjectPrefix" value="rep_"/>
   </FileSystem>
 
The following is a fragment from a sample configuration using Daffodil One$DB Embedded:
   <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
       <param name="driver" value="in.co.daffodil.db.jdbc.DaffodilDBDriver"/>
       <param name="url" value="jdbc:daffodilDB_embedded:rep;path=${rep.home}/databases;create=true"/>
       <param name="user" value="daffodil"/>
       <param name="password" value="daffodil"/>
       <param name="schema" value="daffodil"/>
       <param name="schemaObjectPrefix" value="rep_"/>
   </FileSystem>
 
The following is a fragment from a sample configuration using MSSQL:
   <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
       <param name="driver" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
       <param name="url" value="jdbc:microsoft:sqlserver://localhost:1433;;DatabaseName=test;SelectMethod=Cursor;"/>
       <param name="schema" value="mssql"/>
       <param name="user" value="sa"/>
       <param name="password" value=""/>
       <param name="schemaObjectPrefix" value="rep_"/>
   </FileSystem>
 
The following is a fragment from a sample configuration using PostgreSQL:
   <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
       <param name="driver" value="org.postgresql.Driver"/>
       <param name="url" value="jdbc:postgresql://localhost/test"/>
       <param name="schema" value="postgresql"/>
       <param name="user" value="postgres"/>
       <param name="password" value="postgres"/>
       <param name="schemaObjectPrefix" value="rep_"/>
   </FileSystem>
 
See also DerbyFileSystem, DB2FileSystem.


Field Summary
protected  Connection con
           
protected  PreparedStatement copyFilesStmt
           
protected  PreparedStatement copyFileStmt
           
protected  PreparedStatement deleteFileStmt
           
protected  PreparedStatement deleteFolderStmt
           
protected  String driver
           
protected static int INITIAL_BUFFER_SIZE
           
protected  boolean initialized
           
protected  PreparedStatement insertFileStmt
           
protected  PreparedStatement insertFolderStmt
           
protected  String password
           
protected  String schema
           
protected static String SCHEMA_OBJECT_PREFIX_VARIABLE
           
protected  String schemaObjectPrefix
           
protected  PreparedStatement selectChildCountStmt
           
protected  PreparedStatement selectDataStmt
           
protected  PreparedStatement selectExistStmt
           
protected  PreparedStatement selectFileAndFolderNamesStmt
           
protected  PreparedStatement selectFileExistStmt
           
protected  PreparedStatement selectFileNamesStmt
           
protected  PreparedStatement selectFolderExistStmt
           
protected  PreparedStatement selectFolderNamesStmt
           
protected  PreparedStatement selectLastModifiedStmt
           
protected  PreparedStatement selectLengthStmt
           
protected  PreparedStatement updateDataStmt
           
protected  PreparedStatement updateLastModifiedStmt
           
protected  String url
           
protected  String user
           
 
Fields inherited from interface org.apache.jackrabbit.core.fs.FileSystem
SEPARATOR, SEPARATOR_CHAR
 
Constructor Summary
DbFileSystem()
          Default constructor
 
Method Summary
protected  void checkSchema()
          Checks if the required schema objects exist and creates them if they don't exist yet.
 void close()
          Close the file system. After calling this method, the file system is no longer accessible.
protected  void closeResultSet(ResultSet rs)
           
protected  void closeStatement(Statement stmt)
           
protected  void closeStream(InputStream in)
           
 void copy(String srcPath, String destPath)
          Copies a file or folder to a new location.
protected  void copyDeepFolder(String srcPath, String destPath)
          Recursively copies the given folder to the given destination.
protected  void copyFile(String srcPath, String destPath)
          Copies the given file entry to the given destination path.
protected  void createDeepFolder(String folderPath)
          Creates the specified files system folder entry, recursively creating any non-existing intermediate folder entries.
 void createFolder(String folderPath)
          Creates the folder named by this path, including any necessary but nonexistent parent folders. Note that if this operation fails it may have succeeded in creating some of the necessary parent folders.
 void deleteFile(String filePath)
          Deletes the file denoted by this path.
 void deleteFolder(String folderPath)
          Deletes the folder denoted by this path. Any contents of this folder (folders and files) will be deleted recursively.
 boolean equals(Object obj)
          
 boolean exists(String path)
          Tests whether the file system entry denoted by this path exists.
 String getDriver()
           
 InputStream getInputStream(String filePath)
          Returns an input stream of the contents of the file denoted by this path.
 OutputStream getOutputStream(String filePath)
          Returns an output stream for writing bytes to the file denoted by this path. The file will be created if it doesn't exist. If the file exists, its contents will be overwritten.
 String getPassword()
           
 RandomAccessOutputStream getRandomAccessOutputStream(String filePath)
          Returns an output stream for writing bytes to the file denoted by this path. The file will be created if it doesn't exist. The current position of the file pointer is set to 0. See also RandomAccessOutputStream.seek(long);
 String getSchema()
           
 String getSchemaObjectPrefix()
           
 String getUrl()
           
 String getUser()
           
 boolean hasChildren(String path)
          Tests whether the file system entry denoted by this path has child entries.
 int hashCode()
          Returns zero to satisfy the Object equals/hashCode contract.
 void init()
          Initialize the file system
 boolean isFile(String path)
          Tests whether the file system entry denoted by this path is a file.
 boolean isFolder(String path)
          Tests whether the file system entry denoted by this path is a folder.
 long lastModified(String path)
          Returns the time that the file system entry denoted by this path was last modified.
 long length(String filePath)
          Returns the length of the file denoted by this path.
 String[] list(String folderPath)
          Returns an array of strings naming the files and folders in the folder denoted by this path.
 String[] listFiles(String folderPath)
          Returns an array of strings naming the files in the folder denoted by this path.
 String[] listFolders(String folderPath)
          Returns an array of strings naming the folders in the folder denoted by this path.
 void move(String srcPath, String destPath)
          Moves a file or folder to a new location.
protected  void prepareSchemaObjectPrefix()
          Makes sure that schemaObjectPrefix does only consist of characters that are allowed in names on the target database.
protected  void resetStatement(PreparedStatement stmt)
          Resets the given PreparedStatement by clearing the parameters and warnings contained.
 void setDriver(String driver)
           
 void setPassword(String password)
           
 void setSchema(String schema)
           
 void setSchemaObjectPrefix(String schemaObjectPrefix)
           
 void setUrl(String url)
           
 void setUser(String user)
           
 void touch(String filePath)
          Set the modified time of an existing file to now.
protected  void verifyRoodExists()
          Verifies that the root file system entry exists.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SCHEMA_OBJECT_PREFIX_VARIABLE

protected static final String SCHEMA_OBJECT_PREFIX_VARIABLE
See Also:
Constant Field Values

initialized

protected boolean initialized

driver

protected String driver

url

protected String url

user

protected String user

password

protected String password

schema

protected String schema

schemaObjectPrefix

protected String schemaObjectPrefix

INITIAL_BUFFER_SIZE

protected static final int INITIAL_BUFFER_SIZE
See Also:
Constant Field Values

con

protected Connection con

selectExistStmt

protected PreparedStatement selectExistStmt

selectFileExistStmt

protected PreparedStatement selectFileExistStmt

selectFolderExistStmt

protected PreparedStatement selectFolderExistStmt

selectChildCountStmt

protected PreparedStatement selectChildCountStmt

selectDataStmt

protected PreparedStatement selectDataStmt

selectLastModifiedStmt

protected PreparedStatement selectLastModifiedStmt

selectLengthStmt

protected PreparedStatement selectLengthStmt

selectFileNamesStmt

protected PreparedStatement selectFileNamesStmt

selectFolderNamesStmt

protected PreparedStatement selectFolderNamesStmt

selectFileAndFolderNamesStmt

protected PreparedStatement selectFileAndFolderNamesStmt

deleteFileStmt

protected PreparedStatement deleteFileStmt

deleteFolderStmt

protected PreparedStatement deleteFolderStmt

insertFileStmt

protected PreparedStatement insertFileStmt

insertFolderStmt

protected PreparedStatement insertFolderStmt

updateDataStmt

protected PreparedStatement updateDataStmt

updateLastModifiedStmt

protected PreparedStatement updateLastModifiedStmt

copyFileStmt

protected PreparedStatement copyFileStmt

copyFilesStmt

protected PreparedStatement copyFilesStmt
Constructor Detail

DbFileSystem

public DbFileSystem()
Default constructor

Method Detail

getUrl

public String getUrl()

setUrl

public void setUrl(String url)

getUser

public String getUser()

setUser

public void setUser(String user)

getPassword

public String getPassword()

setPassword

public void setPassword(String password)

getDriver

public String getDriver()

setDriver

public void setDriver(String driver)

getSchemaObjectPrefix

public String getSchemaObjectPrefix()

setSchemaObjectPrefix

public void setSchemaObjectPrefix(String schemaObjectPrefix)

getSchema

public String getSchema()

setSchema

public void setSchema(String schema)

equals

public boolean equals(Object obj)


hashCode

public int hashCode()
Returns zero to satisfy the Object equals/hashCode contract. This class is mutable and not meant to be used as a hash key.

Returns:
always zero
See Also:
Object.hashCode()

init

public void init()
          throws FileSystemException
Initialize the file system

Specified by:
init in interface FileSystem
Throws:
FileSystemException - if the file system initialization fails

close

public void close()
           throws FileSystemException
Close the file system. After calling this method, the file system is no longer accessible.

Specified by:
close in interface FileSystem
Throws:
FileSystemException

createFolder

public void createFolder(String folderPath)
                  throws FileSystemException
Creates the folder named by this path, including any necessary but nonexistent parent folders. Note that if this operation fails it may have succeeded in creating some of the necessary parent folders.

Specified by:
createFolder in interface FileSystem
Parameters:
folderPath - the path of the folder to be created.
Throws:
FileSystemException - if a file system entry denoted by path already exists or if another error occurs.

deleteFile

public void deleteFile(String filePath)
                throws FileSystemException
Deletes the file denoted by this path.

Specified by:
deleteFile in interface FileSystem
Parameters:
filePath - the path of the file to be deleted.
Throws:
FileSystemException - if this path does not denote a file or if another error occurs.

deleteFolder

public void deleteFolder(String folderPath)
                  throws FileSystemException
Deletes the folder denoted by this path. Any contents of this folder (folders and files) will be deleted recursively.

Specified by:
deleteFolder in interface FileSystem
Parameters:
folderPath - the path of the folder to be deleted.
Throws:
FileSystemException - if this path does not denote a folder or if another error occurs.

exists

public boolean exists(String path)
               throws FileSystemException
Tests whether the file system entry denoted by this path exists.

Specified by:
exists in interface FileSystem
Parameters:
path - the path of a file system entry.
Returns:
true if the file system entry at path is a file; false otherwise.
Throws:
FileSystemException

isFile

public boolean isFile(String path)
               throws FileSystemException
Tests whether the file system entry denoted by this path is a file.

Specified by:
isFile in interface FileSystem
Parameters:
path - the path of a file system entry.
Returns:
true if the file system entry at path is a file; false otherwise.
Throws:
FileSystemException

isFolder

public boolean isFolder(String path)
                 throws FileSystemException
Tests whether the file system entry denoted by this path is a folder.

Specified by:
isFolder in interface FileSystem
Parameters:
path - the path of a file system entry.
Returns:
true if the file system entry at path is a folder; false otherwise.
Throws:
FileSystemException

lastModified

public long lastModified(String path)
                  throws FileSystemException
Returns the time that the file system entry denoted by this path was last modified.

Specified by:
lastModified in interface FileSystem
Parameters:
path - the path of a file system entry.
Returns:
A long value representing the time the file system entry was last modified, measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970), or 0L if the modification time can't be determined.
Throws:
FileSystemException - if the file system entry does not exist.

length

public long length(String filePath)
            throws FileSystemException
Returns the length of the file denoted by this path.

Specified by:
length in interface FileSystem
Parameters:
filePath - the path of the file.
Returns:
The length, in bytes, of the file denoted by this path, or -1L if the length can't be determined.
Throws:
FileSystemException - if the path does not denote an existing file.

hasChildren

public boolean hasChildren(String path)
                    throws FileSystemException
Tests whether the file system entry denoted by this path has child entries.

Specified by:
hasChildren in interface FileSystem
Parameters:
path - the path of a file system entry.
Returns:
true if the file system entry at path has child entries; false otherwise.
Throws:
FileSystemException

list

public String[] list(String folderPath)
              throws FileSystemException
Returns an array of strings naming the files and folders in the folder denoted by this path.

Specified by:
list in interface FileSystem
Parameters:
folderPath - the path of the folder whose contents is to be listed.
Returns:
an array of strings naming the files and folders in the folder denoted by this path.
Throws:
FileSystemException - if this path does not denote a folder or if another error occurs.

listFiles

public String[] listFiles(String folderPath)
                   throws FileSystemException
Returns an array of strings naming the files in the folder denoted by this path.

Specified by:
listFiles in interface FileSystem
Parameters:
folderPath - the path of the folder whose contents is to be listed.
Returns:
an array of strings naming the files in the folder denoted by this path.
Throws:
FileSystemException - if this path does not denote a folder or if another error occurs.

listFolders

public String[] listFolders(String folderPath)
                     throws FileSystemException
Returns an array of strings naming the folders in the folder denoted by this path.

Specified by:
listFolders in interface FileSystem
Parameters:
folderPath - the path of the folder whose contents is to be listed.
Returns:
an array of strings naming the folders in the folder denoted by this path.
Throws:
FileSystemException - if this path does not denote a folder or if another error occurs.

touch

public void touch(String filePath)
           throws FileSystemException
Set the modified time of an existing file to now.

Specified by:
touch in interface FileSystem
Parameters:
filePath - the path of the file.
Throws:
FileSystemException - if the path does not denote an existing file.

getInputStream

public InputStream getInputStream(String filePath)
                           throws FileSystemException
Returns an input stream of the contents of the file denoted by this path.

Specified by:
getInputStream in interface FileSystem
Parameters:
filePath - the path of the file.
Returns:
an input stream of the contents of the file.
Throws:
FileSystemException - if the file does not exist or if it cannot be read from

getOutputStream

public OutputStream getOutputStream(String filePath)
                             throws FileSystemException
Returns an output stream for writing bytes to the file denoted by this path. The file will be created if it doesn't exist. If the file exists, its contents will be overwritten.

Specified by:
getOutputStream in interface FileSystem
Parameters:
filePath - the path of the file.
Returns:
an output stream for writing bytes to the file.
Throws:
FileSystemException - if the file cannot be written to or created

getRandomAccessOutputStream

public RandomAccessOutputStream getRandomAccessOutputStream(String filePath)
                                                     throws FileSystemException,
                                                            UnsupportedOperationException
Returns an output stream for writing bytes to the file denoted by this path. The file will be created if it doesn't exist. The current position of the file pointer is set to 0. See also RandomAccessOutputStream.seek(long);

Specified by:
getRandomAccessOutputStream in interface FileSystem
Parameters:
filePath - the path of the file.
Returns:
an random access output stream for writing bytes to the file.
Throws:
UnsupportedOperationException - if the implementation does not support file access through a RandomAccessOutputStream.
FileSystemException - if the file could not be created or if the output stream cannot be obtained.

copy

public void copy(String srcPath,
                 String destPath)
          throws FileSystemException
Copies a file or folder to a new location.

Specified by:
copy in interface FileSystem
Parameters:
srcPath - the path of the file or folder to be copied.
destPath - the destination path to which the file or folder is to be copied.
Throws:
FileSystemException - if the copy fails

move

public void move(String srcPath,
                 String destPath)
          throws FileSystemException
Moves a file or folder to a new location.

Specified by:
move in interface FileSystem
Parameters:
srcPath - the path of the file or folder to be moved.
destPath - the destination path to which the file or folder is to be moved.
Throws:
FileSystemException - if the move fails

prepareSchemaObjectPrefix

protected void prepareSchemaObjectPrefix()
                                  throws Exception
Makes sure that schemaObjectPrefix does only consist of characters that are allowed in names on the target database. Illegal characters will be escaped as necessary.

Throws:
Exception - if an error occurs

checkSchema

protected void checkSchema()
                    throws Exception
Checks if the required schema objects exist and creates them if they don't exist yet.

Throws:
Exception - if an error occurs

verifyRoodExists

protected void verifyRoodExists()
                         throws Exception
Verifies that the root file system entry exists. If it doesn't exist yet it will be automatically created.

Throws:
Exception - if an error occurs

createDeepFolder

protected void createDeepFolder(String folderPath)
                         throws FileSystemException
Creates the specified files system folder entry, recursively creating any non-existing intermediate folder entries.

Parameters:
folderPath - folder entry to create
Throws:
FileSystemException - if an error occurs

copyDeepFolder

protected void copyDeepFolder(String srcPath,
                              String destPath)
                       throws FileSystemException
Recursively copies the given folder to the given destination.

Parameters:
srcPath - folder to be copied
destPath - destination path to which the folder is to be copied
Throws:
FileSystemException - if an error occurs

copyFile

protected void copyFile(String srcPath,
                        String destPath)
                 throws FileSystemException
Copies the given file entry to the given destination path. The parent folder of the destination path will be created if it doesn't exist already. If the destination path refers to an existing file, the file will be overwritten.

Parameters:
srcPath - file to be copied
destPath - destination path to which the file is to be copied
Throws:
FileSystemException - if an error occurs

resetStatement

protected void resetStatement(PreparedStatement stmt)
Resets the given PreparedStatement by clearing the parameters and warnings contained.

NOTE: This method MUST be called in a synchronized context as neither this method nor the PreparedStatement instance on which it operates are thread safe.

Parameters:
stmt - The PreparedStatement to reset. If null this method does nothing.

closeResultSet

protected void closeResultSet(ResultSet rs)

closeStream

protected void closeStream(InputStream in)

closeStatement

protected void closeStatement(Statement stmt)


Copyright © 2004-2006 The Apache Software Foundation. All Rights Reserved.