Package org.nuxeo.ecm.core.storage.dbs
Class DBSCachingConnection
- java.lang.Object
-
- org.nuxeo.ecm.core.storage.dbs.DBSCachingConnection
-
- All Implemented Interfaces:
AutoCloseable
,LockManager
,DBSConnection
public class DBSCachingConnection extends Object implements DBSConnection
The DBS Cache layer used to cache some method call of real repository- Since:
- 11.1 (introduced in 8.10 as DBSCachingRepository)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.storage.dbs.DBSConnection
DBSConnection.DBSQueryOperator
-
-
Field Summary
Fields Modifier and Type Field Description protected DBSConnection
connection
-
Constructor Summary
Constructors Constructor Description DBSCachingConnection(DBSConnection connection, DBSCachingRepository repository)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
begin()
Starts a new transaction.void
close()
Closes this connection.void
commit()
Commits the current transaction.void
createState(State state)
Creates a document.void
createStates(List<State> states)
Creates documents.void
deleteStates(Set<String> ids)
Deletes a set of document.String
generateNewId()
Generates a new id for a document.Stream<State>
getDescendants(String id, Set<String> keys)
Returns a stream of descendants from a given root document, in no particular order.Stream<State>
getDescendants(String id, Set<String> keys, int limit)
Returns a stream of descendants from a given root document, in no particular order.Lock
getLock(String id)
Gets the lock on a document.String
getRootId()
Gets the root id.boolean
hasChild(String parentId, String name, Set<String> ignored)
Checks if a document has a child with the given nameprotected void
processReceivedInvalidations()
PartialList<Map<String,Serializable>>
queryAndFetch(DBSExpressionEvaluator evaluator, OrderByClause orderByClause, boolean distinctDocuments, int limit, int offset, int countUpTo)
Queries the repository for documents matching a NXQL query, and returns a projection of the documents.List<State>
queryKeyValue(String key1, Object value1, String key2, Object value2, Set<String> ignored)
Queries the repository for documents having key1 = value1 and key2 = value2.List<State>
queryKeyValue(String key, Object value, Set<String> ignored)
Queries the repository for documents having key = value.boolean
queryKeyValuePresence(String key, String value, Set<String> ignored)
Queries the repository to check if there are documents having key = value.List<State>
queryKeyValueWithOperator(String key1, Object value1, String key2, DBSConnection.DBSQueryOperator operator, Object value2, Set<String> ignored)
Queries the repository for documents having key1 = value1 and key2 ${operator} value2.State
readChildState(String parentId, String name, Set<String> ignored)
Reads the state of a child document.State
readPartialState(String id, Collection<String> keys)
Reads the partial state of a document.State
readState(String id)
Reads the state of a document.List<State>
readStates(List<String> ids)
Reads the states of several documents.Lock
removeLock(String id, String owner)
Removes the lock from a document.void
rollback()
Rolls back the current transaction.ScrollResult<String>
scroll(String scrollId)
Get the next batch of results containing id of documents, thescrollId
is part of the previousScrollResult
response.ScrollResult<String>
scroll(DBSExpressionEvaluator evaluator, int batchSize, int keepAliveSeconds)
Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within thekeepAliveSeconds
delay.protected void
sendInvalidationsToOthers()
Lock
setLock(String id, Lock lock)
Sets a lock on a document.void
updateState(String id, State.StateDiff diff, DBSTransactionState.ConditionalUpdates conditionalUpdates)
Updates a document.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.nuxeo.ecm.core.api.lock.LockManager
clearLockManagerCaches, closeLockManager
-
-
-
-
Field Detail
-
connection
protected final DBSConnection connection
-
-
Constructor Detail
-
DBSCachingConnection
public DBSCachingConnection(DBSConnection connection, DBSCachingRepository repository)
-
-
Method Detail
-
close
public void close()
Description copied from interface:DBSConnection
Closes this connection.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceDBSConnection
-
begin
public void begin()
Description copied from interface:DBSConnection
Starts a new transaction.- Specified by:
begin
in interfaceDBSConnection
- See Also:
DBSRepository.supportsTransactions()
-
commit
public void commit()
Description copied from interface:DBSConnection
Commits the current transaction.- Specified by:
commit
in interfaceDBSConnection
- See Also:
DBSRepository.supportsTransactions()
-
rollback
public void rollback()
Description copied from interface:DBSConnection
Rolls back the current transaction.- Specified by:
rollback
in interfaceDBSConnection
- See Also:
DBSRepository.supportsTransactions()
-
readState
public State readState(String id)
Description copied from interface:DBSConnection
Reads the state of a document.- Specified by:
readState
in interfaceDBSConnection
- Parameters:
id
- the document id- Returns:
- the document state, or
null
if not found
-
readPartialState
public State readPartialState(String id, Collection<String> keys)
Description copied from interface:DBSConnection
Reads the partial state of a document.- Specified by:
readPartialState
in interfaceDBSConnection
- Parameters:
id
- the document idkeys
- the keys to read- Returns:
- the document partial state, or
null
if not found
-
readStates
public List<State> readStates(List<String> ids)
Description copied from interface:DBSConnection
Reads the states of several documents.The returned states may be in a different order than the ids.
- Specified by:
readStates
in interfaceDBSConnection
- Parameters:
ids
- the document ids- Returns:
- the document states, an element by be
null
if not found
-
createState
public void createState(State state)
Description copied from interface:DBSConnection
Creates a document.- Specified by:
createState
in interfaceDBSConnection
- Parameters:
state
- the document state
-
createStates
public void createStates(List<State> states)
Description copied from interface:DBSConnection
Creates documents.- Specified by:
createStates
in interfaceDBSConnection
- Parameters:
states
- the document states
-
updateState
public void updateState(String id, State.StateDiff diff, DBSTransactionState.ConditionalUpdates conditionalUpdates)
Description copied from interface:DBSConnection
Updates a document.- Specified by:
updateState
in interfaceDBSConnection
- Parameters:
id
- the document iddiff
- the diff to applyconditionalUpdates
- the conditional updates, ornull
-
deleteStates
public void deleteStates(Set<String> ids)
Description copied from interface:DBSConnection
Deletes a set of document.- Specified by:
deleteStates
in interfaceDBSConnection
- Parameters:
ids
- the document ids
-
readChildState
public State readChildState(String parentId, String name, Set<String> ignored)
Description copied from interface:DBSConnection
Reads the state of a child document.- Specified by:
readChildState
in interfaceDBSConnection
- Parameters:
parentId
- the parent document idname
- the name of the childignored
- a set of document ids that should not be considered- Returns:
- the state of the child document, or
null
if not found
-
sendInvalidationsToOthers
protected void sendInvalidationsToOthers()
-
processReceivedInvalidations
protected void processReceivedInvalidations()
-
getRootId
public String getRootId()
Description copied from interface:DBSConnection
Gets the root id.- Specified by:
getRootId
in interfaceDBSConnection
- Returns:
- the root id.
-
generateNewId
public String generateNewId()
Description copied from interface:DBSConnection
Generates a new id for a document.- Specified by:
generateNewId
in interfaceDBSConnection
- Returns:
- the new id
-
hasChild
public boolean hasChild(String parentId, String name, Set<String> ignored)
Description copied from interface:DBSConnection
Checks if a document has a child with the given name- Specified by:
hasChild
in interfaceDBSConnection
- Parameters:
parentId
- the parent document idname
- the name of the childignored
- a set of document ids that should not be considered- Returns:
true
if the child exists,false
if not
-
queryKeyValue
public List<State> queryKeyValue(String key, Object value, Set<String> ignored)
Description copied from interface:DBSConnection
Queries the repository for documents having key = value.- Specified by:
queryKeyValue
in interfaceDBSConnection
- Parameters:
key
- the keyvalue
- the valueignored
- a set of document ids that should not be considered- Returns:
- the document states matching the query
-
queryKeyValue
public List<State> queryKeyValue(String key1, Object value1, String key2, Object value2, Set<String> ignored)
Description copied from interface:DBSConnection
Queries the repository for documents having key1 = value1 and key2 = value2.- Specified by:
queryKeyValue
in interfaceDBSConnection
- Parameters:
key1
- the first keyvalue1
- the first valuekey2
- the second keyvalue2
- the second valueignored
- a set of document ids that should not be considered- Returns:
- the document states matching the query
-
getDescendants
public Stream<State> getDescendants(String id, Set<String> keys)
Description copied from interface:DBSConnection
Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.THE STREAM MUST BE CLOSED WHEN DONE to release resources.
- Specified by:
getDescendants
in interfaceDBSConnection
- Parameters:
id
- the root document idkeys
- what to collect about the descendants in addition to their ids- Returns:
- a stream of
State
s; THE STREAM MUST BE CLOSED WHEN DONE
-
getDescendants
public Stream<State> getDescendants(String id, Set<String> keys, int limit)
Description copied from interface:DBSConnection
Returns a stream of descendants from a given root document, in no particular order. This does not include information about the root document itself.THE STREAM MUST BE CLOSED WHEN DONE to release resources.
- Specified by:
getDescendants
in interfaceDBSConnection
- Parameters:
id
- the root document idkeys
- what to collect about the descendants in addition to their idslimit
- the maximum number of descendants to return- Returns:
- a stream of
State
s; THE STREAM MUST BE CLOSED WHEN DONE
-
queryKeyValuePresence
public boolean queryKeyValuePresence(String key, String value, Set<String> ignored)
Description copied from interface:DBSConnection
Queries the repository to check if there are documents having key = value.- Specified by:
queryKeyValuePresence
in interfaceDBSConnection
- Parameters:
key
- the keyvalue
- the valueignored
- a set of document ids that should not be considered- Returns:
true
if the query matches at least one document,false
if the query matches nothing
-
queryAndFetch
public PartialList<Map<String,Serializable>> queryAndFetch(DBSExpressionEvaluator evaluator, OrderByClause orderByClause, boolean distinctDocuments, int limit, int offset, int countUpTo)
Description copied from interface:DBSConnection
Queries the repository for documents matching a NXQL query, and returns a projection of the documents.- Specified by:
queryAndFetch
in interfaceDBSConnection
- Parameters:
evaluator
- the map-based evaluator for the queryorderByClause
- an ORDER BY clausedistinctDocuments
-true
if the projection should return a maximum of one row per documentlimit
- the limit on the number of documents to returnoffset
- the offset in the list of documents to returncountUpTo
- if-1
, count the total size without offset/limit.
If0
, don't count the total size, set it to-1
.
Ifn
, count the total number if there are less than n documents otherwise set the total size to-2
.- Returns:
- a partial list of maps containing the NXQL projections requested, and the total size according to countUpTo
-
scroll
public ScrollResult<String> scroll(DBSExpressionEvaluator evaluator, int batchSize, int keepAliveSeconds)
Description copied from interface:DBSConnection
Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within thekeepAliveSeconds
delay.- Specified by:
scroll
in interfaceDBSConnection
-
scroll
public ScrollResult<String> scroll(String scrollId)
Description copied from interface:DBSConnection
Get the next batch of results containing id of documents, thescrollId
is part of the previousScrollResult
response.- Specified by:
scroll
in interfaceDBSConnection
-
getLock
public Lock getLock(String id)
Description copied from interface:LockManager
Gets the lock on a document.If the document does not exist,
null
is returned.- Specified by:
getLock
in interfaceLockManager
- Parameters:
id
- the document id- Returns:
- the existing lock, or
null
when there is no lock
-
setLock
public Lock setLock(String id, Lock lock)
Description copied from interface:LockManager
Sets a lock on a document.If the document is already locked, returns its existing lock status (there is no re-locking,
LockManager.removeLock(java.lang.String, java.lang.String)
must be called first).- Specified by:
setLock
in interfaceLockManager
- Parameters:
id
- the document idlock
- the lock to set- Returns:
null
if locking succeeded, or the existing lock if locking failed
-
removeLock
public Lock removeLock(String id, String owner)
Description copied from interface:LockManager
Removes the lock from a document.The previous lock is returned.
If
owner
isnull
then the lock is unconditionally removed.If
owner
is notnull
, it must match the existing lock owner for the lock to be removed. If it doesn't match, the returned lock will returntrue
forLock.getFailed()
.- Specified by:
removeLock
in interfaceLockManager
- Parameters:
id
- the document idowner
- the owner to check, ornull
for no check- Returns:
- the previous lock (may be
null
), with a failed flag if locking failed
-
queryKeyValueWithOperator
public List<State> queryKeyValueWithOperator(String key1, Object value1, String key2, DBSConnection.DBSQueryOperator operator, Object value2, Set<String> ignored)
Description copied from interface:DBSConnection
Queries the repository for documents having key1 = value1 and key2 ${operator} value2.- Specified by:
queryKeyValueWithOperator
in interfaceDBSConnection
- Parameters:
key1
- the first keyvalue1
- the first valuekey2
- the second keyoperator
- the operator to apply between key2 and value2value2
- the second valueignored
- a set of document ids that should not be considered- Returns:
- the document states matching the query
-
-