From cd92e7c08e9daf243246ec75f055b9cfc755c03f Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Mon, 7 Nov 2011 16:27:33 +0000 Subject: [PATCH] Merged V3.4-BUG-FIX to HEAD - 31807: Fixed side effect to ALF-718 * transaction created for work done after commit * templates that call methods that require transaction now work git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31810 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../action/executer/MailActionExecuter.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java index 655f3f2509..9d9ce2b123 100644 --- a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java @@ -37,7 +37,9 @@ import org.alfresco.repo.template.HasAspectMethod; import org.alfresco.repo.template.I18NMessageMethod; import org.alfresco.repo.template.TemplateNode; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; +import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.TransactionListenerAdapter; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ParameterDefinition; @@ -66,7 +68,7 @@ import org.springframework.mail.javamail.MimeMessagePreparator; * @author Roy Wetherall */ public class MailActionExecuter extends ActionExecuterAbstractBase - implements InitializingBean, TestModeable + implements InitializingBean, TestModeable { private static Log logger = LogFactory.getLog(MailActionExecuter.class); @@ -303,19 +305,28 @@ public class MailActionExecuter extends ActionExecuterAbstractBase { if (sendAfterCommit(ruleAction)) { - AlfrescoTransactionSupport.bindListener(new TransactionListenerAdapter() - { - @Override - public void afterCommit() - { - prepareAndSendEmail(ruleAction, actionedUponNodeRef); + AlfrescoTransactionSupport.bindListener(new TransactionListenerAdapter() + { + @Override + public void afterCommit() + { + RetryingTransactionHelper helper = serviceRegistry.getRetryingTransactionHelper(); + helper.doInTransaction(new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + prepareAndSendEmail(ruleAction, actionedUponNodeRef); + return null; + } + }, false, true); } }); } else - { + { prepareAndSendEmail(ruleAction, actionedUponNodeRef); - } + } } private boolean sendAfterCommit(Action action)