/**
* Add privileges on a path to a {@link Principal}. The path must already
- * exist. Session is saved.
+ * exist. Session is saved. Synchronized to prevent concurrent modifications
+ * of the same node.
*/
- public static void addPrivileges(Session session, String path,
+ public synchronized static void addPrivileges(Session session, String path,
Principal principal, List<Privilege> privs)
throws RepositoryException {
+ // make sure the session is in line with the persisted state
+ session.refresh(false);
AccessControlManager acm = session.getAccessControlManager();
AccessControlList acl = getAccessControlList(acm, path);
acl.addAccessControlEntry(principal,
log.debug("Added privileges " + privBuf + " to " + principal
+ " on " + path);
}
+ session.refresh(true);
session.save();
}