Пессимистическая блокировка

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

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

Также механизм пессимистической блокировки Jmix также использоваться для управления одновременным выполнением произвольных процессов. Ключевым преимуществом является распределение блокировок, поскольку они реплицируются в кластере. Более подробная информация доступна в разделе Javadocs интерфейса LockManager.

Чтобы включить пессимистическую блокировку для любой сущности, добавьте аннотацию @PessimisticLock к классу сущности, например:

@PessimisticLock(timeoutSec = 120)
@JmixEntity
@Table(name = "DOCUMENT")
@Entity
public class Document {
// ...

Атрибут аннотации timeoutSec определяет время истечения срока действия блокировки в секундах. Значение по умолчанию – 300 секунд.

Для истечения срока действия автоматической блокировки требуется планировщик заданий Quartz. Его можно предоставить, включив в проект дополнение Quartz.

Следующие свойства приложения управляют механизмом истечения срока действия:

  • Установите jmix.core.pessimistic-lock.use-default-quartz-configuration в false, чтобы отключить механизм истечения срока действия по умолчанию. Значение этого свойства по умолчанию – true.

  • Используйте jmix.core.pessimistic-lock.expiration-cron, чтобы задать выражение Cron для расписания истечения срока действия. Значение по умолчанию – 0 * * * * ?, что означает "каждую минуту".

Текущее состояние блокировок можно отслеживать с помощью экрана System → Locks. Этот экран также позволяет разблокировать любую сущность.