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
This commit is contained in:
Roy Wetherall
2011-11-07 16:27:33 +00:00
parent b1b12be5eb
commit cd92e7c08e

View File

@@ -37,7 +37,9 @@ import org.alfresco.repo.template.HasAspectMethod;
import org.alfresco.repo.template.I18NMessageMethod; import org.alfresco.repo.template.I18NMessageMethod;
import org.alfresco.repo.template.TemplateNode; import org.alfresco.repo.template.TemplateNode;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.TransactionListenerAdapter; import org.alfresco.repo.transaction.TransactionListenerAdapter;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.ServiceRegistry; import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.action.ParameterDefinition;
@@ -66,7 +68,7 @@ import org.springframework.mail.javamail.MimeMessagePreparator;
* @author Roy Wetherall * @author Roy Wetherall
*/ */
public class MailActionExecuter extends ActionExecuterAbstractBase public class MailActionExecuter extends ActionExecuterAbstractBase
implements InitializingBean, TestModeable implements InitializingBean, TestModeable
{ {
private static Log logger = LogFactory.getLog(MailActionExecuter.class); private static Log logger = LogFactory.getLog(MailActionExecuter.class);
@@ -303,19 +305,28 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
{ {
if (sendAfterCommit(ruleAction)) if (sendAfterCommit(ruleAction))
{ {
AlfrescoTransactionSupport.bindListener(new TransactionListenerAdapter() AlfrescoTransactionSupport.bindListener(new TransactionListenerAdapter()
{ {
@Override @Override
public void afterCommit() public void afterCommit()
{ {
prepareAndSendEmail(ruleAction, actionedUponNodeRef); RetryingTransactionHelper helper = serviceRegistry.getRetryingTransactionHelper();
helper.doInTransaction(new RetryingTransactionCallback<Void>()
{
@Override
public Void execute() throws Throwable
{
prepareAndSendEmail(ruleAction, actionedUponNodeRef);
return null;
}
}, false, true);
} }
}); });
} }
else else
{ {
prepareAndSendEmail(ruleAction, actionedUponNodeRef); prepareAndSendEmail(ruleAction, actionedUponNodeRef);
} }
} }
private boolean sendAfterCommit(Action action) private boolean sendAfterCommit(Action action)