LockService или JobLockService для блокировки узла - PullRequest
1 голос
/ 27 июля 2011

В чем разница между 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 для этого, зная sequenceNode, не редактируемый веб-клиентом alfresco, будет редактироваться только этой строкой кода.

Ваши ответы высоко ценятся.Мохаммед Амр Старший системный разработчик Digital Series Co.

1 Ответ

3 голосов
/ 29 июля 2011

tl; dr: Используйте LockService и будьте счастливы, в этом случае вам достаточно.

LockService предназначен для получения блокировок на определенных узлах, а JobLockService используется для обработки параллелизма при выполнении определенных задач. Более конкретно:

  • вы используете LockService всякий раз, когда вам нужен монопольный доступ к определенному узлу или множеству узлов. Вы должны указать, какие узлы вы хотите заблокировать и какой тип блокировки вы хотите применить. Как только вы получили блокировку на одном или нескольких узлах, система будет запрещать другим пользователям доступ к таким узлам и будет продолжать это делать до тех пор, пока вы не снимите блокировку или не истечет

  • вы используете JobLockService, когда вам нужно, чтобы определенные задачи выполнялись только один раз за раз (например, чтобы избежать параллелизма). Блокировки, обрабатываемые этим сервисом, не привязаны к конкретным узлам и идентифицируются QNames. В результате JobLockService не препятствует доступу или изменению какого-либо узла, а скорее запрещает другим потокам или внешним приложениям выполнять ту же задачу (при условии, что они сначала пытаются получить такую ​​же блокировку). Скажем, у вас есть несколько удаленных систем, которые обращаются к хранилищу. JobLockService позволяет принудительно выполнять последовательное выполнение одних и тех же тактов во всей сети систем.

Если я правильно понимаю вашу проблему, у вас есть узел, содержащий порядковый номер или что-то подобное, и вам нужно, чтобы getNextSequence надежно предоставлял следующий идентификатор. Хотя вы можете использовать обе службы здесь, поскольку критическая операция действительно привязана к одному узлу (который содержит последовательность), я бы предпочел использовать здесь LockService.

...