1. Обзор
В нашей предыдущей статье Activity with Java intro мы увидели важность Process Engine и создали его с помощью статического API по умолчанию, предоставляемого платформой.
Помимо значения по умолчанию, существуют и другие способы создания Process Engine , которые мы рассмотрим здесь.
2. Получение экземпляра Механизма процесса
Есть два способа получить экземпляр Process Engine :
- использование класса Process Engine
- программно, через ProcessEngineConfiguration
Давайте подробнее рассмотрим примеры обоих этих подходов.
3. GetProcessEngine С использованием Класса Processengine
Как правило, Process Engine настраивается с помощью XML-файла с именем activiti.cfg.xml, with-это то, что также будет использоваться в процессе создания по умолчанию.
Вот краткий пример того, как может выглядеть эта конфигурация:
Обратите внимание, как здесь настроен аспект персистентности движка.
И теперь мы можем получить Process Engine :
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
4. Получить ProcessEngine С Помощью ProcessEngineConfiguration
Переход от маршрута получения движка по умолчанию – есть два способа создания ProcessEngineConfiguration :
- Использование конфигурации XML
- Использование конфигурации Java
Давайте начнем с конфигурации XML.
Как упоминалось в разделе 2.1. – мы можем определить ProcessEngineConfiguration программно и построить ProcessEngine , используя этот экземпляр:
@Test public void givenXMLConfig_whenCreateDefaultConfiguration_thenGotProcessEngine() { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault(); ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine(); assertNotNull(processEngine); assertEquals("root", processEngine.getProcessEngineConfiguration() .getJdbcUsername()); }
Метод create ProcessEngineConfiguration Из Resource Default() также будет искать activiti.cfg.xml файл, и теперь нам нужно только вызвать buildProcessEngine() API.
В этом случае имя компонента по умолчанию, которое он ищет, – processEngineConfiguration . Если мы хотим изменить имя файла конфигурации или имя компонента, мы можем использовать другие доступные методы для создания ProcessEngineConfiguration.
Давайте рассмотрим несколько примеров.
Во-первых, мы изменим имя файла конфигурации и попросим API использовать наш пользовательский файл:
@Test public void givenDifferentNameXMLConfig_whenGetProcessEngineConfig_thenGotResult() { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource( "my.activiti.cfg.xml"); ProcessEngine processEngine = processEngineConfiguration .buildProcessEngine(); assertNotNull(processEngine); assertEquals("baeldung", processEngine.getProcessEngineConfiguration() .getJdbcUsername()); }
Теперь давайте также изменим имя боба:
@Test public void givenDifferentBeanNameInXMLConfig_whenGetProcessEngineConfig_thenGotResult() { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource( "my.activiti.cfg.xml", "myProcessEngineConfiguration"); ProcessEngine processEngine = processEngineConfiguration .buildProcessEngine(); assertNotNull(processEngine); assertEquals("baeldung", processEngine.getProcessEngineConfiguration() .getJdbcUsername()); }
Конечно, теперь, когда конфигурация ожидает разные имена, нам нужно изменить имя файла (и имя компонента), чтобы оно соответствовало – перед запуском теста.
Другие доступные опции для создания движка: create ProcessEngineConfiguration From InputStream(InputStream InputStream), createProcessEngineConfigurationFromInputStream(InputStream InputStream, String beanName)
.
Если мы не хотим использовать XML-конфигурацию, мы также можем настроить все, используя только Java config .
Мы будем работать с четырьмя различными классами; каждый из них представляет собой различную среду:
- org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration – /ProcessEngine используется автономно, поддерживается базой данных org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration –
- по умолчанию используется база данных в памяти H2. БД создается и удаляется при запуске и выключении двигателя – следовательно, этот стиль конфигурации можно использовать для тестирования орг.деятельность.весна.SpringProcessEngineConfiguration –
- для использования в среде Spring org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration –
- движок работает в автономном режиме с транзакциями JTA
Давайте рассмотрим несколько примеров.
Вот тест JUnit для создания автономной конфигурации ядра процессов:
@Test public void givenNoXMLConfig_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 public void givenNoXMLConfig_whenCreateInMemProcessEngineConfig_thenCreated() { ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration .createStandaloneInMemProcessEngineConfiguration(); ProcessEngine processEngine = processEngineConfiguration .buildProcessEngine(); assertNotNull(processEngine); assertEquals("sa", processEngine.getProcessEngineConfiguration() .getJdbcUsername()); }
5. Настройка базы данных
По умолчанию Activiti API будет использовать базу данных H2 в памяти с именем базы данных “activity” и именем пользователя “sa”.
Если нам нужно использовать любую другую базу данных, нам придется настроить все явно – используя два основных свойства.
databaseType – допустимыми значениями являются h2, mysql, oracle, postgres, mssql, db2 . Это также можно выяснить из конфигурации БД, но будет полезно, если автоматическое обнаружение не удастся.
databaseSchemaUpdate – это свойство позволяет нам определить, что происходит с базой данных при загрузке или выключении движка. Он может иметь эти три значения:
- false (по умолчанию) – этот параметр проверяет версию схемы базы данных на соответствие библиотеке. Двигатель выдаст исключение, если они не совпадают
- true – при построении конфигурации ядра процесса выполняется проверка базы данных. База данных будет создана/обновлена create-drop соответственно
- ” – ” – это создаст схему БД при создании ядра процесса и отбросит ее, когда ядро процесса завершит работу.
Мы можем определить конфигурацию БД как свойства JDBC:
В качестве альтернативы, если мы используем Источник данных :
6. Заключение
В этом кратком руководстве мы сосредоточились на нескольких различных способах создания Process Engine in Activity.
Мы также видели различные свойства и подходы к настройке базы данных.
Как всегда, код для примеров, которые мы видели, можно найти на GitHub .