2011-07-27 30 views
1

LockService和JobLockService在alfresco和我可以在两种情况下使用它们的情况下,我已经存在一个节点的情况下代表创建的其他节点的序列,并且必须锁定该节点getNextSequence()之前?LockService或JobLockService锁定节点

为例:

Node sequenceNode = getSequenceNode(); 
LockService(sequenceNode); 
Node aNode = new Node(new NodeRef(...)); 
Map<QName,serialzable> props = new HashMap<QName,Serializable>(); 
props.put(...,sequenceNode.getNextSequence()); 
nodeService.setProperty(..,..,..,props); 

现在的LockService是够这个知道sequenceNode不是露天的Web客户端编辑,只将是这行代码编辑。

您的回复非常感谢。 穆罕默德·阿姆鲁 高级系统开发 数码系列有限公司

回答

3

TL; DR:使用和的LockService快乐,这足以让你在这种情况下。

LockService旨在获取特定节点上的锁定,而JobLockService用于处理特定任务上的并发。更具体地讲:

  • 每当你想要的特定节点或一组节点上独占访问您使用LockService。您必须指定要锁定哪个节点以及要应用哪个节点type of lock。一旦获得了一个或多个节点上的锁定,系统将禁止其他用户访问此类节点,并且将继续这样做,直到您删除该锁定或其过期为止,您需要执行特定任务时才使用JobLockService一次只执行一次(例如为了避免并发运行)。由此服务处理的锁不绑定到特定节点,并由QNames标识。因此,JobLockService不会阻止任何节点被访问或修改,而是禁止其他线程或外部应用程序执行相同的任务(只要它们首先尝试获取相同的锁)。假设您有多个访问存储库的远程系统。 JobLockService允许您强制在整个系统网络上执行相同的taks。

如果我正确理解你的问题,你持有的序列号或类似的东西一个节点,你需要的getNextSequence是提供可靠的下一个标识符。虽然您可以在这里使用这两种服务,但由于关键操作确实绑定到单个节点(保存序列的那个节点),所以我宁愿在这里使用LockService

+0

你可以给我更多有关JobLockService的例子,直到我很困惑 –

+0

另外,非常感谢。 –

+0

可以使用JobLockService来代替LockService作为示例JobLockService.getLock(QName.createQName(....),...);这与LockService相同。 –