Class SailRepositoryConnection
java.lang.Object
org.eclipse.rdf4j.repository.base.AbstractRepositoryConnection
org.eclipse.rdf4j.repository.sail.SailRepositoryConnection
- All Implemented Interfaces:
AutoCloseable
,HttpClientDependent
,SessionManagerDependent
,FederatedServiceResolverClient
,RepositoryConnection
,RepositoryResolverClient
- Direct Known Subclasses:
FedXRepositoryConnection
public class SailRepositoryConnection
extends AbstractRepositoryConnection
implements FederatedServiceResolverClient, RepositoryResolverClient, HttpClientDependent, SessionManagerDependent
An implementation of the
RepositoryConnection
interface that wraps a SailConnection
.- Author:
- Jeen Broekstra, Arjohn Kampman
-
Field Summary
Fields inherited from class org.eclipse.rdf4j.repository.base.AbstractRepositoryConnection
logger
-
Constructor Summary
ModifierConstructorDescriptionprotected
SailRepositoryConnection
(SailRepository repository, SailConnection sailConnection) Creates a new repository connection that will wrap the supplied SailConnection. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addWithoutCommit
(Resource subject, IRI predicate, Value object, Resource... contexts) void
begin()
Begins a new transaction, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction.void
begin
(IsolationLevel level) Begins a new transaction with the suppliedIsolationLevel
, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction.void
begin
(TransactionSetting... settings) Begins a new transaction with the suppliedTransactionSetting
, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction.void
Removes all statements from a specific contexts in the repository.void
Removes all namespace declarations from the repository.void
close()
Closes the connection, freeing resources.void
commit()
Commits the active transaction.protected <E> RepositoryResult<E>
createRepositoryResult
(CloseableIteration<? extends E, SailException> sailIter) Wraps a CloseableIteration coming from a Sail in a RepositoryResult object, applying the required conversionsvoid
exportStatements
(Resource subj, IRI pred, Value obj, boolean includeInferred, RDFHandler handler, Resource... contexts) Exports all statements with a specific subject, predicate and/or object from the repository, optionally from the specified contexts.Gets all resources that are used as content identifiers.Gets theFederatedServiceResolver
used by this client.org.apache.http.client.HttpClient
HttpClient
that has been assigned or has been used by this object.HttpClientSessionManager
that has been assigned or has been used by this object.getNamespace
(String prefix) Gets the namespace that is associated with the specified prefix, if any.Gets all declared namespaces as a RepositoryResult ofNamespace
objects.Returns the underlying SailConnection.getStatements
(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) Gets all statements with a specific subject, predicate and/or object from the repository.boolean
hasStatement
(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) Checks whether the repository contains statements with a specific subject, predicate and/or object, optionally in the specified contexts.boolean
isActive()
Indicates if a transaction is currently active on the connection.boolean
isEmpty()
Returns true if this repository does not contain any (explicit) statements.boolean
isOpen()
Checks whether this connection is open.void
prepare()
Checks for an error state in the active transaction that would force the transaction to be rolled back.prepareBooleanQuery
(QueryLanguage ql, String queryString, String baseURI) Prepares queries that return true or false.prepareGraphQuery
(QueryLanguage ql, String queryString, String baseURI) Prepares queries that produce RDF graphs.prepareQuery
(QueryLanguage ql, String queryString, String baseURI) Prepares a query for evaluation on this repository (optional operation).prepareTupleQuery
(QueryLanguage ql, String queryString, String baseURI) Prepares a query that produces sets of value tuples.prepareUpdate
(QueryLanguage ql, String update, String baseURI) Prepares an Update operation.void
removeNamespace
(String prefix) Removes a namespace declaration by removing the association between a prefix and a namespace name.protected void
removeWithoutCommit
(Resource subject, IRI predicate, Value object, Resource... contexts) void
rollback()
Rolls back all updates in the active transaction.void
Sets theFederatedServiceResolver
to use for this client.void
setHttpClient
(org.apache.http.client.HttpClient client) Assign anHttpClient
that this object should use.void
Assign anHttpClientSessionManager
that this object should use.void
setNamespace
(String prefix, String name) Sets the prefix for a namespace.void
setRepositoryResolver
(RepositoryResolver resolver) long
Returns the number of (explicit) statements that are in the specified contexts in this repository.toString()
Methods inherited from class org.eclipse.rdf4j.repository.base.AbstractRepositoryConnection
add, add, add, add, add, add, add, add, addWithoutCommit, conditionalCommit, conditionalRollback, export, getIsolationLevel, getParserConfig, getRepository, getValueFactory, hasStatement, isAutoCommit, prepareBooleanQuery, prepareGraphQuery, prepareQuery, prepareTupleQuery, prepareUpdate, remove, remove, remove, remove, removeWithoutCommit, setAutoCommit, setIsolationLevel, setParserConfig, startLocalTransaction
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.rdf4j.repository.RepositoryConnection
add, add, add, add, add, add, add, add, getStatements, prepareBooleanQuery, prepareGraphQuery, prepareQuery, prepareTupleQuery, prepareUpdate, remove, remove
-
Constructor Details
-
SailRepositoryConnection
Creates a new repository connection that will wrap the supplied SailConnection. SailRepositoryConnection objects are created bySailRepository.getConnection()
.
-
-
Method Details
-
getSailConnection
Returns the underlying SailConnection. -
setFederatedServiceResolver
Description copied from interface:FederatedServiceResolverClient
Sets theFederatedServiceResolver
to use for this client.- Specified by:
setFederatedServiceResolver
in interfaceFederatedServiceResolverClient
- Parameters:
resolver
- The resolver to use.
-
getFederatedServiceResolver
Description copied from interface:FederatedServiceResolverClient
Gets theFederatedServiceResolver
used by this client.- Specified by:
getFederatedServiceResolver
in interfaceFederatedServiceResolverClient
-
setRepositoryResolver
- Specified by:
setRepositoryResolver
in interfaceRepositoryResolverClient
-
getHttpClientSessionManager
Description copied from interface:SessionManagerDependent
HttpClientSessionManager
that has been assigned or has been used by this object. The life cycle might not be or might be tied to this object, depending on whetherHttpClientSessionManager
was passed to or created by this object respectively.- Specified by:
getHttpClientSessionManager
in interfaceSessionManagerDependent
- Returns:
- a
HttpClientSessionManager
instance or null
-
setHttpClientSessionManager
Description copied from interface:SessionManagerDependent
Assign anHttpClientSessionManager
that this object should use. The life cycle of the givenHttpClientSessionManager
is independent of this object. Closing or shutting down this object does not have any impact on the given client. Callers must ensure that the given client is properly closed elsewhere.- Specified by:
setHttpClientSessionManager
in interfaceSessionManagerDependent
- Parameters:
client
-
-
getHttpClient
public org.apache.http.client.HttpClient getHttpClient()Description copied from interface:HttpClientDependent
HttpClient
that has been assigned or has been used by this object. The life cycle might not be or might be tied to this object, depending on whetherHttpClient
was passed to or created by this object respectively.- Specified by:
getHttpClient
in interfaceHttpClientDependent
- Returns:
- an
HttpClient
instance or null
-
setHttpClient
public void setHttpClient(org.apache.http.client.HttpClient client) Description copied from interface:HttpClientDependent
Assign anHttpClient
that this object should use. The life cycle of the givenHttpClient
is independent of this object. Closing or shutting down this object does not have any impact on the given client. Callers must ensure that the given client is properly closed elsewhere.- Specified by:
setHttpClient
in interfaceHttpClientDependent
- Parameters:
client
-
-
begin
Description copied from interface:RepositoryConnection
Begins a new transaction, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction. The transaction will use the currently setisolation level
for this connection.- Specified by:
begin
in interfaceRepositoryConnection
- Throws:
RepositoryException
- If the connection could not start the transaction. One possible reason this may happen is if a transaction is alreadyactive
on the current connection.- See Also:
-
begin
Description copied from interface:RepositoryConnection
Begins a new transaction with the suppliedIsolationLevel
, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction.- Specified by:
begin
in interfaceRepositoryConnection
- Overrides:
begin
in classAbstractRepositoryConnection
- Parameters:
level
- TheIsolationLevel
at which this transaction will operate. If set tonull
the default isolation level of the underlying store will be used. If the specified isolation level is not supported by the underlying store, it will attempt to use a supportedcompatible level
instead.- Throws:
RepositoryException
- If the connection could not start the transaction. Possible reasons this may happen are:- a transaction is already
active
on the current connection. - the specified
IsolationLevel
is not supported by the store, and no compatible level could be found.
- a transaction is already
- See Also:
-
begin
Description copied from interface:RepositoryConnection
Begins a new transaction with the suppliedTransactionSetting
, requiringRepositoryConnection.commit()
orRepositoryConnection.rollback()
to be called to end the transaction.- Specified by:
begin
in interfaceRepositoryConnection
- Parameters:
settings
- TheTransactionSetting
(zero or more) for this transaction. If an isolation level is provided in the settings this will be used for the transaction. If none is provided then the default will be used. Behaviour of this method is undefined if more than one isolation level is provided. Behaviour of this method is undefined if one or more settings is null.- See Also:
-
prepare
Description copied from interface:RepositoryConnection
Checks for an error state in the active transaction that would force the transaction to be rolled back. This is an optional call; calling or not calling this method should have no effect on the outcome ofRepositoryConnection.commit()
orRepositoryConnection.rollback()
. A call to this method must be followed by (in the same thread) with a call toRepositoryConnection.prepare()
,RepositoryConnection.commit()
,RepositoryConnection.rollback()
, orRepositoryConnection.close()
. This method may be called multiple times within the same transaction by the same thread. If this method returns normally, the caller can reasonably expect that a subsequent call toRepositoryConnection.commit()
will also return normally. If this method returns with an exception the caller should treat the exception as if it came from a call toRepositoryConnection.commit()
.- Specified by:
prepare
in interfaceRepositoryConnection
- Throws:
RepositoryException
- If there is an active transaction and it cannot be committed.- See Also:
-
commit
Description copied from interface:RepositoryConnection
Commits the active transaction. This operation ends the active transaction.- Specified by:
commit
in interfaceRepositoryConnection
- Throws:
RepositoryException
- If the connection could not be committed, or if the connection does not have an active transaction.- See Also:
-
rollback
Description copied from interface:RepositoryConnection
Rolls back all updates in the active transaction. This operation ends the active transaction.- Specified by:
rollback
in interfaceRepositoryConnection
- Throws:
RepositoryException
- If the transaction could not be rolled back, or if the connection does not have an active transaction.- See Also:
-
close
Description copied from interface:RepositoryConnection
Closes the connection, freeing resources. If atransaction
isactive
on the connection, all non-committed operations will be lost by actively callingRepositoryConnection.rollback()
on any active transactions.Implementation note: All implementations must override this method if they have any resources that they need to free.
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceRepositoryConnection
- Overrides:
close
in classAbstractRepositoryConnection
- Throws:
RepositoryException
- If the connection could not be closed.
-
isOpen
Description copied from interface:RepositoryConnection
Checks whether this connection is open. A connection is open from the moment it is created until it is closed.- Specified by:
isOpen
in interfaceRepositoryConnection
- Overrides:
isOpen
in classAbstractRepositoryConnection
- Throws:
RepositoryException
- See Also:
-
prepareQuery
public SailQuery prepareQuery(QueryLanguage ql, String queryString, String baseURI) throws MalformedQueryException Description copied from interface:RepositoryConnection
Prepares a query for evaluation on this repository (optional operation).If you already know the type of query, using the more specific
RepositoryConnection.prepareTupleQuery(java.lang.String)
,RepositoryConnection.prepareGraphQuery(java.lang.String)
orRepositoryConnection.prepareBooleanQuery(java.lang.String)
is likely to be more efficient.- Specified by:
prepareQuery
in interfaceRepositoryConnection
- Parameters:
ql
- Thequery language
in which the query is formulated.queryString
- The query string.baseURI
- The base URI to resolve any relative URIs that are in the query against, can be null if the query does not contain any relative URIs.- Returns:
- A query ready to be evaluated on this repository.
- Throws:
MalformedQueryException
- If the supplied query is malformed.
-
prepareTupleQuery
public SailTupleQuery prepareTupleQuery(QueryLanguage ql, String queryString, String baseURI) throws MalformedQueryException Description copied from interface:RepositoryConnection
Prepares a query that produces sets of value tuples.- Specified by:
prepareTupleQuery
in interfaceRepositoryConnection
- Parameters:
ql
- Thequery language
in which the query is formulated.queryString
- The query string.baseURI
- The base URI to resolve any relative URIs that are in the query against, can be null if the query does not contain any relative URIs.- Returns:
- a
TupleQuery
ready to be evaluated on thisRepositoryConnection
. - Throws:
MalformedQueryException
- If the supplied query is malformed.
-
prepareGraphQuery
public SailGraphQuery prepareGraphQuery(QueryLanguage ql, String queryString, String baseURI) throws MalformedQueryException Description copied from interface:RepositoryConnection
Prepares queries that produce RDF graphs.- Specified by:
prepareGraphQuery
in interfaceRepositoryConnection
- Parameters:
ql
- Thequery language
in which the query is formulated.queryString
- The query string.baseURI
- The base URI to resolve any relative URIs that are in the query against, can be null if the query does not contain any relative URIs.- Returns:
- a
GraphQuery
ready to be evaluated on thisRepositoryConnection
. - Throws:
MalformedQueryException
- If the supplied query is malformed.
-
prepareBooleanQuery
public SailBooleanQuery prepareBooleanQuery(QueryLanguage ql, String queryString, String baseURI) throws MalformedQueryException Description copied from interface:RepositoryConnection
Prepares queries that return true or false.- Specified by:
prepareBooleanQuery
in interfaceRepositoryConnection
- Parameters:
ql
- Thequery language
in which the query is formulated.queryString
- The query string.baseURI
- The base URI to resolve any relative URIs that are in the query against, can be null if the query does not contain any relative URIs.- Returns:
- a
BooleanQuery
ready to be evaluated on thisRepositoryConnection
. - Throws:
MalformedQueryException
- If the supplied query is malformed.
-
prepareUpdate
public Update prepareUpdate(QueryLanguage ql, String update, String baseURI) throws RepositoryException, MalformedQueryException Description copied from interface:RepositoryConnection
Prepares an Update operation.- Specified by:
prepareUpdate
in interfaceRepositoryConnection
- Parameters:
ql
- Thequery language
in which the update operation is formulated.update
- The update operation string.baseURI
- The base URI to resolve any relative URIs that are in the update against, can be null if the update does not contain any relative URIs.- Returns:
- a
Update
ready to be executed on thisRepositoryConnection
. - Throws:
MalformedQueryException
- If the supplied update operation string is malformed.RepositoryException
-
hasStatement
public boolean hasStatement(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws RepositoryException Description copied from interface:RepositoryConnection
Checks whether the repository contains statements with a specific subject, predicate and/or object, optionally in the specified contexts.- Specified by:
hasStatement
in interfaceRepositoryConnection
- Overrides:
hasStatement
in classAbstractRepositoryConnection
- Parameters:
subj
- A Resource specifying the subject, or null for a wildcard.pred
- An IRI specifying the predicate, or null for a wildcard.obj
- A Value specifying the object, or null for a wildcard.includeInferred
- if false, no inferred statements are considered; if true, inferred statements are considered if availablecontexts
- The context(s) the need to be searched. Note that this parameter is a vararg and as such is optional. If no contexts are supplied the method operates on the entire repository.- Returns:
- true If a matching statement is in the repository in the specified context, false otherwise.
- Throws:
RepositoryException
-
getContextIDs
Description copied from interface:RepositoryConnection
Gets all resources that are used as content identifiers. Care should be taken that the returnedRepositoryResult
is closed to free any resources that it keeps hold of.- Specified by:
getContextIDs
in interfaceRepositoryConnection
- Returns:
- a RepositoryResult object containing Resources that are used as context identifiers.
- Throws:
RepositoryException
-
getStatements
public RepositoryResult<Statement> getStatements(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws RepositoryException Description copied from interface:RepositoryConnection
Gets all statements with a specific subject, predicate and/or object from the repository. The result is optionally restricted to the specified set of named contexts.- Specified by:
getStatements
in interfaceRepositoryConnection
- Parameters:
subj
- A Resource specifying the subject, or null for a wildcard.pred
- An IRI specifying the predicate, or null for a wildcard.obj
- A Value specifying the object, or null for a wildcard.includeInferred
- if false, no inferred statements are returned; if true, inferred statements are returned if available. The default is true.contexts
- The context(s) to get the data from. Note that this parameter is a vararg and as such is optional. If no contexts are supplied the method operates on the entire repository.- Returns:
- The statements matching the specified pattern. The result object is a
RepositoryResult
object, a lazy Iterator-like object containingStatement
s and optionally throwing aRepositoryException
when an error when a problem occurs during retrieval. - Throws:
RepositoryException
-
isEmpty
Description copied from interface:RepositoryConnection
Returns true if this repository does not contain any (explicit) statements.- Specified by:
isEmpty
in interfaceRepositoryConnection
- Overrides:
isEmpty
in classAbstractRepositoryConnection
- Returns:
- true if this repository is empty, false otherwise.
- Throws:
RepositoryException
- If the repository could not be checked to be empty.
-
exportStatements
public void exportStatements(Resource subj, IRI pred, Value obj, boolean includeInferred, RDFHandler handler, Resource... contexts) throws RepositoryException, RDFHandlerException Description copied from interface:RepositoryConnection
Exports all statements with a specific subject, predicate and/or object from the repository, optionally from the specified contexts. This method supplies the RDFHandler with all namespace declarations available in the repository.- Specified by:
exportStatements
in interfaceRepositoryConnection
- Parameters:
subj
- The subject, or null if the subject doesn't matter.pred
- The predicate, or null if the predicate doesn't matter.obj
- The object, or null if the object doesn't matter.includeInferred
- if false, no inferred statements are returned; if true, inferred statements are returned if availablehandler
- The handler that will handle the RDF data.contexts
- The context(s) to get the data from. Note that this parameter is a vararg and as such is optional. If no contexts are supplied the method operates on the entire repository.- Throws:
RDFHandlerException
- If the handler encounters an unrecoverable error.RepositoryException
-
size
Description copied from interface:RepositoryConnection
Returns the number of (explicit) statements that are in the specified contexts in this repository.- Specified by:
size
in interfaceRepositoryConnection
- Parameters:
contexts
- The context(s) to get the data from. Note that this parameter is a vararg and as such is optional. If no contexts are supplied the method operates on the entire repository.- Returns:
- The number of explicit statements from the specified contexts in this repository.
- Throws:
RepositoryException
-
addWithoutCommit
protected void addWithoutCommit(Resource subject, IRI predicate, Value object, Resource... contexts) throws RepositoryException - Specified by:
addWithoutCommit
in classAbstractRepositoryConnection
- Throws:
RepositoryException
-
removeWithoutCommit
protected void removeWithoutCommit(Resource subject, IRI predicate, Value object, Resource... contexts) throws RepositoryException - Specified by:
removeWithoutCommit
in classAbstractRepositoryConnection
- Throws:
RepositoryException
-
clear
Description copied from interface:RepositoryConnection
Removes all statements from a specific contexts in the repository.- Specified by:
clear
in interfaceRepositoryConnection
- Overrides:
clear
in classAbstractRepositoryConnection
- Parameters:
contexts
- The context(s) to remove the data from. Note that this parameter is a vararg and as such is optional. If no contexts are supplied the method operates on the entire repository.- Throws:
RepositoryException
- If the statements could not be removed from the repository, for example because the repository is not writable.
-
setNamespace
Description copied from interface:RepositoryConnection
Sets the prefix for a namespace.- Specified by:
setNamespace
in interfaceRepositoryConnection
- Specified by:
setNamespace
in classAbstractRepositoryConnection
- Parameters:
prefix
- The new prefix, or an empty string in case of the default namespace.name
- The namespace name that the prefix maps to.- Throws:
RepositoryException
- If the namespace could not be set in the repository, for example because the repository is not writable.
-
removeNamespace
Description copied from interface:RepositoryConnection
Removes a namespace declaration by removing the association between a prefix and a namespace name.- Specified by:
removeNamespace
in interfaceRepositoryConnection
- Parameters:
prefix
- The namespace prefix, or an empty string in case of the default namespace.- Throws:
RepositoryException
- If the namespace prefix could not be removed.
-
clearNamespaces
Description copied from interface:RepositoryConnection
Removes all namespace declarations from the repository.- Specified by:
clearNamespaces
in interfaceRepositoryConnection
- Throws:
RepositoryException
- If the namespace declarations could not be removed.
-
getNamespaces
Description copied from interface:RepositoryConnection
Gets all declared namespaces as a RepositoryResult ofNamespace
objects. Each Namespace object consists of a prefix and a namespace name.- Specified by:
getNamespaces
in interfaceRepositoryConnection
- Returns:
- A RepositoryResult containing Namespace objects. Care should be taken to close the RepositoryResult after use.
- Throws:
RepositoryException
- If the namespaces could not be read from the repository.
-
getNamespace
Description copied from interface:RepositoryConnection
Gets the namespace that is associated with the specified prefix, if any.- Specified by:
getNamespace
in interfaceRepositoryConnection
- Specified by:
getNamespace
in classAbstractRepositoryConnection
- Parameters:
prefix
- A namespace prefix, or an empty string in case of the default namespace.- Returns:
- The namespace name that is associated with the specified prefix, or null if there is no such namespace.
- Throws:
RepositoryException
- If the namespace could not be read from the repository.
-
createRepositoryResult
protected <E> RepositoryResult<E> createRepositoryResult(CloseableIteration<? extends E, SailException> sailIter) Wraps a CloseableIteration coming from a Sail in a RepositoryResult object, applying the required conversions -
isActive
Description copied from interface:RepositoryConnection
Indicates if a transaction is currently active on the connection. A transaction is active ifRepositoryConnection.begin()
has been called, and becomes inactive afterRepositoryConnection.commit()
orRepositoryConnection.rollback()
has been called.- Specified by:
isActive
in interfaceRepositoryConnection
- Returns:
true
iff a transaction is active,false
iff no transaction is active.- Throws:
UnknownTransactionStateException
- if the transaction state can not be determined. This can happen for instance when communication with a repository fails or times out.
-
toString
-