在alfresco中,我想删除一个节点,但我不想被群集环境中的任何其他用户使用。
我知道我将使用LockService来锁定节点(在集群环境中),如下面的行所示:
lockService.lock(deleteNode);
nodeService.deleteNode(deleteNode);
lockService.unlock(deleteNode);
最后一行可能会导致异常,因为该节点已被删除,实际上它会导致异常
操作期间发生系统错误:节点不存在:workspace:// SpacesStore / cb6473ed-1f0c-4fa3-bfdf-8f0bc86f3a12
那么如何在删除节点时确保集群环境中的并发性,以防止两个用户同时访问同一个节点,其中一个用户想要更新它,而第二个用户想要删除它?
答案 0 :(得分:1)
根据您的群集环境(例如,所有Alfresco实例使用的DB服务器相同),事务可能只是足以确保不使用陈旧内容:
serverA(readNode)
serverB(deleteNode)
serverA(updateNode) <--- transaction failure
JobLockService
允许在更复杂的操作情况下进行更多控制,这可能涉及多个动态节点(或根本没有节点,例如发送电子邮件或类似节点):
serverA(acquireLock)
serverB(acquireLock) <--- wait for the lock to be released
serverA(readNode1)
serverA(if something then updateNode2)
serverA(updateNode1)
serverA(releaseLock)
serverB(readNode2)
serverB(releaseLock)