diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 1aa69498ef..18224eaccc 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -1058,6 +1058,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO } Long nodeId = dbNode.getId(); invalidateNodeCaches(nodeId); + dbNode.lock(); // Prevent unexpected edits of values going into the cache nodesCache.setValue(nodeId, dbNode); return dbNode.getNodePair(); } @@ -1159,6 +1160,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO logger.debug("Repairing stale cache entry for node: " + nodeId); } invalidateNodeCaches(nodeId); + dbNode.lock(); // Prevent unexpected edits of values going into the cache nodesCache.setValue(nodeId, dbNode); return dbNode.getNodePair(); } @@ -4632,6 +4634,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO { Long nodeId = node.getId(); NodeVersionKey nodeVersionKey = node.getNodeVersionKey(); + node.lock(); // Prevent unexpected edits of values going into the cache nodesCache.setValue(nodeId, node); if (propertiesCache.getValue(nodeVersionKey) == null) { diff --git a/source/java/org/alfresco/repo/domain/node/NodeEntity.java b/source/java/org/alfresco/repo/domain/node/NodeEntity.java index 6ab91565a1..78ec20375a 100644 --- a/source/java/org/alfresco/repo/domain/node/NodeEntity.java +++ b/source/java/org/alfresco/repo/domain/node/NodeEntity.java @@ -150,6 +150,11 @@ public class NodeEntity implements Node, PermissionCheckValue, Serializable { auditableProperties.lock(); } + // Help to avoid NPEs e.g. MNT-10486: NPE in NodeEntity during post-commit write through to shared cache + if (id == null || version == null) + { + throw new IllegalStateException("The NodeEntity has not be filled: " + this); + } } private synchronized final void checkLock()