mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
ALF-2314 - WCM Deployment: Deployment Report fails if deploying multiple targets (concurrently)
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19788 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -650,6 +650,9 @@
|
|||||||
<property name="deploymentService">
|
<property name="deploymentService">
|
||||||
<ref bean="DeploymentService"/>
|
<ref bean="DeploymentService"/>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="transactionService">
|
||||||
|
<ref bean="TransactionService"/>
|
||||||
|
</property>
|
||||||
<property name="contentService">
|
<property name="contentService">
|
||||||
<ref bean="ContentService"/>
|
<ref bean="ContentService"/>
|
||||||
</property>
|
</property>
|
||||||
|
@@ -34,6 +34,8 @@ import org.alfresco.repo.action.ParameterDefinitionImpl;
|
|||||||
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
|
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
|
||||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
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;
|
||||||
import org.alfresco.service.cmr.avm.deploy.DeploymentCallback;
|
import org.alfresco.service.cmr.avm.deploy.DeploymentCallback;
|
||||||
@@ -48,6 +50,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
|
|||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.util.Pair;
|
import org.alfresco.util.Pair;
|
||||||
import org.alfresco.util.RegexNameMatcher;
|
import org.alfresco.util.RegexNameMatcher;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
@@ -85,6 +88,7 @@ public class AVMDeployWebsiteAction extends ActionExecuterAbstractBase
|
|||||||
private DeploymentService deployService;
|
private DeploymentService deployService;
|
||||||
private ContentService contentService;
|
private ContentService contentService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
|
private TransactionService transactionService;
|
||||||
|
|
||||||
private static Log logger = LogFactory.getLog(AVMDeployWebsiteAction.class);
|
private static Log logger = LogFactory.getLog(AVMDeployWebsiteAction.class);
|
||||||
private static Log delayDeploymentLogger = LogFactory.getLog("alfresco.deployment.delay");
|
private static Log delayDeploymentLogger = LogFactory.getLog("alfresco.deployment.delay");
|
||||||
@@ -467,14 +471,19 @@ public class AVMDeployWebsiteAction extends ActionExecuterAbstractBase
|
|||||||
* deployment was successful
|
* deployment was successful
|
||||||
* @return The created deployment report NodeRef
|
* @return The created deployment report NodeRef
|
||||||
*/
|
*/
|
||||||
private NodeRef createDeploymentReportNode(DeploymentReport report, NodeRef attempt,
|
private NodeRef createDeploymentReportNode(final DeploymentReport report,
|
||||||
Map<QName, Serializable> serverProps, int version, NodeRef websiteRef,
|
final NodeRef attempt,
|
||||||
Date startDate, Throwable error)
|
final Map<QName, Serializable> serverProps,
|
||||||
|
final int version,
|
||||||
|
final NodeRef websiteRef,
|
||||||
|
final Date startDate,
|
||||||
|
final Throwable error)
|
||||||
{
|
{
|
||||||
|
logger.debug("createDeploymentReportNode called ");
|
||||||
NodeRef reportRef = null;
|
NodeRef reportRef = null;
|
||||||
|
|
||||||
String serverUri = calculateServerUri(serverProps);
|
final String serverUri = calculateServerUri(serverProps);
|
||||||
Map<QName, Serializable> reportProps = new HashMap<QName, Serializable>(4, 1.0f);
|
final Map<QName, Serializable> reportProps = new HashMap<QName, Serializable>(4, 1.0f);
|
||||||
reportProps.put(WCMAppModel.PROP_DEPLOYSERVER, serverUri);
|
reportProps.put(WCMAppModel.PROP_DEPLOYSERVER, serverUri);
|
||||||
reportProps.put(WCMAppModel.PROP_DEPLOYVERSION, version);
|
reportProps.put(WCMAppModel.PROP_DEPLOYVERSION, version);
|
||||||
reportProps.put(WCMAppModel.PROP_DEPLOYSTARTTIME, startDate);
|
reportProps.put(WCMAppModel.PROP_DEPLOYSTARTTIME, startDate);
|
||||||
@@ -507,7 +516,16 @@ public class AVMDeployWebsiteAction extends ActionExecuterAbstractBase
|
|||||||
reportProps.put(WCMAppModel.PROP_DEPLOYFAILEDREASON, errorMsg);
|
reportProps.put(WCMAppModel.PROP_DEPLOYFAILEDREASON, errorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
reportRef = this.nodeService.createNode(attempt,
|
RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper();
|
||||||
|
|
||||||
|
RetryingTransactionCallback<NodeRef> cb = new RetryingTransactionCallback<NodeRef>()
|
||||||
|
{
|
||||||
|
public NodeRef execute() throws Throwable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Write out the deployment report
|
||||||
|
*/
|
||||||
|
NodeRef reportRef = nodeService.createNode(attempt,
|
||||||
WCMAppModel.ASSOC_DEPLOYMENTREPORTS, WCMAppModel.ASSOC_DEPLOYMENTREPORTS,
|
WCMAppModel.ASSOC_DEPLOYMENTREPORTS, WCMAppModel.ASSOC_DEPLOYMENTREPORTS,
|
||||||
WCMAppModel.TYPE_DEPLOYMENTREPORT, reportProps).getChildRef();
|
WCMAppModel.TYPE_DEPLOYMENTREPORT, reportProps).getChildRef();
|
||||||
ContentWriter writer = contentService.getWriter(reportRef, ContentModel.PROP_CONTENT, true);
|
ContentWriter writer = contentService.getWriter(reportRef, ContentModel.PROP_CONTENT, true);
|
||||||
@@ -544,10 +562,27 @@ public class AVMDeployWebsiteAction extends ActionExecuterAbstractBase
|
|||||||
writer.putContent(builder.toString());
|
writer.putContent(builder.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return reportRef;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Run the creation of the deployment report in its own write transaction
|
||||||
|
reportRef = tran.doInTransaction(cb, false, true);
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("Created deplyoment report node (" + reportRef + ") for server " +
|
logger.debug("Created deplyoment report node (" + reportRef + ") for server " +
|
||||||
serverUri);
|
serverUri);
|
||||||
|
|
||||||
return reportRef;
|
return reportRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTransactionService(TransactionService transactionService)
|
||||||
|
{
|
||||||
|
this.transactionService = transactionService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TransactionService getTransactionService()
|
||||||
|
{
|
||||||
|
return transactionService;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user