Перейти к основному содержимому

Конфигурация ProcessEngine в Activiti

· 5 мин. чтения

1. Обзор

В нашей предыдущей вводной статье Activiti с Java мы увидели важность ProcessEngine и создали его с помощью статического API по умолчанию, предоставляемого фреймворком.

Помимо стандартного, существуют и другие способы создания ProcessEngine , которые мы рассмотрим здесь.

2. Получение экземпляра ProcessEngine

Есть два способа получить экземпляр ProcessEngine :

  1. с помощью класса ProcessEngines
  2. программно, через ProcessEngineConfiguration

Давайте подробнее рассмотрим примеры для обоих этих подходов.

3. Получите ProcessEngine с помощью класса ProcessEngines

Как правило, ProcessEngine настраивается с использованием XML-файла с именем activiti.cfg.xml, который также будет использоваться процессом создания по умолчанию.

Вот краткий пример того, как может выглядеть эта конфигурация:

<beans xmlns="...">
<bean id="processEngineConfiguration" class=
"org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl"
vasentence you have mentioned and also changed thelue="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>

Обратите внимание, как здесь настроен аспект постоянства движка.

И теперь мы можем получить ProcessEngine :

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

4. Получите ProcessEngine с помощью ProcessEngineConfiguration

Отклоняемся от маршрута получения движка по умолчанию — есть два способа создания ProcessEngineConfiguration :

  1. Использование XML-конфигурации
  2. Использование конфигурации 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());
}

Метод createProcessEngineConfigurationFromResourceDefault() также будет искать файл activiti.cfg.xml , и теперь нам нужно только вызвать API buildProcessEngine() .

В этом случае имя компонента по умолчанию, которое он ищет, — это processEngineConfiguration . Если мы хотим изменить имя файла конфигурации или имя компонента, мы можем использовать другие доступные методы для создания файла ProcessEngineConfiguration.

Давайте посмотрим на несколько примеров.

Во-первых, мы изменим имя файла конфигурации и попросим API использовать наш пользовательский файл:

@Test 
public void givenDifferentNameXMLConfig_whenGetProcessEngineConfig_thenGotResult() {
ProcessEngineConfiguration processEngineConfiguration
= ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"my.activiti.cfg.xml");
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();

assertNotNull(processEngine);
assertEquals("foreach", 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("foreach", processEngine.getProcessEngineConfiguration()
.getJdbcUsername());
}

Конечно, теперь, когда конфигурация ожидает разные имена, нам нужно изменить имя файла (и имя компонента), чтобы оно совпадало — перед запуском теста.

Другими доступными параметрами для создания механизма являются createProcessEngineConfigurationFromInputStream(InputStream inputStream),

createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName) .

Если мы не хотим использовать конфигурацию XML, мы также можем настроить все, используя только конфигурацию Java .

Мы будем работать с четырьмя разными классами; каждый из них представляет другую среду:

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration — ProcessEngine используется автономно, при поддержке БД
  2. org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration — по умолчанию используется база данных H2 в памяти. БД создается и удаляется при запуске и выключении двигателя, следовательно, этот стиль конфигурации можно использовать для тестирования.
  3. org.activiti.spring.SpringProcessEngineConfiguration — для использования в среде Spring
  4. 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 в памяти с именем базы данных «activiti» и именем пользователя «sa».

Если нам нужно использовать какую-либо другую базу данных, нам придется настроить все явно — используя два основных свойства.

databaseType — допустимые значения: h2, mysql, oracle, postgres, mssql, db2 . Это также можно выяснить из конфигурации БД, но это будет полезно, если автоматическое обнаружение не работает.

databaseSchemaUpdate — это свойство позволяет нам определить, что происходит с базой данных, когда движок загружается или выключается. Он может иметь следующие три значения:

  1. false (по умолчанию) — этот параметр проверяет версию схемы базы данных на соответствие библиотеке. Движок выдаст исключение, если они не совпадают
  2. true — при построении конфигурации движка процесса выполняется проверка базы данных. База данных будет создана/обновлена create-drop соответственно
  3. « - » — это создаст схему БД при создании механизма процесса и удалит ее при завершении работы механизма процесса.

Мы можем определить конфигурацию БД как свойства JDBC:

<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseType" value="mysql" />

В качестве альтернативы, если мы используем DataSource :

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti" />
<property name="username" value="activiti" />
<property name="password" value="activiti" />
<property name="defaultAutoCommit" value="false" />
<property name="databaseType" value="mysql" />
</bean>

6. Заключение

В этом кратком руководстве мы сосредоточились на нескольких различных способах создания ProcessEngine в Activiti.

Мы также увидели различные свойства и подходы к настройке базы данных.

Как всегда, код примеров, которые мы видели, можно найти на GitHub .