diff --git a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml index 88410392d1..fcf1104a40 100644 --- a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml +++ b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml @@ -184,7 +184,7 @@ Inbound settings from iBatis - + diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-acl-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-SqlMap.xml similarity index 56% rename from config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-acl-SqlMap.xml rename to config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-SqlMap.xml index 803eed8936..59ff55c888 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-acl-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/node-update-SqlMap.xml @@ -11,7 +11,9 @@ update alf_node set - acl_id = #{newSharedAclId} + acl_id = #{newSharedAclId}, + version = version + 1, + transaction_id = #{txnId} where id in ( select n.id @@ -27,5 +29,26 @@ ) ) + + + + update + alf_node + set + version = version + 1, + n.transaction_id = #{parent.transaction.id} + where id in + ( + select + ca.child_node_id + from + alf_child_assoc ca + where + ca.parent_node_id = #{parent.id} + and ca.is_primary = #{isPrimary} + ) + \ No newline at end of file diff --git a/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-acl-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-SqlMap.xml similarity index 54% rename from config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-acl-SqlMap.xml rename to config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-SqlMap.xml index cad03b9efe..14f1b23f7d 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-acl-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/node-update-SqlMap.xml @@ -12,7 +12,9 @@ alf_child_assoc assoc join alf_node child on (child.id = assoc.child_node_id and assoc.is_primary = #{isPrimary}) set - child.acl_id = #{newSharedAclId} + child.acl_id = #{newSharedAclId}, + child.version = child.version + 1, + child.transaction_id = #{txnId} where assoc.parent_node_id = #{primaryParentNodeId} and @@ -21,5 +23,20 @@ OR child.acl_id = #{optionalOldSharedAclIdInAdditionToNull} ) + + + + update + alf_node n + join alf_child_assoc ca on (ca.child_node_id = n.id) + set + n.version = n.version + 1, + n.transaction_id = #{parentNode.transaction.id} + where + ca.parent_node_id = #{parentNode.id} + and ca.is_primary = #{isPrimary} + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 44ac30809d..abd362a6dd 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -1565,7 +1565,12 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO Long optionalOldSharedAlcIdInAdditionToNull, Long newSharedAclId) { - updatePrimaryChildrenSharedAclId(primaryParentNodeId, optionalOldSharedAlcIdInAdditionToNull, newSharedAclId); + Long txnId = getCurrentTransactionId(); + updatePrimaryChildrenSharedAclId( + txnId, + primaryParentNodeId, + optionalOldSharedAlcIdInAdditionToNull, + newSharedAclId); invalidateCachesByNodeId(primaryParentNodeId, null, nodesCache); } @@ -3362,12 +3367,6 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO throw new DataIntegrityViolationException("Stale cache detected for Node #" + nodeId); } - private ParentAssocsInfo getParentAssocsCacheOnly(Long nodeId) - { - // can be null - return parentAssocsCache.getValue(nodeId); - } - /** * Update a node's parent associations. */ @@ -3848,6 +3847,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO protected abstract int updateNode(NodeUpdateEntity nodeUpdate); protected abstract int updateNodePatchAcl(NodeUpdateEntity nodeUpdate); protected abstract void updatePrimaryChildrenSharedAclId( + Long txnId, Long primaryParentNodeId, Long optionalOldSharedAlcIdInAdditionToNull, Long newSharedAlcId); diff --git a/source/java/org/alfresco/repo/domain/node/PrimaryChildrenAclUpdateEntity.java b/source/java/org/alfresco/repo/domain/node/PrimaryChildrenAclUpdateEntity.java index 55403e3ee5..ea5dc2f1e2 100644 --- a/source/java/org/alfresco/repo/domain/node/PrimaryChildrenAclUpdateEntity.java +++ b/source/java/org/alfresco/repo/domain/node/PrimaryChildrenAclUpdateEntity.java @@ -27,6 +27,7 @@ package org.alfresco.repo.domain.node; */ public class PrimaryChildrenAclUpdateEntity { + Long txnId; Long primaryParentNodeId; Long optionalOldSharedAclIdInAdditionToNull; Long newSharedAclId; @@ -35,6 +36,16 @@ public class PrimaryChildrenAclUpdateEntity { } + public Long getTxnId() + { + return txnId; + } + + public void setTxnId(Long txnId) + { + this.txnId = txnId; + } + public Long getPrimaryParentNodeId() { return primaryParentNodeId; diff --git a/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java index d6c9e168e9..beb3a322f2 100644 --- a/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java @@ -326,11 +326,13 @@ public class NodeDAOImpl extends AbstractNodeDAOImpl @Override protected void updatePrimaryChildrenSharedAclId( + Long txnId, Long primaryParentNodeId, Long optionalOldSharedAlcIdInAdditionToNull, Long newSharedAlcId) { PrimaryChildrenAclUpdateEntity primaryChildrenAclUpdateEntity = new PrimaryChildrenAclUpdateEntity(); + primaryChildrenAclUpdateEntity.setTxnId(txnId); primaryChildrenAclUpdateEntity.setPrimaryParentNodeId(primaryParentNodeId); primaryChildrenAclUpdateEntity.setOptionalOldSharedAclIdInAdditionToNull(optionalOldSharedAlcIdInAdditionToNull); primaryChildrenAclUpdateEntity.setNewSharedAclId(newSharedAlcId);