diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
index 30ce99ce9e..932d24c525 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
@@ -71,7 +71,6 @@
-
@@ -124,7 +123,6 @@
-
diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
index dd443d8eb3..dc391f5046 100644
--- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
+++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml
@@ -390,23 +390,17 @@
-
-
-
-
-
-
-
-
+
+
-
+
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
index 41bb9576b8..f8b784d342 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
@@ -346,4 +346,4 @@ public interface FilePlanService
*/
NodeRef createRecordCategory(NodeRef parent, String name, Map properties);
-}
\ No newline at end of file
+}
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java
index a700b9dce9..9c2379c302 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java
@@ -42,7 +42,6 @@ import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
-import org.alfresco.module.org_alfresco_module_rm.util.RMContainerCacheManager;
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.domain.node.NodeDAO;
@@ -90,6 +89,9 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
/** root container cache */
private SimpleCache, NodeRef> rootContainerCache;
+ /** root records management cache */
+ private SimpleCache, Set> rootRecordsManagementCache;
+
/** File plan role service */
private FilePlanRoleService filePlanRoleService;
@@ -102,9 +104,6 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
/** Site service */
private SiteService siteService;
- /** RM container cache manager **/
- private RMContainerCacheManager rmContainerCacheManager;
-
/**
* Gets the file plan role service
*
@@ -179,12 +178,11 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
}
/**
- * @param rmContainerCacheManager RM container cache manager
- *
+ * @param rootRecordsManagementCache root records management node cache
*/
- public void setRmContainerCacheManager(RMContainerCacheManager rmContainerCacheManager)
+ public void setRootRecordsManagementCache(SimpleCache, Set> rootRecordsManagementCache)
{
- this.rmContainerCacheManager = rmContainerCacheManager;
+ this.rootRecordsManagementCache = rootRecordsManagementCache;
}
/**
@@ -199,7 +197,9 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
Set aspects = new HashSet<>(1);
aspects.add(ASPECT_RECORDS_MANAGEMENT_ROOT);
- if (!rmContainerCacheManager.isCached(storeRef))
+ Pair key = new Pair(storeRef, ASPECT_RECORDS_MANAGEMENT_ROOT.toString());
+
+ if (!rootRecordsManagementCache.contains(key))
{
getNodeDAO().getNodesWithAspects(aspects, Long.MIN_VALUE, Long.MAX_VALUE, new NodeDAO.NodeRefQueryCallback()
{
@@ -210,16 +210,20 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
if (storeRef.equals(nodeRef.getStoreRef()))
{
results.add(nodeRef);
- rmContainerCacheManager.add(nodeRef);
}
return true;
}
});
+
+ if (results.size() > 0)
+ {
+ rootRecordsManagementCache.put(key, results);
+ }
}
else
{
- return rmContainerCacheManager.get(storeRef);
+ return rootRecordsManagementCache.get(key);
}
return results;
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
index 582c6ec1d6..72a7894901 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java
@@ -33,7 +33,6 @@ import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService;
-import org.alfresco.module.org_alfresco_module_rm.util.RMContainerCacheManager;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.policy.annotation.Behaviour;
@@ -56,8 +55,7 @@ import org.alfresco.service.namespace.QName;
defaultType = "rma:recordsManagementContainer"
)
public class RecordsManagementContainerType extends BaseBehaviourBean
- implements NodeServicePolicies.OnCreateChildAssociationPolicy,
- NodeServicePolicies.OnDeleteChildAssociationPolicy
+ implements NodeServicePolicies.OnCreateChildAssociationPolicy
{
/** behaviour name */
private static final String BEHAVIOUR_NAME = "onCreateContainerType";
@@ -71,21 +69,9 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
/** record folder service */
protected RecordFolderService recordFolderService;
- /** RM container cache manager **/
- private RMContainerCacheManager rmContainerCacheManager;
-
/** I18N */
private static final String MSG_CANNOT_CAST_TO_RM_TYPE = "rm.action.cast-to-rm-type";
- /**
- * @param rmContainerCacheManager RM container cache manager
- *
- */
- public void setRmContainerCacheManager(RMContainerCacheManager rmContainerCacheManager)
- {
- this.rmContainerCacheManager = rmContainerCacheManager;
- }
-
/**
* @param identifierService identifier service
*/
@@ -208,48 +194,12 @@ public class RecordsManagementContainerType extends BaseBehaviourBean
setIdenifierProperty(child);
}
}
-
- if (rmContainerCacheManager != null)
- {
- rmContainerCacheManager.add(child);
- }
}
return null;
}
});
- }
- /**
- * Attempts to remove a deleted node from records management root cache
- *
- * @see org.alfresco.repo.node.NodeServicePolicies.OnDeleteAssociationPolicy#onDeleteAssociation(org.alfresco.service.cmr.repository.AssociationRef)
- */
- @Override
- @Behaviour
- (
- kind = BehaviourKind.ASSOCIATION,
- notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT
- )
- public void onDeleteChildAssociation(ChildAssociationRef childAssocRef)
- {
-
- AuthenticationUtil.runAsSystem(new RunAsWork()
- {
- @Override
- public Void doWork()
- {
- // Get the elements of the deleted association
- final NodeRef child = childAssocRef.getChildRef();
-
- if (rmContainerCacheManager != null)
- {
- rmContainerCacheManager.remove(child);
- }
-
- return null;
- }
- });
}
/**
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java
index c9f6e22ef4..76b31f5250 100644
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java
+++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java
@@ -39,7 +39,6 @@ import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
-import org.alfresco.module.org_alfresco_module_rm.util.RMContainerCacheManager;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.policy.annotation.Behaviour;
@@ -74,8 +73,7 @@ public class RmSiteType extends BaseBehaviourBean
implements NodeServicePolicies.OnCreateNodePolicy,
NodeServicePolicies.OnUpdatePropertiesPolicy,
NodeServicePolicies.BeforeDeleteNodePolicy,
- NodeServicePolicies.OnCreateChildAssociationPolicy,
- NodeServicePolicies.OnDeleteChildAssociationPolicy
+ NodeServicePolicies.OnCreateChildAssociationPolicy
{
/** Constant values */
public static final String COMPONENT_DOCUMENT_LIBRARY = "documentLibrary";
@@ -97,9 +95,6 @@ public class RmSiteType extends BaseBehaviourBean
private FilePlanType filePlanType;
- /** RM container cache manager **/
- private RMContainerCacheManager rmContainerCacheManager;
-
/** Map of file plan type's key'ed by corresponding site types */
protected Map mapFilePlanType = new HashMap<>(3);
@@ -110,7 +105,7 @@ public class RmSiteType extends BaseBehaviourBean
public void setSiteService(SiteService siteService)
{
this.siteService = siteService;
- }
+ }
/**
* @param recordsManagementSearchService records management search service
@@ -141,15 +136,6 @@ public class RmSiteType extends BaseBehaviourBean
this.filePlanType = filePlanType;
}
- /**
- * @param rmContainerCacheManager RM container cache manager
- *
- */
- public void setRmContainerCacheManager(RMContainerCacheManager rmContainerCacheManager)
- {
- this.rmContainerCacheManager = rmContainerCacheManager;
- }
-
/**
* Registers a file plan type for a specific site type.
*
@@ -324,36 +310,6 @@ public class RmSiteType extends BaseBehaviourBean
}
}
- /**
- * Handles site deletion in order to reset the records management root cache
- *
- * @param childAssocRef
- *
- * @see org.alfresco.repo.node.NodeServicePolicies.OnDeleteAssociationPolicy#onDeleteAssociation(org.alfresco.service.cmr.repository.AssociationRef)
- */
- @Override
- @Behaviour
- (
- kind = BehaviourKind.ASSOCIATION
- )
- public void onDeleteChildAssociation(ChildAssociationRef childAssocRef)
- {
- AuthenticationUtil.runAsSystem(new RunAsWork()
- {
- @Override
- public Void doWork()
- {
- // Resets RM Container Cache Manager
- if (rmContainerCacheManager != null)
- {
- rmContainerCacheManager.reset();
- }
-
- return null;
- }
- });
- }
-
/**
* Add the limitation of creating only one rma:filePlan or one dod:filePlan depending on the type of rm site.
* Let multiple cm:folder type be created under rm site.
@@ -383,13 +339,6 @@ public class RmSiteType extends BaseBehaviourBean
});
}
- /**
- * Handles the deletion node policy (alf:onDeleteNode), resetting the records management root cache
- * and enabling file plan behavior as well
- *
- * @param childAssocRef
- * @param isNodeArchived
- */
@Behaviour
(
kind = BehaviourKind.CLASS,
@@ -398,12 +347,6 @@ public class RmSiteType extends BaseBehaviourBean
)
public void onDeleteNodeOnCommit(ChildAssociationRef childAssocRef, boolean isNodeArchived)
{
- // Resets RM Container Cache Manager
- if (rmContainerCacheManager != null)
- {
- rmContainerCacheManager.reset();
- }
-
filePlanType.enable();
}
}
diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/util/RMContainerCacheManager.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/util/RMContainerCacheManager.java
deleted file mode 100644
index 2517198e02..0000000000
--- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/util/RMContainerCacheManager.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * #%L
- * Alfresco Records Management Module
- * %%
- * Copyright (C) 2005 - 2020 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * -
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- * -
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * -
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- * -
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
-package org.alfresco.module.org_alfresco_module_rm.util;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
-import org.alfresco.repo.cache.SimpleCache;
-import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.repository.NodeService;
-import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.namespace.QName;
-import org.alfresco.util.Pair;
-
-/**
- * Provides operations to manipulate the records management root cache
- *
- * @author Tiago Salvado
- *
- * @see RecordsManagementModel
- */
-public class RMContainerCacheManager implements RecordsManagementModel
-{
- /** node service */
- private NodeService nodeService;
-
- /** root records management cache */
- private SimpleCache, Set> cache;
-
- /**
- * @param nodeService
- * node service
- */
- public void setNodeService(NodeService nodeService)
- {
- this.nodeService = nodeService;
- }
-
- /**
- * @param cache
- */
- public void setCache(SimpleCache, Set> cache)
- {
- this.cache = cache;
- }
-
- /**
- * Verifies if there is cached nodes for supplied storeRef
- *
- * @param storeRef
- * @return true if there are cached nodes, false otherwise
- */
- public boolean isCached(StoreRef storeRef)
- {
- return cache.contains(getKey(storeRef));
- }
-
- /**
- * Obtains the cached nodes for supplied storeRef
- *
- * @param storeRef
- * @return a set containing the cached nodes
- */
- public Set get(StoreRef storeRef)
- {
- return cache.get(getKey(storeRef));
- }
-
- /**
- * Caches the supplied node
- *
- * @param nodeRef
- */
- public void add(NodeRef nodeRef)
- {
- if (nodeRef != null && nodeService.hasAspect(nodeRef, ASPECT_RECORDS_MANAGEMENT_ROOT))
- {
- Set entries;
- Pair key = getKey(nodeRef.getStoreRef());
-
- if (cache.contains(key))
- {
- entries = this.cache.get(key);
- }
- else
- {
- entries = new HashSet<>();
- }
-
- if (!entries.contains(nodeRef))
- {
- entries.add(nodeRef);
- }
-
- cache.put(key, entries);
- }
- }
-
- /**
- * Removes the supplied entry from the cache
- *
- * @param nodeRef
- */
- public void remove(NodeRef nodeRef)
- {
- if (nodeRef != null)
- {
- if (nodeService.hasAspect(nodeRef, ASPECT_RECORDS_MANAGEMENT_ROOT))
- {
- Pair key = getKey(nodeRef.getStoreRef());
- if (cache.contains(key))
- {
- cache.get(key).remove(nodeRef);
- }
- }
- }
- }
-
- /**
- * Resets the cache entries
- */
- public void reset()
- {
- this.cache.clear();
- }
-
- /**
- * Builds the cache key using the supplied storeRef
- *
- * @param storeRef
- * @return a pair corresponding to the cache key
- */
- private Pair getKey(StoreRef storeRef)
- {
- return new Pair(storeRef, ASPECT_RECORDS_MANAGEMENT_ROOT.toString());
- }
-}
diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java
index 1d81ab517c..a8b31ff55e 100644
--- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java
+++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java
@@ -57,7 +57,6 @@ import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService;
-import org.alfresco.module.org_alfresco_module_rm.util.RMContainerCacheManager;
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.policy.PolicyComponent;
@@ -174,9 +173,6 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected InplaceRecordService inplaceRecordService;
protected RelationshipService relationshipService;
- /** RM Container Cache Manager */
- protected RMContainerCacheManager rmContainerCacheManager;
-
/** test utils */
protected UserAndGroupsUtils userAndGroupsUtils;
@@ -428,9 +424,6 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
holdService = (HoldService) applicationContext.getBean("HoldService");
inplaceRecordService = (InplaceRecordService) applicationContext.getBean("InplaceRecordService");
relationshipService = (RelationshipService) applicationContext.getBean("RelationshipService");
-
- // RM Container Cache Manager
- rmContainerCacheManager = (RMContainerCacheManager) applicationContext.getBean("rmContainerCacheManager");
}
/**
@@ -491,11 +484,6 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
{
siteService.deleteSite(collabSiteId);
}
-
- if (rmContainerCacheManager != null)
- {
- rmContainerCacheManager.reset();
- }
}
finally
{
@@ -948,7 +936,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
public void then() throws Exception { /** empty implementation */ }
public void after() throws Exception { /** empty implementation */ }
-
+
public void run() throws Exception
{
try