diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js index df8e0e0b7e..cbc208e0f8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/move.post.json.js @@ -42,34 +42,27 @@ function main() } // Finally, now we can do what we are supposed to do - try + var currentName = new String(page.name); + + page.name = newName; + page.properties["cm:title"] = new String(newName).replace(/_/g, " "); + page.save(); + + var placeholder = createWikiPage(currentName, wiki, { - var currentName = new String(page.name); + content: "This page has been moved [[" + newName + "|here]]." + }); - page.name = newName; - page.properties["cm:title"] = new String(newName).replace(/_/g, " "); - page.save(); - - var placeholder = createWikiPage(currentName, wiki, - { - content: "This page has been moved [[" + newName + "|here]]." - }); - - var data = - { - title: newName.replace(/_/g, " "), - page: json.get("page") + "?title=" + newName, - custom0: currentName.replace(/_/g, " ") - } - - activities.postActivity("org.alfresco.wiki.page-renamed", params.siteId, "wiki", jsonUtils.toJSONString(data)); - - return { - name: newName // Return the new name to the client (?) - } + var data = + { + title: newName.replace(/_/g, " "), + page: json.get("page") + "?title=" + newName, + custom0: currentName.replace(/_/g, " ") } - catch (e) - { - return jsonError(e.toString()); + + activities.postActivity("org.alfresco.wiki.page-renamed", params.siteId, "wiki", jsonUtils.toJSONString(data)); + + return { + name: newName // Return the new name to the client (?) } } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/RepoStore.java b/source/java/org/alfresco/repo/web/scripts/RepoStore.java index 2d89053a7c..9b04d0d2a8 100644 --- a/source/java/org/alfresco/repo/web/scripts/RepoStore.java +++ b/source/java/org/alfresco/repo/web/scripts/RepoStore.java @@ -700,6 +700,8 @@ public class RepoStore implements Store, TenantDeployer { public Object doWork() throws Exception { + // Run this in an isolated transaction to avoid flushing an uncommitted webscript transaction and + // causing deadlocks or trying to flush a 'dead' failed transaction return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() { public Object execute() throws Exception @@ -712,7 +714,7 @@ public class RepoStore implements Store, TenantDeployer } return source; } - }); + }, true, true); } }, AuthenticationUtil.getSystemUserName()); } diff --git a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java index e0cbd62f97..625bb15f04 100644 --- a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java +++ b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java @@ -163,16 +163,24 @@ public class RepositoryContainer extends AbstractRuntimeContainer implements Ten return params; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.alfresco.web.scripts.AbstractRuntimeContainer#getTemplateParameters() */ public Map getTemplateParameters() { - Map params = new HashMap(); - params.putAll(super.getTemplateParameters()); - params.put(TemplateService.KEY_IMAGE_RESOLVER, imageResolver.getImageResolver()); - addRepoParameters(params); - return params; + // This must be in an isolated read-only transaction, in case we are handling failure of another transaction + return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback>() + { + public Map execute() throws Throwable + { + Map params = new HashMap(); + params.putAll(RepositoryContainer.super.getTemplateParameters()); + params.put(TemplateService.KEY_IMAGE_RESOLVER, imageResolver.getImageResolver()); + addRepoParameters(params); + return params; + } + }, true, true); } /**