Class SessionImpl
- All Implemented Interfaces:
AutoCloseable
,Session
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.storage.sql.Session
Session.PathResolver
-
Field Summary
Modifier and TypeFieldDescriptionprotected final boolean
static final String
Set this system property to false if you don't want repositories to be looked up under the compatibility name "default" in the "repositories" table.final PersistenceContext
protected final FulltextDescriptor
protected final Set<SessionImpl.QueryResultContext>
protected final io.dropwizard.metrics5.MetricRegistry
protected final RepositoryImpl
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaddChildNode
(Serializable id, Node parent, String name, Long pos, String typeName, boolean complexProp) Creates a new child node with given id (used for import).addChildNode
(Node parent, String name, Long pos, String typeName, boolean complexProp) Creates a new child node.boolean
addMixinType
(Node node, String mixin) Adds a mixin to a node.protected Node
addNode
(Serializable id, Serializable parentId, String name, Long pos, String typeName, boolean complexProp) addProxy
(Serializable targetId, Serializable versionableId, Node parent, String name, Long pos) Creates a proxy for a version node.Checks in a checked-out node: creates a new version with a copy of its information.protected void
Post transaction check invalidations processing.void
Checks out a checked-in node.int
cleanupDeletedDocuments
(int max, Calendar beforeTime) protected int
Clears all the caches.void
close()
protected void
protected void
void
commit()
Copies a node to a new location with a new name.protected void
doFlush()
void
end()
protected void
findPrefetchedFragments
(SimpleFragment hierFragment, List<RowId> bulkRowIds, Set<Serializable> proxyIds) Finds prefetched fragments for a hierarchy fragment, takes note of the ones that are proxies.protected void
flush()
protected Serializable
Generates a new id, or used a pre-generated one (import).getBinaryFulltext
(Serializable id, Document doc) Gets the fulltext extracted from the binary fields.long
long
long
long
getChildNode
(Node parent, String name, boolean complexProp) Gets a child node given its parent and name.getChildren
(Node parent, String name, boolean complexProp) Gets the children of a node.getChildrenNames
(String primaryType, List<String> mixins) Gets complex children names defined by the primary type and the list of mixins.protected Serializable
protected PersistenceContext
Gets the fulltext updates to do.Fetches the hierarchy fragment for the given rows and all their ancestors.getLastVersion
(Serializable versionSeriesId) Gets the last version for a given version series id.Gets the lock manager for this session.Gets the low-level Mapper for this session.getModel()
Gets theModel
associated to this session.Gets a node given its id.protected Node
getNodeById
(Serializable id, boolean prefetch) getNodeByPath
(String path, Node node) Gets a node given its absolute path, or given an existing node and a relative path.getNodes
(List<Serializable> ids) Gets several nodes given their ids.getNodesByIds
(Collection<Serializable> ids, boolean prefetch) getParentNode
(Node node) Gets the parent of a node.Gets the absolute path of a node.getProxies
(Node document) Finds the proxies for a document.getProxies
(Node document, Node parent) Finds the proxies for a document.Gets the session repository name.Gets the root node of the repository.getVersionByLabel
(Serializable versionSeriesId, String label) Gets a version given its version series id and label.getVersions
(Serializable versionSeriesId) Gets all the versions for a given version series id.boolean
hasChildNode
(Node parent, String name, boolean complexProp) Checks if a child node with the given name exists.boolean
hasChildren
(Node parent, boolean complexProp) Checks it a node has children.boolean
Checks if change token management is enabled.boolean
Checks if fulltext extracted from the binary fields is internally stored as a blob.protected boolean
isIdNew
(Serializable id) protected void
markIndexingInProgress
(Set<Serializable> dirtyIds) Mark indexing in progress, so that future copies (including versions) will be indexed as well.void
markReferencedBlobs
(BiConsumer<String, String> markerCallback) void
Marks the document as being modified by a user change.Moves a node to a new location with a new name.protected String
protected void
noteQueryResult
(IterableQueryResult result) void
orderBefore
(Node parent, Node source, Node dest) Order the given source child node before the destination child node.protected void
Processes all invalidations accumulated.query
(String query, String queryType, QueryFilter queryFilter, long countUpTo) Makes a query to the database.query
(String query, QueryFilter queryFilter, boolean countTotal) Makes a NXQL query to the database.queryAndFetch
(String query, String queryType, QueryFilter queryFilter, boolean distinctDocuments, Object... params) Makes a query to the database and returns an iterable (which must be closed when done).queryAndFetch
(String query, String queryType, QueryFilter queryFilter, Object... params) Makes a query to the database and returns an iterable (which must be closed when done).queryProjection
(String query, String queryType, QueryFilter queryFilter, boolean distinctDocuments, long countUpTo, Object... params) Makes a query to the database.void
Rebuild the read ACLs for the whole repository.boolean
removeMixinType
(Node node, String mixin) Removes a mixin from a node.void
removeNode
(Node node, Consumer<Node> beforeRemove) Removes a node from the storage.void
removePropertyNode
(Node node) Removes a property node from the storage.void
Read ACLs are optimized ACLs for the read permission, they need to be updated after document creation or ACL change.void
Restores a node to a given version.void
rollback()
void
save()
Saves the modifications to persistent storage.protected void
scheduleWork
(List<Work> works) Get the next batch of results containing id of documents, thescrollId
is part of the previousScrollResult
response.Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within thekeepAliveSeconds
delay.scroll
(String query, QueryFilter queryFilter, 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
Post-transaction invalidations notification.void
setProxyTarget
(Node proxy, Serializable targetId) Sets a proxies' target.void
start()
void
Update only the read ACLs that have changed.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.storage.sql.Session
copy, getBinaryFulltext, removeNode
-
Field Details
-
COMPAT_REPOSITORY_NAME_KEY
Set this system property to false if you don't want repositories to be looked up under the compatibility name "default" in the "repositories" table.Only do this if you start from an empty database, or if you have migrated the "repositories" table by hand, or if you need to create a new repository in a database already containing a "default" repository (table sharing, not recommended).
- See Also:
-
repository
-
context
-
changeTokenEnabled
protected final boolean changeTokenEnabled -
fulltextDescriptor
-
registry
protected final io.dropwizard.metrics5.MetricRegistry registry -
queryResults
-
-
Constructor Details
-
SessionImpl
-
-
Method Details
-
getMapper
Description copied from interface:Session
Gets the low-level Mapper for this session. -
clearCaches
protected int clearCaches()Clears all the caches. Called by RepositoryManagement. -
getContext
-
generateNewId
Generates a new id, or used a pre-generated one (import). -
isIdNew
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceSession
-
closeSession
protected void closeSession() -
getRepositoryName
Description copied from interface:Session
Gets the session repository name.- Specified by:
getRepositoryName
in interfaceSession
- Returns:
- the repository name
-
getModel
Description copied from interface:Session
Gets theModel
associated to this session. -
getRootNode
Description copied from interface:Session
Gets the root node of the repository.- Specified by:
getRootNode
in interfaceSession
- Returns:
- the root node
-
save
public void save()Description copied from interface:Session
Saves the modifications to persistent storage.Modifications will be actually written only upon transaction commit.
-
flush
protected void flush() -
scheduleWork
-
doFlush
protected void doFlush() -
getContainingDocument
-
getFulltextWorks
Gets the fulltext updates to do. Called at save() time.- Returns:
- a list of
Work
instances to schedule post-commit.
-
markIndexingInProgress
Mark indexing in progress, so that future copies (including versions) will be indexed as well. -
sendInvalidationsToOthers
protected void sendInvalidationsToOthers()Post-transaction invalidations notification.Called post-transaction by session commit/rollback or transactionless save.
-
processReceivedInvalidations
protected void processReceivedInvalidations()Processes all invalidations accumulated.Called pre-transaction by start or transactionless save;
-
checkInvalidationsConflict
protected void checkInvalidationsConflict()Post transaction check invalidations processing. -
getNodeById
-
getNodeById
Description copied from interface:Session
Gets a node given its id.- Specified by:
getNodeById
in interfaceSession
- Parameters:
id
- the id- Returns:
- the node, or
null
if not found
-
getNodesByIds
-
findPrefetchedFragments
protected void findPrefetchedFragments(SimpleFragment hierFragment, List<RowId> bulkRowIds, Set<Serializable> proxyIds) Finds prefetched fragments for a hierarchy fragment, takes note of the ones that are proxies. -
getNodesByIds
Description copied from interface:Session
Gets several nodes given their ids.- Specified by:
getNodesByIds
in interfaceSession
- Parameters:
ids
- the ids- Returns:
- the nodes, in the same order as the ids, with elements being
null
if not found
-
getParentNode
Description copied from interface:Session
Gets the parent of a node.The root has a
null
parent.- Specified by:
getParentNode
in interfaceSession
- Parameters:
node
- the node- Returns:
- the parent node, or
null
for the root's parent
-
getPath
Description copied from interface:Session
Gets the absolute path of a node. -
normalize
-
getNodeByPath
Description copied from interface:Session
Gets a node given its absolute path, or given an existing node and a relative path.- Specified by:
getNodeByPath
in interfaceSession
- Parameters:
path
- the pathnode
- the node (ignored for absolute paths)- Returns:
- the node, or
null
if not found
-
addMixinType
Description copied from interface:Session
Adds a mixin to a node.Does nothing if the mixin was already present on the node.
- Specified by:
addMixinType
in interfaceSession
- Parameters:
node
- the nodemixin
- the mixin name- Returns:
true
if the mixin was added, orfalse
if it is already present
-
removeMixinType
Description copied from interface:Session
Removes a mixin from a node.It's not possible to remove a mixin coming from the primary type.
- Specified by:
removeMixinType
in interfaceSession
- Parameters:
node
- the nodemixin
- the mixin- Returns:
true
if the mixin was removed, orfalse
if it isn't present or is present on the type or does not exist
-
scroll
Description copied from interface:Session
Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within thekeepAliveSeconds
delay. -
scroll
public ScrollResult<String> scroll(String query, QueryFilter queryFilter, int batchSize, int keepAliveSeconds) Description copied from interface:Session
Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within thekeepAliveSeconds
delay. -
scroll
Description copied from interface:Session
Get the next batch of results containing id of documents, thescrollId
is part of the previousScrollResult
response. -
getChildrenNames
Gets complex children names defined by the primary type and the list of mixins. -
addChildNode
Description copied from interface:Session
Creates a new child node.- Specified by:
addChildNode
in interfaceSession
- Parameters:
parent
- the parent to which the child is addedname
- the child namepos
- the child position, ornull
typeName
- the child typecomplexProp
- whether this is a complex property (true
) or a regular child (false
)- Returns:
- the new node
-
addChildNode
public Node addChildNode(Serializable id, Node parent, String name, Long pos, String typeName, boolean complexProp) Description copied from interface:Session
Creates a new child node with given id (used for import).- Specified by:
addChildNode
in interfaceSession
- Parameters:
id
- the idparent
- the parent to which the child is addedname
- the child namepos
- the child position, ornull
typeName
- the child typecomplexProp
- whether this is a complex property (true
) or a regular child (false
)- Returns:
- the new node
-
addNode
protected Node addNode(Serializable id, Serializable parentId, String name, Long pos, String typeName, boolean complexProp) -
addProxy
public Node addProxy(Serializable targetId, Serializable versionableId, Node parent, String name, Long pos) Description copied from interface:Session
Creates a proxy for a version node. -
setProxyTarget
Description copied from interface:Session
Sets a proxies' target.- Specified by:
setProxyTarget
in interfaceSession
- Parameters:
proxy
- the proxytargetId
- the new target id
-
hasChildNode
Description copied from interface:Session
Checks if a child node with the given name exists.There are two kinds of children, the regular children documents and the complex properties. The
boolean
complexProp
allows a choice between those.- Specified by:
hasChildNode
in interfaceSession
- Parameters:
parent
- the parent nodename
- the child namecomplexProp
- whether to check complex properties or regular children- Returns:
true
if a child node with that name exists
-
getChildNode
Description copied from interface:Session
Gets a child node given its parent and name.- Specified by:
getChildNode
in interfaceSession
- Parameters:
parent
- the parent nodename
- the child namecomplexProp
- whether to check complex properties or regular children- Returns:
- the child node, or
null
is not found
-
hasChildren
Description copied from interface:Session
Checks it a node has children.- Specified by:
hasChildren
in interfaceSession
- Parameters:
parent
- the parent nodecomplexProp
- whether to check complex properties or regular children- Returns:
true
if the parent has children
-
getChildren
Description copied from interface:Session
Gets the children of a node.- Specified by:
getChildren
in interfaceSession
- Parameters:
parent
- the parent nodename
- the children name to get (for lists of complex properties), ornull
for allcomplexProp
- whether to check complex properties or regular children- Returns:
- the collection of children
-
orderBefore
Description copied from interface:Session
Order the given source child node before the destination child node. The source node will be placed before the destination one. If destination isnull
, the source node will be appended at the end of the children list.- Specified by:
orderBefore
in interfaceSession
- Parameters:
parent
- the parent nodesource
- the child node to movedest
- the child node before which to place the source node, ornull
to move at the end
-
move
Description copied from interface:Session
Moves a node to a new location with a new name.A
Session.save()
is automatically done first. -
copy
Description copied from interface:Session
Copies a node to a new location with a new name.A
Session.save()
is automatically done first. -
removeNode
Description copied from interface:Session
Removes a node from the storage.This is much more complex than removing a property node (
Session.removePropertyNode(org.nuxeo.ecm.core.storage.sql.Node)
).- Specified by:
removeNode
in interfaceSession
- Parameters:
node
- the node to removebeforeRemove
- a consumer called on nodes of records before they are removed- See Also:
-
removePropertyNode
Description copied from interface:Session
Removes a property node from the storage.This is much less complex that removing a generic document node (
Session.removeNode(org.nuxeo.ecm.core.storage.sql.Node)
).- Specified by:
removePropertyNode
in interfaceSession
- Parameters:
node
- the property node to remove- See Also:
-
checkIn
Description copied from interface:Session
Checks in a checked-out node: creates a new version with a copy of its information.A
Session.save()
is automatically done first. -
checkOut
Description copied from interface:Session
Checks out a checked-in node. -
restore
Description copied from interface:Session
Restores a node to a given version.The restored node is checked in.
-
getVersionByLabel
Description copied from interface:Session
Gets a version given its version series id and label.- Specified by:
getVersionByLabel
in interfaceSession
- Parameters:
versionSeriesId
- the version series idlabel
- the label- Returns:
- the version node, or
null
if not found
-
getLastVersion
Description copied from interface:Session
Gets the last version for a given version series id.A
Session.save()
is automatically done first.- Specified by:
getLastVersion
in interfaceSession
- Parameters:
versionSeriesId
- the version series id- Returns:
- the last version, or
null
if no versions exist
-
getVersions
Description copied from interface:Session
Gets all the versions for a given version series id.A
Session.save()
is automatically done first.- Specified by:
getVersions
in interfaceSession
- Parameters:
versionSeriesId
- the version series id- Returns:
- the list of versions
-
getProxies
Description copied from interface:Session
Finds the proxies for a document. If the parent is not null, the search will be limited to its direct children.If the document is a version, then only proxies to that version will be looked up.
Otherwise all proxies to the same version series than the document are retrieved.
A
Session.save()
is automatically done first.- Specified by:
getProxies
in interfaceSession
- Parameters:
document
- the documentparent
- the parent, ornull
- Returns:
- the list of proxies
-
getNodes
-
getProxies
Description copied from interface:Session
Finds the proxies for a document. (The document may be a version or a live document)- Specified by:
getProxies
in interfaceSession
- Parameters:
document
- the document- Returns:
- the list of proxies, or an empty list
-
getHierarchyAndAncestors
Fetches the hierarchy fragment for the given rows and all their ancestors.- Parameters:
ids
- the fragment ids
-
query
Description copied from interface:Session
Makes a NXQL query to the database. -
query
public PartialList<Serializable> query(String query, String queryType, QueryFilter queryFilter, long countUpTo) Description copied from interface:Session
Makes a query to the database.- Specified by:
query
in interfaceSession
- Parameters:
query
- the queryqueryType
- the query typequeryFilter
- the query filtercountUpTo
- if-1
, also count the total size without offset/limit.
If0
, don't count the total size.
Ifn
, count the total number if there are less than n documents otherwise set the size to-1
.- Returns:
- the resulting list with total size included
-
noteQueryResult
-
closeQueryResults
protected void closeQueryResults() -
queryAndFetch
public IterableQueryResult queryAndFetch(String query, String queryType, QueryFilter queryFilter, Object... params) Description copied from interface:Session
Makes a query to the database and returns an iterable (which must be closed when done).- Specified by:
queryAndFetch
in interfaceSession
- Parameters:
query
- the queryqueryType
- the query typequeryFilter
- the query filterparams
- optional query-type-dependent parameters- Returns:
- an iterable, which must be closed when done
-
queryAndFetch
public IterableQueryResult queryAndFetch(String query, String queryType, QueryFilter queryFilter, boolean distinctDocuments, Object... params) Description copied from interface:Session
Makes a query to the database and returns an iterable (which must be closed when done).- Specified by:
queryAndFetch
in interfaceSession
- Parameters:
query
- the queryqueryType
- the query typequeryFilter
- the query filterdistinctDocuments
- iftrue
then a maximum of one row per document will be returnedparams
- optional query-type-dependent parameters- Returns:
- an iterable, which must be closed when done
-
queryProjection
public PartialList<Map<String,Serializable>> queryProjection(String query, String queryType, QueryFilter queryFilter, boolean distinctDocuments, long countUpTo, Object... params) Description copied from interface:Session
Makes a query to the database.- Specified by:
queryProjection
in interfaceSession
- Parameters:
query
- the queryqueryType
- the query typequeryFilter
- the query filterdistinctDocuments
- iftrue
then a maximum of one row per document will be returnedcountUpTo
- if-1
, also count the total size without offset/limit.
If0
, don't count the total size.
Ifn
, count the total number if there are less than n documents otherwise set the size to-1
.params
- optional query-type-dependent parameters- Returns:
- a projection
-
getLockManager
Description copied from interface:Session
Gets the lock manager for this session.- Specified by:
getLockManager
in interfaceSession
- Returns:
- the lock manager
-
requireReadAclsUpdate
public void requireReadAclsUpdate()Description copied from interface:Session
Read ACLs are optimized ACLs for the read permission, they need to be updated after document creation or ACL change.This method flag the current session, the read ACLs update will be done automatically at save time.
- Specified by:
requireReadAclsUpdate
in interfaceSession
-
updateReadAcls
public void updateReadAcls()Description copied from interface:Session
Update only the read ACLs that have changed.- Specified by:
updateReadAcls
in interfaceSession
-
rebuildReadAcls
public void rebuildReadAcls()Description copied from interface:Session
Rebuild the read ACLs for the whole repository.- Specified by:
rebuildReadAcls
in interfaceSession
-
markReferencedBlobs
-
cleanupDeletedDocuments
-
start
public void start() -
end
public void end() -
commit
public void commit() -
rollback
public void rollback() -
getCacheSize
public long getCacheSize() -
getCacheMapperSize
public long getCacheMapperSize() -
getCachePristineSize
public long getCachePristineSize() -
getCacheSelectionSize
public long getCacheSelectionSize() -
isFulltextStoredInBlob
public boolean isFulltextStoredInBlob()Description copied from interface:Session
Checks if fulltext extracted from the binary fields is internally stored as a blob.- Specified by:
isFulltextStoredInBlob
in interfaceSession
- Returns:
true
if fulltext from binaries is store as a blob
-
getBinaryFulltext
Description copied from interface:Session
Gets the fulltext extracted from the binary fields.- Specified by:
getBinaryFulltext
in interfaceSession
-
isChangeTokenEnabled
public boolean isChangeTokenEnabled()Description copied from interface:Session
Checks if change token management is enabled.- Specified by:
isChangeTokenEnabled
in interfaceSession
-
markUserChange
Description copied from interface:Session
Marks the document as being modified by a user change.This causes an additional change token increment and check during save.
- Specified by:
markUserChange
in interfaceSession
- Parameters:
id
- the document id
-