From fe23dbd2b9dff76de9c60ce19abe1f75bb2dc49c Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 17 Oct 2013 05:03:23 +0000 Subject: [PATCH] RM-981: Stack specific: "Failed to get lock" error when performing actions with "List of Values" and "Relationships" in Management Console git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@56762 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../job/RecordsManagementJob.java | 37 ++++--------------- .../job/RecordsManagementJobExecuter.java | 12 +++++- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java index 9987308e3d..ac31ef8117 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java @@ -18,12 +18,9 @@ */ package org.alfresco.module.org_alfresco_module_rm.job; -import java.util.concurrent.atomic.AtomicBoolean; - import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.lock.JobLockService; import org.alfresco.repo.lock.LockAcquisitionException; -import org.alfresco.repo.lock.JobLockService.JobLockRefreshCallback; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.namespace.NamespaceService; @@ -102,37 +99,17 @@ public class RecordsManagementJob implements Job { // try and get the lock String lockToken = getLock(); - if (lockToken == null) - { - // exit - return null; - } - - // use a flag to keep track of the running job - final AtomicBoolean running = new AtomicBoolean(true); - jobLockService.refreshLock(lockToken, getLockQName(), DEFAULT_TIME, new JobLockRefreshCallback() - { - @Override - public boolean isActive() + if (lockToken != null) + { + try { - return running.get(); + // do work + jobExecuter.execute(); } - @Override - public void lockReleased() + finally { - running.set(false); + jobLockService.releaseLock(lockToken, getLockQName()); } - }); - - try - { - // do work - jobExecuter.execute(); - } - finally - { - // The lock will self-release if answer isActive in the negative - running.set(false); } // return diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java index ae36e7df58..5e18f39025 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java @@ -21,6 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.job; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.admin.RepositoryState; import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; /** * Records management job executer base class. @@ -59,7 +60,16 @@ public abstract class RecordsManagementJobExecuter implements RecordsManagementM // jobs not allowed to execute unless bootstrap is complete if (repositoryState.isBootstrapping() == false) { - executeImpl(); + retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + executeImpl(); + + return null; + } + }, false, true); } }