露天中的 LockService 和 JobLockService 之间有什么区别?如果我已经存在一个节点,表示创建的其他节点的序列,并且该节点必须在 getNextSequence() 之前锁定,那么我可以在哪里使用它们?
例如:
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 是否足以满足这一点,知道序列节点无法通过 alfresco Web 客户端编辑,只能通过这行代码进行编辑。
非常感谢您的回复。 穆罕默德·阿米尔 高级系统开发人员 数字系列公司
最佳答案
tl;dr:使用 LockService 并感到高兴,在这种情况下这对您来说就足够了。
LockService
用于获取特定节点上的锁,而 JobLockService
用于处理特定任务上的并发。更具体地说:
只要您想要对特定节点或一组节点进行独占访问,就可以使用
LockService
。您必须指定要锁定哪些节点以及哪些 type of lock你想申请。一旦您获得了一个或多个节点上的锁定,系统将禁止其他用户访问这些节点,并且将继续这样做,直到您删除锁定或锁定过期当您需要一次仅执行一次特定任务(例如,为了避免并发运行)时,可以使用
JobLockService
。此服务处理的锁不绑定(bind)到特定节点,并由 QName 标识。因此,JobLockService 不会阻止任何节点被访问或修改,而是禁止其他线程或外部应用程序执行相同的任务(前提是它们首先尝试获取相同的锁)。假设您有多个访问存储库的远程系统。JobLockService
允许您在整个系统网络上强制串行执行相同的任务。
如果我正确理解您的问题,您有一个节点保存序列号或类似的内容,并且您需要 getNextSequence
可靠地提供下一个标识符。虽然您可以在这里使用这两种服务,但由于关键操作实际上绑定(bind)到单个节点(保存序列的节点),因此我宁愿在这里使用 LockService
。
关于alfresco - LockService 或 JobLockService 锁定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840016/