diff --git a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml index 391a463c2d..5e47d6b773 100644 --- a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml +++ b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml @@ -85,7 +85,7 @@ - + @@ -113,6 +113,20 @@ + + + true + + + + + + + + + + + diff --git a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java index 0bf05a1a11..d157bac9b3 100644 --- a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java +++ b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java @@ -164,62 +164,63 @@ public abstract class AbstractFeedGenerator implements FeedGenerator return; } - LockCallback lockCallback = new LockCallback(); - String lockToken = null; - try + //MNT-12145 : BM-0013 Soak test: Exception during generation of feeds org.springframework.dao.DataIntegrityViolationException. + // run one job cycle + RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper(); + + helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() { - lockToken = acquireLock(lockCallback); - - // lock held here - - if (logger.isTraceEnabled()) + public Void execute() throws Throwable { - logger.trace("Activities feed generator started"); - } - // run one job cycle - RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper(); - // respect read-only server - helper.setForceWritable(true); - helper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable + LockCallback lockCallback = new LockCallback(); + + String lockToken = null; + try { - generate(); - return null; - } - }); + lockToken = acquireLock(lockCallback); - if (logger.isTraceEnabled()) - { - logger.trace("Activities feed generator completed"); - } - } - catch (LockAcquisitionException e) - { - // Job being done by another process - if (logger.isDebugEnabled()) - { + // lock held here + + if (logger.isTraceEnabled()) + { + logger.trace("Activities feed generator started"); + } + + generate(); + + if (logger.isTraceEnabled()) + { + logger.trace("Activities feed generator completed"); + } + } + catch (LockAcquisitionException e) + { + // Job being done by another process + if (logger.isDebugEnabled()) + { logger.debug("Activities feed generator already underway: " + LOCK_QNAME); + } + } + catch (Throwable e) + { + // If the VM is shutting down, then ignore + if (vmShutdownListener.isVmShuttingDown()) + { + // Ignore + } + else + { + logger.error("Exception during generation of feeds", e); + } + } + finally + { + releaseLock(lockCallback, lockToken); + } + return null; } - } - catch (Throwable e) - { - // If the VM is shutting down, then ignore - if (vmShutdownListener.isVmShuttingDown()) - { - // Ignore - } - else - { - logger.error("Exception during generation of feeds", e); - } - } - finally - { - releaseLock(lockCallback, lockToken); - } + }, false, false); } protected abstract boolean generate() throws Exception;