Конфигурация ProcessEngine в Activiti
1. обзор
В нашей предыдущей вводной статьеActiviti with Java мы увидели важностьProcessEngine и создали его с помощью статического API по умолчанию, предоставляемого фреймворком.
Помимо значения по умолчанию, есть другие способы созданияProcessEngine, которые мы рассмотрим здесь.
2. Получение экземпляраProcessEngine
Есть два способа получить экземплярProcessEngine:
-
используя классProcessEngines
-
программно, черезProcessEngineConfiguration
Давайте подробнее рассмотрим примеры обоих подходов.
3. ПолучитьProcessEngine с использованием классаProcessEngines
ОбычноProcessEngine настраивается с использованием XML-файла с именемactiviti.cfg.xml,, который также будет использовать в процессе создания по умолчанию.
Вот краткий пример того, как может выглядеть эта конфигурация:
Обратите внимание, как здесь сконфигурирован аспект персистентности двигателя.
И теперь мы можем получитьProcessEngine:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
4. ПолучитьProcessEngine с помощьюProcessEngineConfiguration
Переходя от маршрута по умолчанию для получения движка - есть два способа созданияProcessEngineConfiguration:
-
Использование XML Config
-
Использование Java Config
Начнем с конфигурации XML.
Как указано в разделе 2.1. - мы можем определитьProcessEngineConfiguration программно и построитьProcessEngine, используя этот экземпляр:
@Test
void whenCreateDefaultConfiguration_thenGotProcessEngine() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResourceDefault();
ProcessEngine processEngine
= processEngineConfiguration.buildProcessEngine();
assertNotNull(processEngine);
}
МетодcreateProcessEngineConfigurationFromResourceDefault() также будет искать файлactiviti.cfg.xml, и теперь нам нужно только вызвать APIbuildProcessEngine().
В этом случае имя bean-компонента по умолчанию, которое он ищет, -processEngineConfiguration. Если мы хотим изменить имя файла конфигурации или имя компонента, мы можем использовать другие доступные методы для созданияProcessEngineConfiguration.
Давайте посмотрим на несколько примеров.
Сначала мы изменим имя файла конфигурации и попросим API использовать наш собственный файл:
@Test
void whenGetProcessEngineConfig_thenGotResult() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"my.activiti.cfg.xml");
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
}
Теперь давайте также изменим имя компонента:
@Test
void whenGetProcessEngineConfig_thenGotResult() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"my.activiti.cfg.xml",
"myProcessEngineConfiguration");
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("root", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
Конечно, теперь, когда конфигурация ожидает разные имена, нам нужно изменить имя файла (и имя компонента), чтобы оно соответствовало - перед запуском теста.
Другие доступные варианты создания движка:createProcessEngineConfigurationFromInputStream(InputStream inputStream),createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName).
Если мы не хотим использовать конфигурацию XML,we can also set things up using Java config only.
Мы собираемся работать с четырьмя разными классами; каждый из них представляет другую среду:
-
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration –ProcessEngine используется автономно при поддержке БД
-
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration – по умолчанию используется база данных H2 в памяти. БД создается и удаляется при запуске и выключении двигателя - следовательно, этот стиль конфигурации можно использовать для тестирования
-
org.activiti.spring.SpringProcessEngineConfiguration – для использования в среде Spring
-
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration – движок работает в автономном режиме с транзакциями JTA
Давайте посмотрим на несколько примеров.
Вот тест JUnit для создания автономной конфигурации механизма процесса:
@Test
void whenCreateProcessEngineConfig_thenCreated() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
ProcessEngine processEngine = processEngineConfiguration
.setDatabaseSchemaUpdate(ProcessEngineConfiguration
.DB_SCHEMA_UPDATE_TRUE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("sa", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
Точно так же мы напишем тестовый пример JUnit для создания конфигурации автономного механизма процесса с использованием базы данных в памяти:
@Test
void whenCreateInMemProcessEngineConfig_thenCreated() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration();
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
assertNotNull(processEngine);
assertEquals("sa", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}
5. Настройка базы данных
По умолчанию Activiti API будет использовать базу данных H2 в памяти с именем базы данных «activiti» и именем пользователя «sa».
Если нам нужно использовать любую другую базу данных, нам нужно будет настроить ее явно - с помощью двух основных свойств.
databaseType - допустимые значенияh2, mysql, oracle, postgres, mssql, db2. Это также можно выяснить из конфигурации БД, но будет полезно в случае сбоя автоматического обнаружения.
databaseSchemaUpdate – это свойство позволяет нам определить, что происходит с базой данных, когда движок загружается или выключается. Может иметь следующие три значения:
-
false (по умолчанию) - этот параметр проверяет версию схемы базы данных на соответствие библиотеке. Двигатель выдаст исключение, если они не совпадают
-
true - когда конфигурация движка процесса построена, выполняется проверка базы данных. База данных будет создана / обновлена соответствующим образом.
-
«–» - это создаст схему БД при создании механизма процесса и отбросит ее, когда механизм процесса выключится.
Мы можем определить конфигурацию БД как свойства JDBC:
В качестве альтернативы, если мы используемDataSource:
6. Заключение
В этом кратком руководстве мы сосредоточились на нескольких различных способах созданияProcessEngine в Activiti.
Мы также увидели различные свойства и подходы для обработки конфигурации базы данных.
Как всегда, код примеров, которые мы видели, находится вover on GitHub.