如何锁定节点以进行删除过程

时间:2011-08-03 11:00:27

标签: alfresco

在alfresco中,我想删除一个节点,但我不想被群集环境中的任何其他用户使用。

我知道我将使用LockService来锁定节点(在集群环境中),如下面的行所示:

lockService.lock(deleteNode);
nodeService.deleteNode(deleteNode);
lockService.unlock(deleteNode);

最后一行可能会导致异常,因为该节点已被删除,实际上它会导致异常

  

操作期间发生系统错误:节点不存在:workspace:// SpacesStore / cb6473ed-1f0c-4fa3-bfdf-8f0bc86f3a12

那么如何在删除节点时确保集群环境中的并发性,以防止两个用户同时访问同一个节点,其中一个用户想要更新它,而第二个用户想要删除它?

1 个答案:

答案 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)