«1. Обзор

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

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

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

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

  1. using the ProcessEngines class
  2. programmatically, via the 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: ~~ ~ Начнем с конфигурации XML.

  1. Using XML Config
  2. Using Java Config

Как упоминалось в разделе 2.1. — мы можем программно определить ProcessEngineConfiguration и построить ProcessEngine, используя этот экземпляр: () API.

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

@Test 
public void givenXMLConfig_whenCreateDefaultConfiguration_thenGotProcessEngine() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResourceDefault();
    ProcessEngine processEngine 
      = processEngineConfiguration.buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("root", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

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

Во-первых, мы изменим имя файла конфигурации и попросим 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());
}

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

@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());
}

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

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

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

Вот тест JUnit для создания автономной конфигурации механизма обработки:

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration – the ProcessEngine is used in a standalone way, backed by the DB
  2. org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration – by default, an H2 in-memory database is used. The DB is created and dropped when the engine starts and shuts down – hence, this configuration style can be used for testing
  3. org.activiti.spring.SpringProcessEngineConfiguration – to be used in Spring environment
  4. org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration – the engine runs in standalone mode, with JTA transactions

Аналогичным образом мы напишем тестовый пример JUnit для создания автономной конфигурации механизма обработки с использованием базы данных в памяти:

~ ~~ 5. Настройка базы данных

@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());
}

По умолчанию Activiti API будет использовать базу данных H2 в памяти с именем базы данных «activiti» и именем пользователя «sa».

@Test 
public void givenNoXMLConfig_whenCreateInMemProcessEngineConfig_thenCreated() {
    ProcessEngineConfiguration processEngineConfiguration 
      = ProcessEngineConfiguration
      .createStandaloneInMemProcessEngineConfiguration();
    ProcessEngine processEngine = processEngineConfiguration
      .buildProcessEngine();
    
    assertNotNull(processEngine);
    assertEquals("sa", processEngine.getProcessEngineConfiguration()
      .getJdbcUsername());
}

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

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

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

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

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

  1. false (default) – this option validates the version of database schema against the library. The engine will throw an exception if they do not match
  2. true – when the process engine configuration is built, a check is performed on the database. The database will be created/updated create-drop accordingly
  3. ” – this will create the DB schema when the process engine is created and will drop it when the process engine shuts down.

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

<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" />

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

<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>

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

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

«

As always, the code for examples we saw can be found over on GitHub.