Package org.eclipse.rdf4j.sail.shacl
Class ShaclSailConnection
- java.lang.Object
-
- org.eclipse.rdf4j.sail.helpers.SailConnectionWrapper
-
- org.eclipse.rdf4j.sail.helpers.NotifyingSailConnectionWrapper
-
- org.eclipse.rdf4j.sail.shacl.ShaclSailConnection
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,FederatedServiceResolverClient
,ThreadSafetyAware
,NotifyingSailConnection
,SailConnection
,SailConnectionListener
public class ShaclSailConnection extends NotifyingSailConnectionWrapper implements SailConnectionListener
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ShaclSailConnection.Settings
class
ShaclSailConnection.ValidationContainer
Deprecated, for removal: This API element is subject to removal in a future version.
-
Field Summary
-
Constructor Summary
Constructors Constructor Description ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailRepositoryConnection shapesRepoConnection)
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailRepositoryConnection shapesRepoConnection, SailConnection serializableConnection)
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailConnection previousStateConnection, SailRepositoryConnection shapesRepoConnection)
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailConnection previousStateConnection, SailRepositoryConnection shapesRepoConnection, SailConnection serializableConnection)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addConnectionListener(SailConnectionListener listener)
Adds the given listener to the wrapped connection.void
addStatement(Resource subj, IRI pred, Value obj, Resource... contexts)
Adds a statement to the store.void
addStatement(UpdateContext modify, Resource subj, IRI pred, Value obj, Resource... contexts)
Adds a statement to the store.void
begin()
Begins a transaction requiringSailConnection.commit()
orSailConnection.rollback()
to be called to close the transaction.void
begin(IsolationLevel level)
Begins a transaction with the specifiedIsolationLevel
level, requiringSailConnection.commit()
orSailConnection.rollback()
to be called to close the transaction.private void
checkIfShapesRefreshIsNeeded(Statement statement)
private void
checkTransactionalValidationLimit()
private void
cleanup()
private void
cleanupReadWriteLock()
private void
cleanupShapesReadWriteLock()
void
clear(Resource... contexts)
Removes all statements from the specified/all contexts.void
close()
Closes the connection.void
commit()
Commits any updates that have been performed since the last timeSailConnection.commit()
orSailConnection.rollback()
was called.(package private) void
fillAddedAndRemovedStatementRepositories()
(package private) ConnectionsGroup
getConnectionsGroup()
private ShaclSailConnection.Settings
getDefaultSettings(ShaclSail sail)
private IsolationLevel
getIsolationLevel()
private ShaclSailConnection.Settings
getLocalTransactionSettings()
private Sail
getNewMemorySail()
RdfsSubClassOfReasoner
getRdfsSubClassOfReasoner()
CloseableIteration<? extends Statement,SailException>
getStatements(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts)
Gets all statements from the specified contexts that have a specific subject, predicate and/or object.private long
getTimeStamp()
(package private) ShaclSailConnection.Settings
getTransactionSettings()
boolean
hasStatement(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts)
Determines if the store contains any statements from the specified contexts that have a specific subject, predicate and/or object.private boolean
isBulkValidation()
private boolean
isEmpty(java.util.List<ContextWithShape> shapesList)
private boolean
isParallelValidation()
(package private) boolean
isValidationEnabled()
private ValidationReport
performValidation(java.util.List<ContextWithShape> shapes, boolean validateEntireBaseSail, ConnectionsGroup connectionsGroup)
void
prepare()
Checks for an error state in the active transaction that would force the transaction to be rolled back.(package private) void
prepareValidation(ValidationSettings validationSettings)
void
removeConnectionListener(SailConnectionListener listener)
Removes the given listener from the wrapped connection.void
removeStatement(UpdateContext modify, Resource subj, IRI pred, Value obj, Resource... contexts)
Removes all statements matching the specified subject, predicate and object from the repository.void
removeStatements(Resource subj, IRI pred, Value obj, Resource... contexts)
Removes all statements matching the specified subject, predicate and object from the repository.ValidationReport
revalidate()
void
rollback()
Rolls back the transaction, discarding any uncommitted changes that have been made in this SailConnection.private ValidationReport
serializableValidation(java.util.List<ContextWithShape> shapesAfterRefresh)
void
setTransactionSettings(TransactionSetting... settings)
Pass any transaction-specific settings to the SailConnection.private boolean
shouldUseSerializableValidation()
void
statementAdded(Statement statement)
Notifies the listener that a statement has been added in a transaction that it has registered itself with.void
statementRemoved(Statement statement)
Notifies the listener that a statement has been removed in a transaction that it has registered itself with.private ValidationReport
validate(java.util.List<ContextWithShape> shapes, boolean validateEntireBaseSail)
-
Methods inherited from class org.eclipse.rdf4j.sail.helpers.NotifyingSailConnectionWrapper
getWrappedConnection
-
Methods inherited from class org.eclipse.rdf4j.sail.helpers.SailConnectionWrapper
clearNamespaces, endUpdate, evaluate, explain, flush, getContextIDs, getFederatedServiceResolver, getNamespace, getNamespaces, isActive, isOpen, pendingRemovals, prepareQuery, removeNamespace, setFederatedServiceResolver, setNamespace, size, size, startUpdate, supportsConcurrentReads
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.eclipse.rdf4j.sail.SailConnection
clearNamespaces, endUpdate, evaluate, explain, flush, getContextIDs, getNamespace, getNamespaces, isActive, isOpen, pendingRemovals, prepareQuery, removeNamespace, setNamespace, size, startUpdate
-
-
-
-
Field Detail
-
logger
private static final org.slf4j.Logger logger
-
previousStateConnection
private final SailConnection previousStateConnection
-
serializableConnection
private final SailConnection serializableConnection
-
useDefaultShapesGraph
private final boolean useDefaultShapesGraph
-
shapesGraphs
private IRI[] shapesGraphs
-
addedStatements
Sail addedStatements
-
removedStatements
Sail removedStatements
-
addedStatementsSet
private final java.util.HashSet<Statement> addedStatementsSet
-
removedStatementsSet
private final java.util.HashSet<Statement> removedStatementsSet
-
shapeRefreshNeeded
private boolean shapeRefreshNeeded
-
shapesModifiedInCurrentTransaction
private boolean shapesModifiedInCurrentTransaction
-
sail
public final ShaclSail sail
-
stats
private Stats stats
-
rdfsSubClassOfReasoner
RdfsSubClassOfReasoner rdfsSubClassOfReasoner
-
prepareHasBeenCalled
private boolean prepareHasBeenCalled
-
exclusiveSerializableValidationLock
private Lock exclusiveSerializableValidationLock
-
nonExclusiveSerializableValidationLock
private Lock nonExclusiveSerializableValidationLock
-
writableShapesCache
private StampedLockManager.Cache.WritableState writableShapesCache
-
readableShapesCache
private StampedLockManager.Cache.ReadableState readableShapesCache
-
shapesRepoConnection
private final SailRepositoryConnection shapesRepoConnection
-
connectionListenerActive
private boolean connectionListenerActive
-
currentIsolationLevel
private IsolationLevel currentIsolationLevel
-
transactionSettings
private ShaclSailConnection.Settings transactionSettings
-
transactionSettingsRaw
private TransactionSetting[] transactionSettingsRaw
-
closed
private volatile boolean closed
-
-
Constructor Detail
-
ShaclSailConnection
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailConnection previousStateConnection, SailRepositoryConnection shapesRepoConnection, SailConnection serializableConnection)
-
ShaclSailConnection
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailConnection previousStateConnection, SailRepositoryConnection shapesRepoConnection)
-
ShaclSailConnection
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailRepositoryConnection shapesRepoConnection, SailConnection serializableConnection)
-
ShaclSailConnection
ShaclSailConnection(ShaclSail sail, NotifyingSailConnection connection, SailRepositoryConnection shapesRepoConnection)
-
-
Method Detail
-
getDefaultSettings
private ShaclSailConnection.Settings getDefaultSettings(ShaclSail sail)
-
setTransactionSettings
public void setTransactionSettings(TransactionSetting... settings)
Description copied from interface:SailConnection
Pass any transaction-specific settings to the SailConnection. This method needs to be called before the transaction isstarted
.Sail implementations can override this method to receive the transaction settings (to inspect and/or pass them along to any wrapped sail objects). Remember to call
super.setTransactionSettings(settings)
if you override this method.- Specified by:
setTransactionSettings
in interfaceSailConnection
- Overrides:
setTransactionSettings
in classSailConnectionWrapper
- Parameters:
settings
- the transaction settings on which the next transaction operates. It may or may not contain the isolation level.
-
begin
public void begin() throws SailException
Description copied from interface:SailConnection
Begins a transaction requiringSailConnection.commit()
orSailConnection.rollback()
to be called to close the transaction. The transaction will use the defaultIsolationLevel
level for the SAIL, as returned bySail.getDefaultIsolationLevel()
.- Specified by:
begin
in interfaceSailConnection
- Overrides:
begin
in classSailConnectionWrapper
- Throws:
SailException
- If the connection could not start a transaction or if a transaction is already active on this connection.
-
begin
public void begin(IsolationLevel level) throws SailException
Description copied from interface:SailConnection
Begins a transaction with the specifiedIsolationLevel
level, requiringSailConnection.commit()
orSailConnection.rollback()
to be called to close the transaction.- Specified by:
begin
in interfaceSailConnection
- Overrides:
begin
in classSailConnectionWrapper
- Parameters:
level
- the transaction isolation level on which this transaction operates.- Throws:
UnknownSailTransactionStateException
- If the IsolationLevel is not supported by this implementationSailException
- If the connection could not start a transaction, if the supplied transaction isolation level is not supported, or if a transaction is already active on this connection.
-
getLocalTransactionSettings
private ShaclSailConnection.Settings getLocalTransactionSettings()
- Returns:
- the transaction settings that are based purely on the settings based down through the begin(...) method without considering any sail level settings for things like caching or parallel validation.
-
addConnectionListener
public void addConnectionListener(SailConnectionListener listener)
Description copied from class:NotifyingSailConnectionWrapper
Adds the given listener to the wrapped connection.- Specified by:
addConnectionListener
in interfaceNotifyingSailConnection
- Overrides:
addConnectionListener
in classNotifyingSailConnectionWrapper
- Parameters:
listener
- A SailConnectionListener.
-
isValidationEnabled
boolean isValidationEnabled()
-
removeConnectionListener
public void removeConnectionListener(SailConnectionListener listener)
Description copied from class:NotifyingSailConnectionWrapper
Removes the given listener from the wrapped connection.- Specified by:
removeConnectionListener
in interfaceNotifyingSailConnection
- Overrides:
removeConnectionListener
in classNotifyingSailConnectionWrapper
- Parameters:
listener
- A SailConnectionListener.
-
getNewMemorySail
private Sail getNewMemorySail()
-
commit
public void commit() throws SailException
Description copied from interface:SailConnection
Commits any updates that have been performed since the last timeSailConnection.commit()
orSailConnection.rollback()
was called.- Specified by:
commit
in interfaceSailConnection
- Overrides:
commit
in classSailConnectionWrapper
- Throws:
UnknownSailTransactionStateException
- If the transaction state can not be determined (this can happen for instance when communication between client and server fails or times-out). It does not indicate a problem with the integrity of the store.SailException
- If the SailConnection could not be committed.
-
addStatement
public void addStatement(UpdateContext modify, Resource subj, IRI pred, Value obj, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Adds a statement to the store. Called when adding statements through aUpdateExpr
operation.- Specified by:
addStatement
in interfaceSailConnection
- Overrides:
addStatement
in classSailConnectionWrapper
- Parameters:
modify
- operation properties of theUpdateExpr
operation producing these statements.subj
- The subject of the statement to add.pred
- The predicate of the statement to add.obj
- The object of the statement to add.contexts
- The context(s) to add the statement to. Note that this parameter is a vararg and as such is optional. If no contexts are specified, a context-less statement will be added.- Throws:
SailException
- If the statement could not be added, for example because no transaction is active.
-
removeStatement
public void removeStatement(UpdateContext modify, Resource subj, IRI pred, Value obj, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Removes all statements matching the specified subject, predicate and object from the repository. All three parameters may be null to indicate wildcards. Called when removing statements through aUpdateExpr
operation.- Specified by:
removeStatement
in interfaceSailConnection
- Overrides:
removeStatement
in classSailConnectionWrapper
- Parameters:
modify
- operation properties of theUpdateExpr
operation removing these statements.subj
- The subject of the statement that should be removed.pred
- The predicate of the statement that should be removed.obj
- The object of the statement that should be removed.contexts
- The context(s) from which to remove the statement. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.- Throws:
SailException
- If the statement could not be removed, for example because no transaction is active.
-
addStatement
public void addStatement(Resource subj, IRI pred, Value obj, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Adds a statement to the store.- Specified by:
addStatement
in interfaceSailConnection
- Overrides:
addStatement
in classSailConnectionWrapper
- Parameters:
subj
- The subject of the statement to add.pred
- The predicate of the statement to add.obj
- The object of the statement to add.contexts
- The context(s) to add the statement to. Note that this parameter is a vararg and as such is optional. If no contexts are specified, a context-less statement will be added.- Throws:
SailException
- If the statement could not be added, for example because no transaction is active.
-
removeStatements
public void removeStatements(Resource subj, IRI pred, Value obj, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Removes all statements matching the specified subject, predicate and object from the repository. All three parameters may be null to indicate wildcards.- Specified by:
removeStatements
in interfaceSailConnection
- Overrides:
removeStatements
in classSailConnectionWrapper
- Parameters:
subj
- The subject of the statement that should be removed, or null to indicate a wildcard.pred
- The predicate of the statement that should be removed, or null to indicate a wildcard.obj
- The object of the statement that should be removed , or null to indicate a wildcard. *contexts
- The context(s) from which to remove the statement. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.- Throws:
SailException
- If the statement could not be removed, for example because no transaction is active.
-
clear
public void clear(Resource... contexts) throws SailException
Description copied from interface:SailConnection
Removes all statements from the specified/all contexts. If no contexts are specified the method operates on the entire repository.- Specified by:
clear
in interfaceSailConnection
- Overrides:
clear
in classSailConnectionWrapper
- Parameters:
contexts
- The context(s) from which to remove the statements. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.- Throws:
SailException
- If the statements could not be removed.
-
rollback
public void rollback() throws SailException
Description copied from interface:SailConnection
Rolls back the transaction, discarding any uncommitted changes that have been made in this SailConnection.- Specified by:
rollback
in interfaceSailConnection
- Overrides:
rollback
in classSailConnectionWrapper
- Throws:
UnknownSailTransactionStateException
- If the transaction state can not be determined (this can happen for instance when communication between client and server fails or times-out). It does not indicate a problem with the integrity of the store.SailException
- If the SailConnection could not be rolled back.
-
cleanup
private void cleanup()
-
cleanupShapesReadWriteLock
private void cleanupShapesReadWriteLock()
-
cleanupReadWriteLock
private void cleanupReadWriteLock()
-
validate
private ValidationReport validate(java.util.List<ContextWithShape> shapes, boolean validateEntireBaseSail) throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
prepareValidation
void prepareValidation(ValidationSettings validationSettings) throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
getConnectionsGroup
ConnectionsGroup getConnectionsGroup()
-
performValidation
private ValidationReport performValidation(java.util.List<ContextWithShape> shapes, boolean validateEntireBaseSail, ConnectionsGroup connectionsGroup) throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
isParallelValidation
private boolean isParallelValidation()
-
fillAddedAndRemovedStatementRepositories
void fillAddedAndRemovedStatementRepositories() throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
getIsolationLevel
private IsolationLevel getIsolationLevel()
-
close
public void close() throws SailException
Description copied from interface:SailConnection
Closes the connection. Any updates that haven't been committed yet will be rolled back. The connection can no longer be used once it is closed.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfaceSailConnection
- Overrides:
close
in classSailConnectionWrapper
- Throws:
SailException
-
prepare
public void prepare() throws SailException
Description copied from interface:SailConnection
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 ofSailConnection.commit()
orSailConnection.rollback()
. A call to this method must be followed by (in the same thread) with a call toSailConnection.prepare()
,SailConnection.commit()
,SailConnection.rollback()
, orSailConnection.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 toSailConnection.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 toSailConnection.commit()
.- Specified by:
prepare
in interfaceSailConnection
- Overrides:
prepare
in classSailConnectionWrapper
- Throws:
UnknownSailTransactionStateException
- If the transaction state can not be determined (this can happen for instance when communication between client and server fails or times-out). It does not indicate a problem with the integrity of the store.SailException
- If there is an active transaction and it cannot be committed.
-
isEmpty
private boolean isEmpty(java.util.List<ContextWithShape> shapesList)
-
shouldUseSerializableValidation
private boolean shouldUseSerializableValidation()
-
isBulkValidation
private boolean isBulkValidation()
-
serializableValidation
private ValidationReport serializableValidation(java.util.List<ContextWithShape> shapesAfterRefresh) throws java.lang.InterruptedException
- Throws:
java.lang.InterruptedException
-
statementAdded
public void statementAdded(Statement statement)
Description copied from interface:SailConnectionListener
Notifies the listener that a statement has been added in a transaction that it has registered itself with.- Specified by:
statementAdded
in interfaceSailConnectionListener
- Parameters:
statement
- The statement that was added.
-
statementRemoved
public void statementRemoved(Statement statement)
Description copied from interface:SailConnectionListener
Notifies the listener that a statement has been removed in a transaction that it has registered itself with.- Specified by:
statementRemoved
in interfaceSailConnectionListener
- Parameters:
statement
- The statement that was removed.
-
checkIfShapesRefreshIsNeeded
private void checkIfShapesRefreshIsNeeded(Statement statement)
-
checkTransactionalValidationLimit
private void checkTransactionalValidationLimit()
-
getRdfsSubClassOfReasoner
public RdfsSubClassOfReasoner getRdfsSubClassOfReasoner()
-
getStatements
public CloseableIteration<? extends Statement,SailException> getStatements(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Gets all statements from the specified contexts that have a specific subject, predicate and/or object. All three parameters may be null to indicate wildcards. The includeInferred parameter can be used to control which statements are fetched: all statements or only the statements that have been added explicitly.- Specified by:
getStatements
in interfaceSailConnection
- Overrides:
getStatements
in classSailConnectionWrapper
- Parameters:
subj
- A Resource specifying the subject, or null for a wildcard.pred
- A URI 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 availablecontexts
- The context(s) to get the data from. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.- Returns:
- The statements matching the specified pattern.
- Throws:
SailException
- If the Sail object encountered an error or unexpected situation internally.
-
hasStatement
public boolean hasStatement(Resource subj, IRI pred, Value obj, boolean includeInferred, Resource... contexts) throws SailException
Description copied from interface:SailConnection
Determines if the store contains any statements from the specified contexts that have a specific subject, predicate and/or object. All three parameters may be null to indicate wildcards. The includeInferred parameter can be used to control which statements are checked: all statements or only the statements that have been added explicitly.- Specified by:
hasStatement
in interfaceSailConnection
- Overrides:
hasStatement
in classSailConnectionWrapper
- 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 availablecontexts
- The context(s) to get the data from. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.- Returns:
true
iff the store contains any statements matching the supplied criteria,false
otherwise.- Throws:
SailException
- If the Sail object encountered an error or unexpected situation internally.
-
revalidate
public ValidationReport revalidate()
-
getTransactionSettings
ShaclSailConnection.Settings getTransactionSettings()
-
getTimeStamp
private long getTimeStamp()
-
-