Данный механизм позволяет генерировать уникальные последовательности чисел через единый API, независимо от используемой СУБД.
Основной частью данного механизма является бин UniqueNumbers
с интерфейсом UniqueNumbersAPI
, доступный в блоке Middleware. Методы интерфейса:
-
getNextNumber()
- получить следующее значение последовательности. Механизм позволяет вести одновременно несколько последовательностей, идентифицируемых простыми строками. Имя последовательности, из которой нужно получить значение, передается в параметреdomain
.Последовательности не требуют предварительной инициализации - при первом вызове
getNextNumber()
соответствующая последовательность будет создана и вернет значение 1. -
getCurrentNumber()
- получить текущее, то есть последнее сгенерированное, значение последовательности. Параметрdomain
- имя последовательности. -
setCurrentNumber()
- установить текущее значение последовательности. Следующий вызовgetNextNumber()
вернет значение, увеличенное на 1.
Пример получения следующего значения последовательности в бине блока Middleware:
@Inject private UniqueNumbersAPI uniqueNumbers; private long getNextValue() { return uniqueNumbers.getNextNumber("mySequence"); }
Для получения значений последовательностей в клиентских блоках используется метод getNextNumber()
сервиса UniqueNumbersService
.
Для управления последовательностями можно использовать JMX-бин app-core.cuba:type=UniqueNumbers
с методами, дублирующими методы UniqueNumbersAPI
.
Реализация механизма генерации последовательностей зависит от типа используемой СУБД. Для HSQL, PostgreSQL, Microsoft SQL Server 2012+ и Oracle каждой последовательности UniqueNumbersAPI
соответствует последовательность (sequence) sec_un_{domain}
в базе данных. Для Microsoft SQL Server версии ниже 2012 каждой последовательности соответствует таблица sec_un_{domain}
с автоинкрементным полем. В связи с этим управлять параметрами последовательности можно также напрямую в БД.