mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Rework APIs of new getChildAssocs with result count limit
- Use regular pattern of get -> select in the DAO - All getChildren* batching done after the query - Unit tests - In progress: Added option (low level select only) to constrain by assoc ID git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31318 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -55,9 +55,9 @@ import org.alfresco.repo.domain.usage.UsageDAO;
|
||||
import org.alfresco.repo.policy.BehaviourFilter;
|
||||
import org.alfresco.repo.security.permissions.AccessControlListProperties;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||
import org.alfresco.repo.transaction.TransactionAwareSingleton;
|
||||
import org.alfresco.repo.transaction.TransactionListenerAdapter;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.InvalidTypeException;
|
||||
@@ -71,20 +71,20 @@ import org.alfresco.service.cmr.repository.DuplicateChildNodeNameException;
|
||||
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
|
||||
import org.alfresco.service.cmr.repository.InvalidStoreRefException;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef.Status;
|
||||
import org.alfresco.service.cmr.repository.Path;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef.Status;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.transaction.ReadOnlyServerException;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.util.EqualsHelper;
|
||||
import org.alfresco.util.EqualsHelper.MapValueComparison;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.alfresco.util.ReadWriteLockExecuter;
|
||||
import org.alfresco.util.SerializationUtils;
|
||||
import org.alfresco.util.EqualsHelper.MapValueComparison;
|
||||
import org.apache.commons.lang.mutable.MutableInt;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -2900,7 +2900,6 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
*/
|
||||
private class ChildAssocRefBatchingQueryCallback implements ChildAssocRefQueryCallback
|
||||
{
|
||||
private static final int BATCH_SIZE = 256 * 4;
|
||||
private final ChildAssocRefQueryCallback callback;
|
||||
private final boolean preload;
|
||||
private final List<NodeRef> nodeRefs;
|
||||
@@ -2935,18 +2934,10 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
Pair<Long, NodeRef> parentNodePair,
|
||||
Pair<Long, NodeRef> childNodePair)
|
||||
{
|
||||
if (!preload)
|
||||
if (preload)
|
||||
{
|
||||
return callback.handle(childAssocPair, parentNodePair, childNodePair);
|
||||
nodeRefs.add(childNodePair.getSecond());
|
||||
}
|
||||
// Batch it
|
||||
if (nodeRefs.size() >= BATCH_SIZE)
|
||||
{
|
||||
cacheNodes(nodeRefs);
|
||||
nodeRefs.clear();
|
||||
}
|
||||
nodeRefs.add(childNodePair.getSecond());
|
||||
|
||||
return callback.handle(childAssocPair, parentNodePair, childNodePair);
|
||||
}
|
||||
public void done()
|
||||
@@ -2957,7 +2948,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
cacheNodes(nodeRefs);
|
||||
nodeRefs.clear();
|
||||
}
|
||||
|
||||
// Done
|
||||
callback.done();
|
||||
}
|
||||
}
|
||||
@@ -2977,6 +2968,23 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
new ChildAssocRefBatchingQueryCallback(resultsCallback));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getChildAssocs(
|
||||
Long parentNodeId,
|
||||
QName assocTypeQName,
|
||||
QName assocQName,
|
||||
int maxResults,
|
||||
ChildAssocRefQueryCallback resultsCallback)
|
||||
{
|
||||
selectChildAssocs(
|
||||
parentNodeId,
|
||||
assocTypeQName,
|
||||
assocQName,
|
||||
null,
|
||||
maxResults,
|
||||
new ChildAssocRefBatchingQueryCallback(resultsCallback));
|
||||
}
|
||||
|
||||
public void getChildAssocs(Long parentNodeId, Set<QName> assocTypeQNames, ChildAssocRefQueryCallback resultsCallback)
|
||||
{
|
||||
switch (assocTypeQNames.size())
|
||||
@@ -3926,6 +3934,13 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
Boolean isPrimary,
|
||||
Boolean sameStore,
|
||||
ChildAssocRefQueryCallback resultsCallback);
|
||||
protected abstract void selectChildAssocs(
|
||||
Long parentNodeId,
|
||||
QName assocTypeQName,
|
||||
QName assocQName,
|
||||
Long minAssocIdInclusive,
|
||||
int maxResults,
|
||||
ChildAssocRefQueryCallback resultsCallback);
|
||||
protected abstract void selectChildAssocs(
|
||||
Long parentNodeId,
|
||||
Set<QName> assocTypeQNames,
|
||||
|
Reference in New Issue
Block a user