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
This commit is contained in:
Roy Wetherall
2013-10-17 05:03:23 +00:00
parent 2b1feb6cf2
commit fe23dbd2b9
2 changed files with 18 additions and 31 deletions

View File

@@ -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

View File

@@ -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<Void>()
{
@Override
public Void execute() throws Throwable
{
executeImpl();
return null;
}
}, false, true);
}
}