Пессимистическая блокировка
Пессимистическая блокировка может использоваться, когда существует высокая вероятность одновременного редактирования одного и того же экземпляра сущности. В таких случаях оптимистическая блокировка, основанная на управлении версиями сущностей, приводит к слишком многим конфликтам.
Пессимистическая блокировка явно блокирует экземпляр сущности, когда он открывается на экране редактирования UI или в подробном представлении Flow UI. В результате только один пользователь может редактировать этот конкретный экземпляр сущности в данный момент времени.
Также механизм пессимистической блокировки Jmix также использоваться для управления одновременным выполнением произвольных процессов. Ключевым преимуществом является распределение блокировок, поскольку они реплицируются в кластере. Более подробная информация доступна в разделе Javadocs интерфейса LockManager
.
Установка
Для автоматической установки через маркетплейс Jmix обратитесь к инструкции в разделе Дополнения.
Чтобы установить дополнение вручную, добавьте следующие зависимости в ваш build.gradle
:
implementation 'io.jmix.pessimisticlock:jmix-pessimisticlock-starter'
implementation 'io.jmix.pessimisticlock:jmix-pessimisticlock-flowui-starter'
Использование
Чтобы включить пессимистическую блокировку для любой сущности, добавьте аннотацию @PessimisticLock
к классу сущности, например:
@PessimisticLock(timeoutSec = 120)
@JmixEntity
@Table(name = "DOCUMENT")
@Entity
public class Document {
// ...
Атрибут аннотации timeoutSec
определяет время истечения срока действия блокировки в секундах. Значение по умолчанию – 300 секунд.
Для истечения срока действия автоматической блокировки требуется планировщик заданий Quartz. Его можно предоставить, включив в проект дополнение Quartz.
Следующие свойства приложения управляют механизмом истечения срока действия:
-
Установите
jmix.pslock.use-default-quartz-configuration
вfalse
, чтобы отключить механизм истечения срока действия по умолчанию. Значение этого свойства по умолчанию –true
. -
Используйте
jmix.pslock.expiration-cron
, чтобы задать выражение Cron для расписания истечения срока действия. Значение по умолчанию –0 * * * * ?
, что означает "каждую минуту".
Текущее состояние блокировок можно отслеживать с помощью экрана Pessimistic Locking → Locks. Этот экран также позволяет разблокировать любую сущность.