/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.repository;
import java.io.File;
import org.openrdf.model.ValueFactory;
/**
* A Sesame repository that contains RDF data that can be queried and updated.
* Access to the repository can be acquired by openening a connection to it.
* This connection can then be used to query and/or update the contents of the
* repository. Depending on the implementation of the repository, it may or may
* not support multiple concurrent connections.
* <p>
* Please note that a repository needs to be initialized before it can be used
* and that it should be shut down before it is discarded/garbage collected.
* Forgetting the latter can result in loss of data (depending on the Repository
* implementation)!
*
* @author Arjohn Kampman
*/
public interface Repository {
/**
* Set the directory where data and logging for this repository is stored.
*
* @param dataDir
* the directory where data for this repository is stored
*/
public void setDataDir(File dataDir);
/**
* Get the directory where data and logging for this repository is stored.
*
* @return the directory where data for this repository is stored.
*/
public File getDataDir();
/**
* Initializes this repository. A repository needs to be initialized before
* it can be used.
*
* @throws RepositoryException
* If the initialization failed.
*/
public void initialize()
throws RepositoryException;
/**
* Shuts the repository down, releasing any resources that it keeps hold of.
* Once shut down, the repository can no longer be used until it is
* re-initialized.
*/
public void shutDown()
throws RepositoryException;
/**
* Checks whether this repository is writable, i.e. if the data contained in
* this repository can be changed. The writability of the repository is
* determined by the writability of the Sail that this repository operates
* on.
*/
public boolean isWritable()
throws RepositoryException;
/**
* Opens a connection to this repository that can be used for querying and
* updating the contents of the repository. Created connections need to be
* closed to make sure that any resources they keep hold of are released. The
* best way to do this is to use a try-finally-block as follows:
*
* <pre>
* Connection con = repository.getConnection();
* try {
* // perform operations on the connection
* }
* finally {
* con.close();
* }
* </pre>
*
* @return A connection that allows operations on this repository.
* @throws RepositoryException
* If something went wrong during the creation of the Connection.
*/
public RepositoryConnection getConnection()
throws RepositoryException;
/**
* Gets a ValueFactory for this Repository.
*
* @return A repository-specific ValueFactory.
*/
public ValueFactory getValueFactory();
}